helia 4.1.0-7cd012a → 4.1.0-9c8a2c0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,6 +1,6 @@
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 VE=Object.create;var vc=Object.defineProperty;var KE=Object.getOwnPropertyDescriptor;var $E=Object.getOwnPropertyNames;var HE=Object.getPrototypeOf,qE=Object.prototype.hasOwnProperty;var Ae=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ie=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),pe=(r,e)=>{for(var t in e)vc(r,t,{get:e[t],enumerable:!0})},K3=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $E(e))!qE.call(r,o)&&o!==t&&vc(r,o,{get:()=>e[o],enumerable:!(n=KE(e,o))||n.enumerable});return r};var Ye=(r,e,t)=>(t=r!=null?VE(HE(r)):{},K3(e||!r||!r.__esModule?vc(t,"default",{value:r,enumerable:!0}):t,r)),Rc=r=>K3(vc({},"__esModule",{value:!0}),r);var $4=Ie((NO,K4)=>{var Hs=1e3,qs=Hs*60,Ws=qs*60,qo=Ws*24,Ax=qo*7,Ix=qo*365.25;K4.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Dx(r);if(t==="number"&&isFinite(r))return e.long?kx(r):Tx(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Dx(r){if(r=String(r),!(r.length>100)){var 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){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*Ix;case"weeks":case"week":case"w":return t*Ax;case"days":case"day":case"d":return t*qo;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ws;case"minutes":case"minute":case"mins":case"min":case"m":return t*qs;case"seconds":case"second":case"secs":case"sec":case"s":return t*Hs;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Tx(r){var e=Math.abs(r);return e>=qo?Math.round(r/qo)+"d":e>=Ws?Math.round(r/Ws)+"h":e>=qs?Math.round(r/qs)+"m":e>=Hs?Math.round(r/Hs)+"s":r+"ms"}function kx(r){var e=Math.abs(r);return e>=qo?Wc(r,e,qo,"day"):e>=Ws?Wc(r,e,Ws,"hour"):e>=qs?Wc(r,e,qs,"minute"):e>=Hs?Wc(r,e,Hs,"second"):r+" ms"}function Wc(r,e,t,n){var o=e>=t*1.5;return Math.round(r/t)+" "+n+(o?"s":"")}});var q4=Ie((PO,H4)=>{function Cx(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=$4(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,g,h;function p(...y){if(!p.enabled)return;let w=p,b=Number(new Date),E=b-(u||b);w.diff=E,w.prev=u,w.curr=b,u=b,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let S=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(A,D)=>{if(A==="%%")return"%";S++;let R=t.formatters[D];if(typeof R=="function"){let k=y[S];A=R.call(w,k),y.splice(S,1),S--}return A}),t.formatArgs.call(w,y),(w.log||t.log).apply(w,y)}return p.namespace=d,p.useColors=t.useColors(),p.color=t.selectColor(d),p.extend=n,p.destroy=t.destroy,Object.defineProperty(p,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(g!==t.namespaces&&(g=t.namespaces,h=t.enabled(d)),h),set:y=>{f=y}}),typeof t.init=="function"&&t.init(p),p}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),g=f.length;for(u=0;u<g;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.slice(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}H4.exports=Cx});var hh=Ie((Jt,Gc)=>{Jt.formatArgs=Px;Jt.save=Ox;Jt.load=Lx;Jt.useColors=Nx;Jt.storage=Bx();Jt.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Jt.colors=["#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 Nx(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Px(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Gc.exports.humanize(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)}Jt.log=console.debug||console.log||(()=>{});function Ox(r){try{r?Jt.storage.setItem("debug",r):Jt.storage.removeItem("debug")}catch{}}function Lx(){let r;try{r=Jt.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Bx(){try{return localStorage}catch{}}Gc.exports=q4()(Jt);var{formatters:Ux}=Gc.exports;Ux.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Wo=Ie((qO,Y4)=>{"use strict";function z4(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function Vx(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return z4(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),z4(new o,t)}}Y4.exports=Vx});var m8=Ie(ha=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,g,h;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}h=e(c),g=h[0],d=h[1],c=c.substring(d),l.push(g)}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"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,g;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),g=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===g)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,g,h;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(h=l.split("/",2),l=h[0],d=h[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(p){throw u=p,new Error("Invalid mask: "+d)}for(f=g=32;g>=0;f=--g)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(p){throw u=p,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),ha.ip2long=i,ha.long2ip=a,ha.Netmask=r}).call(ha)});var a6=Ie(ii=>{"use strict";var KR="[object ArrayBuffer]",An=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===KR}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 s=0;s<n.length;s++)if(n[s]!==o[s])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 i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},a0="string",$R=/^[0-9a-f]+$/i,HR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,qR=/^[a-zA-Z0-9-_]+$/,Pl=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=An.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},vr=class{static toString(e,t=!1){let n=An.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},Ol=class r{static isHex(e){return typeof e===a0&&$R.test(e)}static isBase64(e){return typeof e===a0&&HR.test(e)}static isBase64Url(e){return typeof e===a0&&qR.test(e)}static ToString(e,t="utf8"){let n=An.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 vr.toString(n,!0);case"utf16":case"utf16be":return vr.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 vr.fromString(e,!0);case"utf16":case"utf16be":return vr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=An.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 Pl.fromString(e);case"utf16":case"utf16be":return vr.fromString(e);case"utf16le":case"usc2":return vr.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 Pl.toString(e);case"utf16":case"utf16be":return vr.toString(e);case"utf16le":case"usc2":return vr.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=An.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=An.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.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 s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return vr.toString(e,t)}static FromUtf16String(e,t=!1){return vr.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,"")||""}};Ol.DEFAULT_UTF8_ENCODING="utf8";function WR(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function GR(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function zR(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}ii.BufferSourceConverter=An;ii.Convert=Ol;ii.assign=WR;ii.combine=GR;ii.isEqual=zR});var Su=Ie((ZV,A0)=>{var jV=function(){typeof A0<"u"&&(A0.exports=p);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(R){var k=R-R%1;return k==0&&(R<0||R===0&&1/R!=1/0)?-0:k},d=p.prototype,u=(p.fromDate=function(R){return new p(+R)},p.fromInt64BE=S(0,1,2,3,0,4),p.fromInt64LE=S(3,2,1,0,4,0),p.fromString=function(N){var k,O=new p,N=(N+="").replace(/^\s*[+\-]?\d+/,function(F){var F=+F,Y=1970+(F-1970)%400;return O.year=F-Y,Y}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(L,F,Y){return F<0&&(Y*=-1),k=6e4*(60*+F+ +Y),""}).replace(/\.\d+$/,function(L){return O.nano=+(L+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,O.time=k=Date.UTC.apply(Date,N)-(k||0),isNaN(k))throw new TypeError("Invalid Date");return y(O)},p.fromTimeT=function(R){return b(R,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(R){return this.nano+=+R||0,this},d.getNano=function(){var R=y(this);return(R.time%1e3*a+ +R.nano+1e9)%1e9},d.getTimeT=function(){var k=y(this),R=Math.floor(k.time/1e3),k=k.year;return k&&(R+=k*t*r/e),R},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(y(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(R){var k=this,O=k.toDate(),N={H:function(){return A(O.getUTCHours())},L:function(){return D(O.getUTCMilliseconds(),3)},M:function(){return A(O.getUTCMinutes())},N:function(){return D(k.getNano(),9)},S:function(){return A(O.getUTCSeconds())},Y:function(){var L=k.getYear();return 999999<L?"+"+L:9999<L?"+"+D(L,6):0<=L?D(L,4):-999999<=L?"-"+D(-L,6):L},a:function(){return g[O.getUTCDay()]},b:function(){return f[O.getUTCMonth()]},d:function(){return A(O.getUTCDate())},e:function(){return function(L){return(9<L?"":" ")+(0|L)}(O.getUTCDate())},m:function(){return A(O.getUTCMonth()+1)}};return function L(F){return F.replace(/%./g,function(Y){var C=Y[1],I=h[C],C=N[C];return I?L(I):C?C():Y})}(R||u)},d.writeInt64BE=E(0,1,2,3,0,4),d.writeInt64LE=E(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],h={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return p;function p(R,k,O){var N=this;if(!(N instanceof p))return new p(R,k,O);N.time=+R||0,N.nano=+k||0,N.year=+O||0,y(N)}function y(R){var k,O,N,L=R.year,F=R.time,Y=R.nano,I=((Y<0||a<=Y)&&(Y-=(O=Math.floor(Y/a))*a,F+=O,O=1),L%e);return(F<-s||s<F||I)&&((k=l(F/o))&&(L+=k*e,F-=k*o),(N=w(F)).setUTCFullYear(I+N.getUTCFullYear()),N=(F=+N)+(k=l((L-=I)/e))*o,k&&-s<=N&&N<=s&&(L-=k*e,F=N),O=1),O&&(R.year=L,R.time=F,R.nano=Y),R}function w(R){var k=new Date(0);return k.setTime(R),k}function b(L,N){L=+L||0;var O=l((N=(N|0)*i)/n)+l(L/n),N=N%n+L%n,L=l(N/n);return L&&(O+=L,N-=L*n),new p(1e3*N,0,O*e)}function E(R,k,O,N,L,F){return function(I,C){var T=y(this);I=I||new Array(8),_(I,C|=0);var v=Math.floor(T.time/1e3),T=T.year*(t*r/e),$=l(T/i)+l(v/i),T=T%i+v%i,v=Math.floor(T/i);return v&&($+=v,T-=v*i),Y(I,C+L,$),Y(I,C+F,T),I};function Y(I,C,$){I[C+R]=$>>24&255,I[C+k]=$>>16&255,I[C+O]=$>>8&255,I[C+N]=255&$}}function S(R,k,O,N,L,F){return function(I,C){_(I,C|=0);var $=Y(I,C+L);return b(Y(I,C+F),$)};function Y(I,C){return 16777216*I[C+R]+(I[C+k]<<16|I[C+O]<<8|I[C+N])}}function _(R,k){if(R=R&&R.length,R==null)throw new TypeError("Invalid Buffer");if(R<k+8)throw new RangeError("Out of range")}function A(R){return(9<R?"":"0")+(0|R)}function D(R,k){return(c+(0|R)).substr(-k)}}()});var k5=Ie((O$,B0)=>{"use strict";var u_=Object.prototype.hasOwnProperty,Ft="~";function Fa(){}Object.create&&(Fa.prototype=Object.create(null),new Fa().__proto__||(Ft=!1));function d_(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function T5(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new d_(t,n||r,o),i=Ft?Ft+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function $u(r,e){--r._eventsCount===0?r._events=new Fa:delete r._events[e]}function Ot(){this._events=new Fa,this._eventsCount=0}Ot.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)u_.call(t,n)&&e.push(Ft?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Ot.prototype.listeners=function(e){var t=Ft?Ft+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Ot.prototype.listenerCount=function(e){var t=Ft?Ft+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Ot.prototype.emit=function(e,t,n,o,s,i){var a=Ft?Ft+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,g;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(g=1,d=new Array(l-1);g<l;g++)d[g-1]=arguments[g];c[u].fn.apply(c[u].context,d)}}return!0};Ot.prototype.on=function(e,t,n){return T5(this,e,t,n,!1)};Ot.prototype.once=function(e,t,n){return T5(this,e,t,n,!0)};Ot.prototype.removeListener=function(e,t,n,o){var s=Ft?Ft+e:e;if(!this._events[s])return this;if(!t)return $u(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&$u(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:$u(this,s)}return this};Ot.prototype.removeAllListeners=function(e){var t;return e?(t=Ft?Ft+e:e,this._events[t]&&$u(this,t)):(this._events=new Fa,this._eventsCount=0),this};Ot.prototype.off=Ot.prototype.removeListener;Ot.prototype.addListener=Ot.prototype.on;Ot.prefixed=Ft;Ot.EventEmitter=Ot;typeof B0<"u"&&(B0.exports=Ot)});var z0=Ie((Xq,K5)=>{K5.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(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var Fg=Ie((zj,Mg)=>{function zA(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}Mg.exports=zA});var x9=Ie((tre,b9)=>{"use strict";b9.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var I9=Ie((_9,A9)=>{"use strict";var cd=x9(),{hasOwnProperty:R9}=Object.prototype,{propertyIsEnumerable:xI}=Object,Li=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),vI=_9,v9={concatArrays:!1,ignoreUndefined:!1},ld=r=>{let e=[];for(let t in r)R9.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)xI.call(r,n)&&e.push(n)}return e};function Bi(r){return Array.isArray(r)?RI(r):cd(r)?SI(r):r}function RI(r){let e=r.slice(0,0);return ld(r).forEach(t=>{Li(e,t,Bi(r[t]))}),e}function SI(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return ld(r).forEach(t=>{Li(e,t,Bi(r[t]))}),e}var S9=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Li(r,o,hp(r[o],e[o],n)):Li(r,o,Bi(e[o])))}),r),_I=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(s=>{let i=[];for(let a=0;a<s.length;a++)R9.call(s,a)&&(i.push(String(a)),s===r?Li(n,o++,s[a]):Li(n,o++,Bi(s[a])));n=S9(n,s,ld(s).filter(a=>!i.includes(a)),t)}),n};function hp(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?_I(r,e,t):!cd(e)||!cd(r)?Bi(e):S9(r,e,ld(e),t)}A9.exports=function(...r){let e=hp(Bi(v9),this!==vI&&this||{},v9),t={_:{}};for(let n of r)if(n!==void 0){if(!cd(n))throw new TypeError("`"+n+"` is not an Option Object");t=hp(t,{_:n},e)}return t._}});var k9=Ie((nre,T9)=>{"use strict";function AI(r){return r>=55296&&r<=56319}function II(r){return r>=56320&&r<=57343}T9.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],AI(i)&&II(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var N9=Ie((ore,C9)=>{"use strict";function DI(r){return r>=55296&&r<=56319}function TI(r){return r>=56320&&r<=57343}C9.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),TI(o)?s!=null&&DI(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var O9=Ie((sre,P9)=>{"use strict";var kI=k9(),CI=N9();P9.exports=kI.bind(null,CI)});var U9=Ie((ire,B9)=>{"use strict";var NI=O9(),PI=/[\/\?<>\\:\*\|"]/g,OI=/[\x00-\x1f\x80-\x9f]/g,LI=/^\.+$/,BI=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,UI=/[\. ]+$/;function L9(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(PI,e).replace(OI,e).replace(LI,e).replace(BI,e).replace(UI,e);return NI(t,255)}B9.exports=function(r,e){var t=e&&e.replacement||"",n=L9(r,t);return t===""?n:L9(n,"")}});var fy=Ie((yoe,dy)=>{"use strict";function vD(r){if(r.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),t=0;t<e.length;t++)e[t]=255;for(var n=0;n<r.length;n++){var o=r.charAt(n),s=o.charCodeAt(0);if(e[s]!==255)throw new TypeError(o+" is ambiguous");e[s]=n}var i=r.length,a=r.charAt(0),c=Math.log(i)/Math.log(256),l=Math.log(256)/Math.log(i);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 h=0,p=0,y=0,w=g.length;y!==w&&g[y]===0;)y++,h++;for(var b=(w-y)*l+1>>>0,E=new Uint8Array(b);y!==w;){for(var S=g[y],_=0,A=b-1;(S!==0||_<p)&&A!==-1;A--,_++)S+=256*E[A]>>>0,E[A]=S%i>>>0,S=S/i>>>0;if(S!==0)throw new Error("Non-zero carry");p=_,y++}for(var D=b-p;D!==b&&E[D]===0;)D++;for(var R=a.repeat(h);D<b;++D)R+=r.charAt(E[D]);return R}function u(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var h=0;if(g[h]!==" "){for(var p=0,y=0;g[h]===a;)p++,h++;for(var w=(g.length-h)*c+1>>>0,b=new Uint8Array(w);g[h];){var E=e[g.charCodeAt(h)];if(E===255)return;for(var S=0,_=w-1;(E!==0||S<y)&&_!==-1;_--,S++)E+=i*b[_]>>>0,b[_]=E%256>>>0,E=E/256>>>0;if(E!==0)throw new Error("Non-zero carry");y=S,h++}if(g[h]!==" "){for(var A=w-y;A!==w&&b[A]===0;)A++;for(var D=new Uint8Array(p+(w-A)),R=p;A!==w;)D[R++]=b[A++];return D}}}function f(g){var h=u(g);if(h)return h;throw new Error("Non-base"+i+" character")}return{encode:d,decodeUnsafe:u,decode:f}}dy.exports=vD});var Rd=Ie((woe,hy)=>{"use strict";var RD=new TextDecoder,SD=r=>RD.decode(r),_D=new TextEncoder,AD=r=>_D.encode(r);function ID(r,e){let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}hy.exports={decodeText:SD,encodeText:AD,concat:ID}});var my=Ie((Eoe,py)=>{"use strict";var{encodeText:DD}=Rd(),Pp=class{constructor(e,t,n,o){this.name=e,this.code=t,this.codeBuf=DD(this.code),this.alphabet=o,this.codec=n(o)}encode(e){return this.codec.encode(e)}decode(e){for(let t of e)if(this.alphabet&&this.alphabet.indexOf(t)<0)throw new Error(`invalid character '${t}' in '${e}'`);return this.codec.decode(e)}};py.exports=Pp});var yy=Ie((boe,gy)=>{"use strict";var TD=(r,e,t)=>{let n={};for(let l=0;l<e.length;++l)n[e[l]]=l;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=n[r[l]];if(d===void 0)throw new SyntaxError("Invalid character "+r[l]);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||255&a<<8-i)throw new SyntaxError("Unexpected end of data");return s},kD=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},CD=r=>e=>({encode(t){return kD(t,e,r)},decode(t){return TD(t,e,r)}});gy.exports={rfc4648:CD}});var xy=Ie((xoe,by)=>{"use strict";var fc=fy(),ND=my(),{rfc4648:At}=yy(),{decodeText:PD,encodeText:OD}=Rd(),LD=()=>({encode:PD,decode:OD}),wy=[["identity","\0",LD,""],["base2","0",At(1),"01"],["base8","7",At(3),"01234567"],["base10","9",fc,"0123456789"],["base16","f",At(4),"0123456789abcdef"],["base16upper","F",At(4),"0123456789ABCDEF"],["base32hex","v",At(5),"0123456789abcdefghijklmnopqrstuv"],["base32hexupper","V",At(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV"],["base32hexpad","t",At(5),"0123456789abcdefghijklmnopqrstuv="],["base32hexpadupper","T",At(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV="],["base32","b",At(5),"abcdefghijklmnopqrstuvwxyz234567"],["base32upper","B",At(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"],["base32pad","c",At(5),"abcdefghijklmnopqrstuvwxyz234567="],["base32padupper","C",At(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567="],["base32z","h",At(5),"ybndrfg8ejkmcpqxot1uwisza345h769"],["base36","k",fc,"0123456789abcdefghijklmnopqrstuvwxyz"],["base36upper","K",fc,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"],["base58btc","z",fc,"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"],["base58flickr","Z",fc,"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"],["base64","m",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"],["base64pad","M",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="],["base64url","u",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"],["base64urlpad","U",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="]],Ey=wy.reduce((r,e)=>(r[e[0]]=new ND(e[0],e[1],e[2],e[3]),r),{}),BD=wy.reduce((r,e)=>(r[e[1]]=Ey[e[0]],r),{});by.exports={names:Ey,codes:BD}});var Sy=Ie((Hn,Ry)=>{"use strict";var Ki=xy(),{encodeText:UD,decodeText:Sd,concat:vy}=Rd();function MD(r,e){if(!e)throw new Error("requires an encoded Uint8Array");let{name:t,codeBuf:n}=As(r);return $D(t,e),vy([n,e],n.length+e.length)}function FD(r,e){let t=As(r),n=UD(t.encode(e));return vy([t.codeBuf,n],t.codeBuf.length+n.length)}function VD(r){r instanceof Uint8Array&&(r=Sd(r));let e=r[0];return["f","F","v","V","t","T","b","B","c","C","h","k","K"].includes(e)&&(r=r.toLowerCase()),As(r[0]).decode(r.substring(1))}function KD(r){if(r instanceof Uint8Array&&(r=Sd(r)),Object.prototype.toString.call(r)!=="[object String]")return!1;try{return As(r[0]).name}catch{return!1}}function $D(r,e){As(r).decode(Sd(e))}function As(r){if(Object.prototype.hasOwnProperty.call(Ki.names,r))return Ki.names[r];if(Object.prototype.hasOwnProperty.call(Ki.codes,r))return Ki.codes[r];throw new Error(`Unsupported encoding: ${r}`)}function HD(r){return r instanceof Uint8Array&&(r=Sd(r)),As(r[0])}Hn=Ry.exports=MD;Hn.encode=FD;Hn.decode=VD;Hn.isEncoded=KD;Hn.encoding=As;Hn.encodingFromData=HD;var qD=Object.freeze(Ki.names),WD=Object.freeze(Ki.codes);Hn.names=qD;Hn.codes=WD});var Dy=Ie((voe,Iy)=>{Iy.exports=Ay;var _y=128,GD=127,zD=~GD,YD=Math.pow(2,31);function Ay(r,e,t){e=e||[],t=t||0;for(var n=t;r>=YD;)e[t++]=r&255|_y,r/=128;for(;r&zD;)e[t++]=r&255|_y,r>>>=7;return e[t]=r|0,Ay.bytes=t-n+1,e}});var Cy=Ie((Roe,ky)=>{ky.exports=Op;var QD=128,Ty=127;function Op(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Op.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&Ty)<<o:(i&Ty)*Math.pow(2,o),o+=7}while(i>=QD);return Op.bytes=s-n,t}});var Py=Ie((Soe,Ny)=>{var XD=Math.pow(2,7),jD=Math.pow(2,14),ZD=Math.pow(2,21),JD=Math.pow(2,28),eT=Math.pow(2,35),tT=Math.pow(2,42),rT=Math.pow(2,49),nT=Math.pow(2,56),oT=Math.pow(2,63);Ny.exports=function(r){return r<XD?1:r<jD?2:r<ZD?3:r<JD?4:r<eT?5:r<tT?6:r<rT?7:r<nT?8:r<oT?9:10}});var Ly=Ie((_oe,Oy)=>{Oy.exports={encode:Dy(),decode:Cy(),encodingLength:Py()}});var Uy=Ie((Aoe,By)=>{"use strict";var sT=Object.freeze({identity:0,sha1:17,"sha2-256":18,"sha2-512":19,"sha3-512":20,"sha3-384":21,"sha3-256":22,"sha3-224":23,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,blake3:30,"murmur3-128":34,"murmur3-32":35,"dbl-sha2-256":86,md4:212,md5:213,bmt:214,"sha2-256-trunc254-padded":4114,"ripemd-128":4178,"ripemd-160":4179,"ripemd-256":4180,"ripemd-320":4181,x11:4352,kangarootwelve:7425,"sm3-256":21325,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"skein256-8":45825,"skein256-16":45826,"skein256-24":45827,"skein256-32":45828,"skein256-40":45829,"skein256-48":45830,"skein256-56":45831,"skein256-64":45832,"skein256-72":45833,"skein256-80":45834,"skein256-88":45835,"skein256-96":45836,"skein256-104":45837,"skein256-112":45838,"skein256-120":45839,"skein256-128":45840,"skein256-136":45841,"skein256-144":45842,"skein256-152":45843,"skein256-160":45844,"skein256-168":45845,"skein256-176":45846,"skein256-184":45847,"skein256-192":45848,"skein256-200":45849,"skein256-208":45850,"skein256-216":45851,"skein256-224":45852,"skein256-232":45853,"skein256-240":45854,"skein256-248":45855,"skein256-256":45856,"skein512-8":45857,"skein512-16":45858,"skein512-24":45859,"skein512-32":45860,"skein512-40":45861,"skein512-48":45862,"skein512-56":45863,"skein512-64":45864,"skein512-72":45865,"skein512-80":45866,"skein512-88":45867,"skein512-96":45868,"skein512-104":45869,"skein512-112":45870,"skein512-120":45871,"skein512-128":45872,"skein512-136":45873,"skein512-144":45874,"skein512-152":45875,"skein512-160":45876,"skein512-168":45877,"skein512-176":45878,"skein512-184":45879,"skein512-192":45880,"skein512-200":45881,"skein512-208":45882,"skein512-216":45883,"skein512-224":45884,"skein512-232":45885,"skein512-240":45886,"skein512-248":45887,"skein512-256":45888,"skein512-264":45889,"skein512-272":45890,"skein512-280":45891,"skein512-288":45892,"skein512-296":45893,"skein512-304":45894,"skein512-312":45895,"skein512-320":45896,"skein512-328":45897,"skein512-336":45898,"skein512-344":45899,"skein512-352":45900,"skein512-360":45901,"skein512-368":45902,"skein512-376":45903,"skein512-384":45904,"skein512-392":45905,"skein512-400":45906,"skein512-408":45907,"skein512-416":45908,"skein512-424":45909,"skein512-432":45910,"skein512-440":45911,"skein512-448":45912,"skein512-456":45913,"skein512-464":45914,"skein512-472":45915,"skein512-480":45916,"skein512-488":45917,"skein512-496":45918,"skein512-504":45919,"skein512-512":45920,"skein1024-8":45921,"skein1024-16":45922,"skein1024-24":45923,"skein1024-32":45924,"skein1024-40":45925,"skein1024-48":45926,"skein1024-56":45927,"skein1024-64":45928,"skein1024-72":45929,"skein1024-80":45930,"skein1024-88":45931,"skein1024-96":45932,"skein1024-104":45933,"skein1024-112":45934,"skein1024-120":45935,"skein1024-128":45936,"skein1024-136":45937,"skein1024-144":45938,"skein1024-152":45939,"skein1024-160":45940,"skein1024-168":45941,"skein1024-176":45942,"skein1024-184":45943,"skein1024-192":45944,"skein1024-200":45945,"skein1024-208":45946,"skein1024-216":45947,"skein1024-224":45948,"skein1024-232":45949,"skein1024-240":45950,"skein1024-248":45951,"skein1024-256":45952,"skein1024-264":45953,"skein1024-272":45954,"skein1024-280":45955,"skein1024-288":45956,"skein1024-296":45957,"skein1024-304":45958,"skein1024-312":45959,"skein1024-320":45960,"skein1024-328":45961,"skein1024-336":45962,"skein1024-344":45963,"skein1024-352":45964,"skein1024-360":45965,"skein1024-368":45966,"skein1024-376":45967,"skein1024-384":45968,"skein1024-392":45969,"skein1024-400":45970,"skein1024-408":45971,"skein1024-416":45972,"skein1024-424":45973,"skein1024-432":45974,"skein1024-440":45975,"skein1024-448":45976,"skein1024-456":45977,"skein1024-464":45978,"skein1024-472":45979,"skein1024-480":45980,"skein1024-488":45981,"skein1024-496":45982,"skein1024-504":45983,"skein1024-512":45984,"skein1024-520":45985,"skein1024-528":45986,"skein1024-536":45987,"skein1024-544":45988,"skein1024-552":45989,"skein1024-560":45990,"skein1024-568":45991,"skein1024-576":45992,"skein1024-584":45993,"skein1024-592":45994,"skein1024-600":45995,"skein1024-608":45996,"skein1024-616":45997,"skein1024-624":45998,"skein1024-632":45999,"skein1024-640":46e3,"skein1024-648":46001,"skein1024-656":46002,"skein1024-664":46003,"skein1024-672":46004,"skein1024-680":46005,"skein1024-688":46006,"skein1024-696":46007,"skein1024-704":46008,"skein1024-712":46009,"skein1024-720":46010,"skein1024-728":46011,"skein1024-736":46012,"skein1024-744":46013,"skein1024-752":46014,"skein1024-760":46015,"skein1024-768":46016,"skein1024-776":46017,"skein1024-784":46018,"skein1024-792":46019,"skein1024-800":46020,"skein1024-808":46021,"skein1024-816":46022,"skein1024-824":46023,"skein1024-832":46024,"skein1024-840":46025,"skein1024-848":46026,"skein1024-856":46027,"skein1024-864":46028,"skein1024-872":46029,"skein1024-880":46030,"skein1024-888":46031,"skein1024-896":46032,"skein1024-904":46033,"skein1024-912":46034,"skein1024-920":46035,"skein1024-928":46036,"skein1024-936":46037,"skein1024-944":46038,"skein1024-952":46039,"skein1024-960":46040,"skein1024-968":46041,"skein1024-976":46042,"skein1024-984":46043,"skein1024-992":46044,"skein1024-1000":46045,"skein1024-1008":46046,"skein1024-1016":46047,"skein1024-1024":46048,"poseidon-bls12_381-a2-fc1":46081,"poseidon-bls12_381-a2-fc1-sc":46082});By.exports={names:sT}});function iT(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,b=h.length;w!==b&&h[w]===0;)w++,p++;for(var E=(b-w)*d+1>>>0,S=new Uint8Array(E);w!==b;){for(var _=h[w],A=0,D=E-1;(_!==0||A<y)&&D!==-1;D--,A++)_+=256*S[D]>>>0,S[D]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=A,w++}for(var R=E-y;R!==E&&S[R]===0;)R++;for(var k=c.repeat(p);R<E;++R)k+=r.charAt(S[R]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var b=(h.length-p)*l+1>>>0,E=new Uint8Array(b);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var _=0,A=b-1;(S!==0||_<w)&&A!==-1;A--,_++)S+=a*E[A]>>>0,E[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=_,p++}if(h[p]!==" "){for(var D=b-w;D!==b&&E[D]===0;)D++;for(var R=new Uint8Array(y+(b-D)),k=y;D!==b;)R[k++]=E[D++];return R}}}function g(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:g}}var aT,cT,My,Fy=Ae(()=>{aT=iT,cT=aT,My=cT});var Doe,Vy,qn,Ky,$y,Bo=Ae(()=>{Doe=new Uint8Array(0),Vy=(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},qn=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")},Ky=r=>new TextEncoder().encode(r),$y=r=>new TextDecoder().decode(r)});var Lp,Bp,Up,qy,Mp,$i,Uo,lT,uT,tt,Zr=Ae(()=>{Fy();Bo();Lp=class{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")}},Bp=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),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 qy(this,e)}},Up=class{constructor(e){this.decoders=e}or(e){return qy(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},qy=(r,e)=>new Up({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),Mp=class{constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Lp(e,t,n),this.decoder=new Bp(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},$i=({name:r,prefix:e,encode:t,decode:n})=>new Mp(r,e,t,n),Uo=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:o}=My(t,e);return $i({prefix:r,name:e,encode:n,decode:s=>qn(o(s))})},lT=(r,e,t,n)=>{let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i},uT=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},tt=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>$i({prefix:e,name:r,encode(o){return uT(o,n,t)},decode(o){return lT(o,n,t,r)}})});var Fp={};pe(Fp,{identity:()=>dT});var dT,Wy=Ae(()=>{Zr();Bo();dT=$i({prefix:"\0",name:"identity",encode:r=>$y(r),decode:r=>Ky(r)})});var Vp={};pe(Vp,{base2:()=>fT});var fT,Gy=Ae(()=>{Zr();fT=tt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1})});var Kp={};pe(Kp,{base8:()=>hT});var hT,zy=Ae(()=>{Zr();hT=tt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3})});var $p={};pe($p,{base10:()=>pT});var pT,Yy=Ae(()=>{Zr();pT=Uo({prefix:"9",name:"base10",alphabet:"0123456789"})});var Hp={};pe(Hp,{base16:()=>mT,base16upper:()=>gT});var mT,gT,Qy=Ae(()=>{Zr();mT=tt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),gT=tt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4})});var qp={};pe(qp,{base32:()=>Hi,base32hex:()=>bT,base32hexpad:()=>vT,base32hexpadupper:()=>RT,base32hexupper:()=>xT,base32pad:()=>wT,base32padupper:()=>ET,base32upper:()=>yT,base32z:()=>ST});var Hi,yT,wT,ET,bT,xT,vT,RT,ST,Wp=Ae(()=>{Zr();Hi=tt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),yT=tt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),wT=tt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),ET=tt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),bT=tt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),xT=tt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),vT=tt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),RT=tt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),ST=tt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5})});var Gp={};pe(Gp,{base36:()=>_T,base36upper:()=>AT});var _T,AT,Xy=Ae(()=>{Zr();_T=Uo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),AT=Uo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"})});var zp={};pe(zp,{base58btc:()=>fn,base58flickr:()=>IT});var fn,IT,Yp=Ae(()=>{Zr();fn=Uo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),IT=Uo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"})});var Qp={};pe(Qp,{base64:()=>DT,base64pad:()=>TT,base64url:()=>kT,base64urlpad:()=>CT});var DT,TT,kT,CT,jy=Ae(()=>{Zr();DT=tt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),TT=tt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),kT=tt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),CT=tt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6})});var Xp={};pe(Xp,{base256emoji:()=>BT});function OT(r){return r.reduce((e,t)=>(e+=NT[t],e),"")}function LT(r){let e=[];for(let t of r){let n=PT[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Zy,NT,PT,BT,Jy=Ae(()=>{Zr();Zy=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}"),NT=Zy.reduce((r,e,t)=>(r[t]=e,r),[]),PT=Zy.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);BT=$i({prefix:"\u{1F680}",name:"base256emoji",encode:OT,decode:LT})});function rw(r,e,t){e=e||[],t=t||0;for(var n=t;r>=VT;)e[t++]=r&255|ew,r/=128;for(;r&FT;)e[t++]=r&255|ew,r>>>=7;return e[t]=r|0,rw.bytes=t-n+1,e}function jp(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw jp.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&tw)<<o:(i&tw)*Math.pow(2,o),o+=7}while(i>=$T);return jp.bytes=s-n,t}var UT,ew,MT,FT,VT,KT,$T,tw,HT,qT,WT,GT,zT,YT,QT,XT,jT,ZT,JT,ek,hc,nw=Ae(()=>{UT=rw,ew=128,MT=127,FT=~MT,VT=Math.pow(2,31);KT=jp,$T=128,tw=127;HT=Math.pow(2,7),qT=Math.pow(2,14),WT=Math.pow(2,21),GT=Math.pow(2,28),zT=Math.pow(2,35),YT=Math.pow(2,42),QT=Math.pow(2,49),XT=Math.pow(2,56),jT=Math.pow(2,63),ZT=function(r){return r<HT?1:r<qT?2:r<WT?3:r<GT?4:r<zT?5:r<YT?6:r<QT?7:r<XT?8:r<jT?9:10},JT={encode:UT,decode:KT,encodingLength:ZT},ek=JT,hc=ek});var pc,qi,Wi,Ad=Ae(()=>{nw();pc=(r,e=0)=>[hc.decode(r,e),hc.decode.bytes],qi=(r,e,t=0)=>(hc.encode(r,e,t),e),Wi=r=>hc.encodingLength(r)});var Is,ow,sw,Gi,gc=Ae(()=>{Bo();Ad();Is=(r,e)=>{let t=e.byteLength,n=Wi(r),o=n+Wi(t),s=new Uint8Array(o+t);return qi(r,s,0),qi(t,s,n),s.set(e,o),new Gi(r,t,e,s)},ow=r=>{let e=qn(r),[t,n]=pc(e),[o,s]=pc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Gi(t,o,i,e)},sw=(r,e)=>r===e?!0:r.code===e.code&&r.size===e.size&&Vy(r.bytes,e.bytes),Gi=class{constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}}});var Jp,Zp,e3=Ae(()=>{gc();Jp=({name:r,code:e,encode:t})=>new Zp(r,e,t),Zp=class{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?Is(this.code,t):t.then(n=>Is(this.code,n))}else throw Error("Unknown type, must be binary type")}}});var t3={};pe(t3,{sha256:()=>tk,sha512:()=>rk});var aw,tk,rk,cw=Ae(()=>{e3();aw=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),tk=Jp({name:"sha2-256",code:18,encode:aw("SHA-256")}),rk=Jp({name:"sha2-512",code:19,encode:aw("SHA-512")})});var r3={};pe(r3,{identity:()=>sk});var lw,nk,uw,ok,sk,dw=Ae(()=>{Bo();gc();lw=0,nk="identity",uw=qn,ok=r=>Is(lw,uw(r)),sk={code:lw,name:nk,encode:uw,digest:ok}});var fw=Ae(()=>{Bo()});var Qoe,Xoe,hw=Ae(()=>{Qoe=new TextEncoder,Xoe=new TextDecoder});var Td,ck,lk,uk,yc,dk,pw,mw,Id,Dd,fk,hk,pk,gw=Ae(()=>{Ad();gc();Yp();Wp();Bo();Td=class r{constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this.byteOffset=o.byteOffset,this.byteLength=o.byteLength,this.asCID=this,this._baseCache=new Map,Object.defineProperties(this,{byteOffset:Dd,byteLength:Dd,code:Id,version:Id,multihash:Id,bytes:Id,_baseCache:Dd,asCID:Dd})}toV0(){switch(this.version){case 0:return this;default:{let{code:e,multihash:t}=this;if(e!==yc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==dk)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Is(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}equals(e){return e&&this.code===e.code&&this.version===e.version&&sw(this.multihash,e.multihash)}toString(e){let{bytes:t,version:n,_baseCache:o}=this;switch(n){case 0:return lk(t,o,e||fn.encoder);default:return uk(t,o,e||Hi.encoder)}}toJSON(){return{code:this.code,version:this.version,hash:this.multihash.bytes}}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return"CID("+this.toString()+")"}static isCID(e){return hk(/^0\.0/,pk),!!(e&&(e[mw]||e.asCID===e))}get toBaseEncodedString(){throw new Error("Deprecated, use .toString()")}get codec(){throw new Error('"codec" property is deprecated, use integer "code" property instead')}get buffer(){throw new Error("Deprecated .buffer property, use .bytes to get Uint8Array instead")}get multibaseName(){throw new Error('"multibaseName" property is deprecated')}get prefix(){throw new Error('"prefix" property is deprecated')}static asCID(e){if(e instanceof r)return e;if(e!=null&&e.asCID===e){let{version:t,code:n,multihash:o,bytes:s}=e;return new r(t,n,o,s||pw(t,n,o.bytes))}else if(e!=null&&e[mw]===!0){let{version:t,multihash:n,code:o}=e,s=ow(n);return r.create(t,o,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");switch(e){case 0:{if(t!==yc)throw new Error(`Version 0 CID must use dag-pb (code: ${yc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=pw(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,yc,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=qn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Gi(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=pc(e.subarray(t));return t+=f,u},o=n(),s=yc;if(o===18?(o=0,t=0):o===1&&(s=n()),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=ck(e,t),s=r.decode(o);return s._baseCache.set(n,e),s}},ck=(r,e)=>{switch(r[0]){case"Q":{let t=e||fn;return[fn.prefix,t.decode(`${fn.prefix}${r}`)]}case fn.prefix:{let t=e||fn;return[fn.prefix,t.decode(r)]}case Hi.prefix:{let t=e||Hi;return[Hi.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},lk=(r,e,t)=>{let{prefix:n}=t;if(n!==fn.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o},uk=(r,e,t)=>{let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o},yc=112,dk=18,pw=(r,e,t)=>{let n=Wi(r),o=n+Wi(e),s=new Uint8Array(o+t.byteLength);return qi(r,s,0),qi(e,s,n),s.set(t,o),s},mw=Symbol.for("@ipld/js-cid/CID"),Id={writable:!1,configurable:!1,enumerable:!0},Dd={writable:!1,enumerable:!1,configurable:!1},fk="0.0.0-dev",hk=(r,e)=>{if(r.test(fk))console.warn(e);else throw new Error(e)},pk=`CID.isCID(v) is deprecated and will be removed in the next major release.
2
+ "use strict";var Helia=(()=>{var KE=Object.create;var vc=Object.defineProperty;var $E=Object.getOwnPropertyDescriptor;var HE=Object.getOwnPropertyNames;var qE=Object.getPrototypeOf,WE=Object.prototype.hasOwnProperty;var Ae=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ie=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),pe=(r,e)=>{for(var t in e)vc(r,t,{get:e[t],enumerable:!0})},V3=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of HE(e))!WE.call(r,o)&&o!==t&&vc(r,o,{get:()=>e[o],enumerable:!(n=$E(e,o))||n.enumerable});return r};var Ye=(r,e,t)=>(t=r!=null?KE(qE(r)):{},V3(e||!r||!r.__esModule?vc(t,"default",{value:r,enumerable:!0}):t,r)),Rc=r=>V3(vc({},"__esModule",{value:!0}),r);var K4=Ie((PO,V4)=>{var Ks=1e3,$s=Ks*60,Hs=$s*60,qo=Hs*24,Ix=qo*7,Dx=qo*365.25;V4.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Tx(r);if(t==="number"&&isFinite(r))return e.long?Cx(r):kx(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Tx(r){if(r=String(r),!(r.length>100)){var 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){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*Dx;case"weeks":case"week":case"w":return t*Ix;case"days":case"day":case"d":return t*qo;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Hs;case"minutes":case"minute":case"mins":case"min":case"m":return t*$s;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ks;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function kx(r){var e=Math.abs(r);return e>=qo?Math.round(r/qo)+"d":e>=Hs?Math.round(r/Hs)+"h":e>=$s?Math.round(r/$s)+"m":e>=Ks?Math.round(r/Ks)+"s":r+"ms"}function Cx(r){var e=Math.abs(r);return e>=qo?Wc(r,e,qo,"day"):e>=Hs?Wc(r,e,Hs,"hour"):e>=$s?Wc(r,e,$s,"minute"):e>=Ks?Wc(r,e,Ks,"second"):r+" ms"}function Wc(r,e,t,n){var o=e>=t*1.5;return Math.round(r/t)+" "+n+(o?"s":"")}});var H4=Ie((OO,$4)=>{function Nx(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=o,t.enabled=i,t.humanize=K4(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let f=0;f<d.length;f++)u=(u<<5)-u+d.charCodeAt(f),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,f=null,g,h;function p(...y){if(!p.enabled)return;let w=p,b=Number(new Date),E=b-(u||b);w.diff=E,w.prev=u,w.curr=b,u=b,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let S=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(A,D)=>{if(A==="%%")return"%";S++;let R=t.formatters[D];if(typeof R=="function"){let k=y[S];A=R.call(w,k),y.splice(S,1),S--}return A}),t.formatArgs.call(w,y),(w.log||t.log).apply(w,y)}return p.namespace=d,p.useColors=t.useColors(),p.color=t.selectColor(d),p.extend=n,p.destroy=t.destroy,Object.defineProperty(p,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(g!==t.namespaces&&(g=t.namespaces,h=t.enabled(d)),h),set:y=>{f=y}}),typeof t.init=="function"&&t.init(p),p}function n(d,u){let f=t(this.namespace+(typeof u>"u"?":":u)+d);return f.log=this.log,f}function o(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u,f=(typeof d=="string"?d:"").split(/[\s,]+/),g=f.length;for(u=0;u<g;u++)f[u]&&(d=f[u].replace(/\*/g,".*?"),d[0]==="-"?t.skips.push(new RegExp("^"+d.slice(1)+"$")):t.names.push(new RegExp("^"+d+"$")))}function s(){let d=[...t.names.map(a),...t.skips.map(a).map(u=>"-"+u)].join(",");return t.enable(""),d}function i(d){if(d[d.length-1]==="*")return!0;let u,f;for(u=0,f=t.skips.length;u<f;u++)if(t.skips[u].test(d))return!1;for(u=0,f=t.names.length;u<f;u++)if(t.names[u].test(d))return!0;return!1}function a(d){return d.toString().substring(2,d.toString().length-2).replace(/\.\*\?$/,"*")}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}$4.exports=Nx});var hh=Ie((jt,Gc)=>{jt.formatArgs=Ox;jt.save=Lx;jt.load=Bx;jt.useColors=Px;jt.storage=Ux();jt.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();jt.colors=["#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 Px(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Ox(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Gc.exports.humanize(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)}jt.log=console.debug||console.log||(()=>{});function Lx(r){try{r?jt.storage.setItem("debug",r):jt.storage.removeItem("debug")}catch{}}function Bx(){let r;try{r=jt.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Ux(){try{return localStorage}catch{}}Gc.exports=H4()(jt);var{formatters:Mx}=Gc.exports;Mx.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Wo=Ie((WO,z4)=>{"use strict";function G4(r,e){for(let t in e)Object.defineProperty(r,t,{value:e[t],enumerable:!0,configurable:!0});return r}function Kx(r,e,t){if(!r||typeof r=="string")throw new TypeError("Please pass an Error to err-code");t||(t={}),typeof e=="object"&&(t=e,e=""),e&&(t.code=e);try{return G4(r,t)}catch{t.message=r.message,t.stack=r.stack;let o=function(){};return o.prototype=Object.create(Object.getPrototypeOf(r)),G4(new o,t)}}z4.exports=Kx});var p8=Ie(fa=>{(function(){var r,e,t,n,o,s,i,a;a=function(c){var l,d,u,f;return l=(c&255<<24)>>>24,d=(c&255<<16)>>>16,u=(c&65280)>>>8,f=c&255,[l,d,u,f].join(".")},i=function(c){var l,d,u,f,g,h;for(l=[],u=f=0;f<=3&&c.length!==0;u=++f){if(u>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}h=e(c),g=h[0],d=h[1],c=c.substring(d),l.push(g)}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"),s=t("a"),o=t("A"),e=function(c){var l,d,u,f,g;for(f=0,l=10,d="9",u=0,c.length>1&&c[u]==="0"&&(c[u+1]==="x"||c[u+1]==="X"?(u+=2,l=16):"0"<=c[u+1]&&c[u+1]<="9"&&(u++,l=8,d="7")),g=u;u<c.length;){if("0"<=c[u]&&c[u]<=d)f=f*l+(t(c[u])-n)>>>0;else if(l===16)if("a"<=c[u]&&c[u]<="f")f=f*l+(10+t(c[u])-s)>>>0;else if("A"<=c[u]&&c[u]<="F")f=f*l+(10+t(c[u])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");u++}if(u===g)throw new Error("empty octet");return[f,u]},r=function(){function c(l,d){var u,f,g,h;if(typeof l!="string")throw new Error("Missing `net' parameter");if(d||(h=l.split("/",2),l=h[0],d=h[1]),d||(d=32),typeof d=="string"&&d.indexOf(".")>-1){try{this.maskLong=i(d)}catch(p){throw u=p,new Error("Invalid mask: "+d)}for(f=g=32;g>=0;f=--g)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(d||d===0)this.bitmask=parseInt(d,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(i(l)&this.maskLong)>>>0}catch(p){throw u=p,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+d);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(i(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var d,u,f;for(f=i(this.first),u=i(this.last),d=0;f<=u;)l(a(f),f,d),d++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),fa.ip2long=i,fa.long2ip=a,fa.Netmask=r}).call(fa)});var i6=Ie(oi=>{"use strict";var HR="[object ArrayBuffer]",In=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===HR}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 s=0;s<n.length;s++)if(n[s]!==o[s])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 i of t)n+=i.byteLength;let o=new Uint8Array(n),s=0;for(let i of t){let a=this.toUint8Array(i);o.set(a,s),s+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},a0="string",qR=/^[0-9a-f]+$/i,WR=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,GR=/^[a-zA-Z0-9-_]+$/,Pl=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=In.toUint8Array(e),n="";for(let s=0;s<t.length;s++)n+=String.fromCharCode(t[s]);return decodeURIComponent(escape(n))}},xr=class{static toString(e,t=!1){let n=In.toArrayBuffer(e),o=new DataView(n),s="";for(let i=0;i<n.byteLength;i+=2){let a=o.getUint16(i,t);s+=String.fromCharCode(a)}return s}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let s=0;s<e.length;s++)o.setUint16(s*2,e.charCodeAt(s),t);return n}},Ol=class r{static isHex(e){return typeof e===a0&&qR.test(e)}static isBase64(e){return typeof e===a0&&WR.test(e)}static isBase64Url(e){return typeof e===a0&&GR.test(e)}static ToString(e,t="utf8"){let n=In.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 xr.toString(n,!0);case"utf16":case"utf16be":return xr.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 xr.fromString(e,!0);case"utf16":case"utf16be":return xr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=In.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 Pl.fromString(e);case"utf16":case"utf16be":return xr.fromString(e);case"utf16le":case"usc2":return xr.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 Pl.toString(e);case"utf16":case"utf16be":return xr.toString(e);case"utf16le":case"usc2":return xr.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=In.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=In.toUint8Array(e),n="",o=t.length;for(let s=0;s<o;s++){let i=t[s];i<16&&(n+="0"),n+=i.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 s=t.slice(o,o+2);n[o/2]=parseInt(s,16)}return n.buffer}static ToUtf16String(e,t=!1){return xr.toString(e,t)}static FromUtf16String(e,t=!1){return xr.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,"")||""}};Ol.DEFAULT_UTF8_ENCODING="utf8";function zR(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let s in o)t[s]=o[s]}return t}function YR(...r){let e=r.map(o=>o.byteLength).reduce((o,s)=>o+s),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let s of o)t[n++]=s}),t.buffer}function QR(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}oi.BufferSourceConverter=In;oi.Convert=Ol;oi.assign=zR;oi.combine=YR;oi.isEqual=QR});var Su=Ie((tK,A0)=>{var eK=function(){typeof A0<"u"&&(A0.exports=p);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,s=864e13,i=4294967296,a=1e6,c="000000000",l=Math.trunc||function(R){var k=R-R%1;return k==0&&(R<0||R===0&&1/R!=1/0)?-0:k},d=p.prototype,u=(p.fromDate=function(R){return new p(+R)},p.fromInt64BE=S(0,1,2,3,0,4),p.fromInt64LE=S(3,2,1,0,4,0),p.fromString=function(N){var k,O=new p,N=(N+="").replace(/^\s*[+\-]?\d+/,function(F){var F=+F,Y=1970+(F-1970)%400;return O.year=F-Y,Y}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(L,F,Y){return F<0&&(Y*=-1),k=6e4*(60*+F+ +Y),""}).replace(/\.\d+$/,function(L){return O.nano=+(L+c).substr(1,9),""}).split(/\D+/);if(1<N.length?N[1]--:N[1]=0,O.time=k=Date.UTC.apply(Date,N)-(k||0),isNaN(k))throw new TypeError("Invalid Date");return y(O)},p.fromTimeT=function(R){return b(R,0)},d.year=0,d.time=0,d.nano=0,d.addNano=function(R){return this.nano+=+R||0,this},d.getNano=function(){var R=y(this);return(R.time%1e3*a+ +R.nano+1e9)%1e9},d.getTimeT=function(){var k=y(this),R=Math.floor(k.time/1e3),k=k.year;return k&&(R+=k*t*r/e),R},d.getYear=function(){return this.toDate().getUTCFullYear()+this.year},d.toDate=function(){return w(y(this).time)},d.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},d.toString=function(R){var k=this,O=k.toDate(),N={H:function(){return A(O.getUTCHours())},L:function(){return D(O.getUTCMilliseconds(),3)},M:function(){return A(O.getUTCMinutes())},N:function(){return D(k.getNano(),9)},S:function(){return A(O.getUTCSeconds())},Y:function(){var L=k.getYear();return 999999<L?"+"+L:9999<L?"+"+D(L,6):0<=L?D(L,4):-999999<=L?"-"+D(-L,6):L},a:function(){return g[O.getUTCDay()]},b:function(){return f[O.getUTCMonth()]},d:function(){return A(O.getUTCDate())},e:function(){return function(L){return(9<L?"":" ")+(0|L)}(O.getUTCDate())},m:function(){return A(O.getUTCMonth()+1)}};return function L(F){return F.replace(/%./g,function(Y){var C=Y[1],I=h[C],C=N[C];return I?L(I):C?C():Y})}(R||u)},d.writeInt64BE=E(0,1,2,3,0,4),d.writeInt64LE=E(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],h={"%":"%",F:"%Y-%m-%d",n:`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return p;function p(R,k,O){var N=this;if(!(N instanceof p))return new p(R,k,O);N.time=+R||0,N.nano=+k||0,N.year=+O||0,y(N)}function y(R){var k,O,N,L=R.year,F=R.time,Y=R.nano,I=((Y<0||a<=Y)&&(Y-=(O=Math.floor(Y/a))*a,F+=O,O=1),L%e);return(F<-s||s<F||I)&&((k=l(F/o))&&(L+=k*e,F-=k*o),(N=w(F)).setUTCFullYear(I+N.getUTCFullYear()),N=(F=+N)+(k=l((L-=I)/e))*o,k&&-s<=N&&N<=s&&(L-=k*e,F=N),O=1),O&&(R.year=L,R.time=F,R.nano=Y),R}function w(R){var k=new Date(0);return k.setTime(R),k}function b(L,N){L=+L||0;var O=l((N=(N|0)*i)/n)+l(L/n),N=N%n+L%n,L=l(N/n);return L&&(O+=L,N-=L*n),new p(1e3*N,0,O*e)}function E(R,k,O,N,L,F){return function(I,C){var T=y(this);I=I||new Array(8),_(I,C|=0);var v=Math.floor(T.time/1e3),T=T.year*(t*r/e),$=l(T/i)+l(v/i),T=T%i+v%i,v=Math.floor(T/i);return v&&($+=v,T-=v*i),Y(I,C+L,$),Y(I,C+F,T),I};function Y(I,C,$){I[C+R]=$>>24&255,I[C+k]=$>>16&255,I[C+O]=$>>8&255,I[C+N]=255&$}}function S(R,k,O,N,L,F){return function(I,C){_(I,C|=0);var $=Y(I,C+L);return b(Y(I,C+F),$)};function Y(I,C){return 16777216*I[C+R]+(I[C+k]<<16|I[C+O]<<8|I[C+N])}}function _(R,k){if(R=R&&R.length,R==null)throw new TypeError("Invalid Buffer");if(R<k+8)throw new RangeError("Out of range")}function A(R){return(9<R?"":"0")+(0|R)}function D(R,k){return(c+(0|R)).substr(-k)}}()});var T5=Ie((U$,B0)=>{"use strict";var f_=Object.prototype.hasOwnProperty,Ft="~";function Ma(){}Object.create&&(Ma.prototype=Object.create(null),new Ma().__proto__||(Ft=!1));function h_(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function D5(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var s=new h_(t,n||r,o),i=Ft?Ft+e:e;return r._events[i]?r._events[i].fn?r._events[i]=[r._events[i],s]:r._events[i].push(s):(r._events[i]=s,r._eventsCount++),r}function $u(r,e){--r._eventsCount===0?r._events=new Ma:delete r._events[e]}function Pt(){this._events=new Ma,this._eventsCount=0}Pt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)f_.call(t,n)&&e.push(Ft?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Pt.prototype.listeners=function(e){var t=Ft?Ft+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,s=n.length,i=new Array(s);o<s;o++)i[o]=n[o].fn;return i};Pt.prototype.listenerCount=function(e){var t=Ft?Ft+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Pt.prototype.emit=function(e,t,n,o,s,i){var a=Ft?Ft+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,s),!0;case 6:return c.fn.call(c.context,t,n,o,s,i),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var f=c.length,g;for(u=0;u<f;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,n);break;case 4:c[u].fn.call(c[u].context,t,n,o);break;default:if(!d)for(g=1,d=new Array(l-1);g<l;g++)d[g-1]=arguments[g];c[u].fn.apply(c[u].context,d)}}return!0};Pt.prototype.on=function(e,t,n){return D5(this,e,t,n,!1)};Pt.prototype.once=function(e,t,n){return D5(this,e,t,n,!0)};Pt.prototype.removeListener=function(e,t,n,o){var s=Ft?Ft+e:e;if(!this._events[s])return this;if(!t)return $u(this,s),this;var i=this._events[s];if(i.fn)i.fn===t&&(!o||i.once)&&(!n||i.context===n)&&$u(this,s);else{for(var a=0,c=[],l=i.length;a<l;a++)(i[a].fn!==t||o&&!i[a].once||n&&i[a].context!==n)&&c.push(i[a]);c.length?this._events[s]=c.length===1?c[0]:c:$u(this,s)}return this};Pt.prototype.removeAllListeners=function(e){var t;return e?(t=Ft?Ft+e:e,this._events[t]&&$u(this,t)):(this._events=new Ma,this._eventsCount=0),this};Pt.prototype.off=Pt.prototype.removeListener;Pt.prototype.addListener=Pt.prototype.on;Pt.prefixed=Ft;Pt.EventEmitter=Pt;typeof B0<"u"&&(B0.exports=Pt)});var W0=Ie((eW,H5)=>{H5.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(s,i){t[s]=i,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(s){return t[s]!==void 0||n[s]!==void 0},remove:function(s){t[s]!==void 0&&(t[s]=void 0),n[s]!==void 0&&(n[s]=void 0)},get:function(s){var i=t[s];if(i!==void 0)return i;if((i=n[s])!==void 0)return o(s,i),i},set:function(s,i){t[s]!==void 0?t[s]=i:o(s,i)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var Vg=Ie((jj,Fg)=>{function YA(){return!!(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&process.versions.electron||typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent.indexOf("Electron")>=0)}Fg.exports=YA});var v9=Ie((sre,x9)=>{"use strict";x9.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var D9=Ie((A9,I9)=>{"use strict";var ld=v9(),{hasOwnProperty:S9}=Object.prototype,{propertyIsEnumerable:vI}=Object,Oi=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),RI=A9,R9={concatArrays:!1,ignoreUndefined:!1},ud=r=>{let e=[];for(let t in r)S9.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)vI.call(r,n)&&e.push(n)}return e};function Li(r){return Array.isArray(r)?SI(r):ld(r)?_I(r):r}function SI(r){let e=r.slice(0,0);return ud(r).forEach(t=>{Oi(e,t,Li(r[t]))}),e}function _I(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return ud(r).forEach(t=>{Oi(e,t,Li(r[t]))}),e}var _9=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Oi(r,o,dp(r[o],e[o],n)):Oi(r,o,Li(e[o])))}),r),AI=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(s=>{let i=[];for(let a=0;a<s.length;a++)S9.call(s,a)&&(i.push(String(a)),s===r?Oi(n,o++,s[a]):Oi(n,o++,Li(s[a])));n=_9(n,s,ud(s).filter(a=>!i.includes(a)),t)}),n};function dp(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?AI(r,e,t):!ld(e)||!ld(r)?Li(e):_9(r,e,ud(e),t)}I9.exports=function(...r){let e=dp(Li(R9),this!==RI&&this||{},R9),t={_:{}};for(let n of r)if(n!==void 0){if(!ld(n))throw new TypeError("`"+n+"` is not an Option Object");t=dp(t,{_:n},e)}return t._}});var C9=Ie((are,k9)=>{"use strict";function II(r){return r>=55296&&r<=56319}function DI(r){return r>=56320&&r<=57343}k9.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,s=0,i,a,c=0;c<o;c+=1){if(i=t.charCodeAt(c),a=t[c],II(i)&&DI(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),s+=e(a),s===n)return t.slice(0,c+1);if(s>n)return t.slice(0,c-a.length+1)}return t}});var P9=Ie((cre,N9)=>{"use strict";function TI(r){return r>=55296&&r<=56319}function kI(r){return r>=56320&&r<=57343}N9.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,s=null,i=0;i<t;i++)o=e.charCodeAt(i),kI(o)?s!=null&&TI(s)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),s=o;return n}});var L9=Ie((lre,O9)=>{"use strict";var CI=C9(),NI=P9();O9.exports=CI.bind(null,NI)});var M9=Ie((ure,U9)=>{"use strict";var PI=L9(),OI=/[\/\?<>\\:\*\|"]/g,LI=/[\x00-\x1f\x80-\x9f]/g,BI=/^\.+$/,UI=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,MI=/[\. ]+$/;function B9(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(OI,e).replace(LI,e).replace(BI,e).replace(UI,e).replace(MI,e);return PI(t,255)}U9.exports=function(r,e){var t=e&&e.replacement||"",n=B9(r,t);return t===""?n:B9(n,"")}});var hy=Ie((xoe,fy)=>{"use strict";function RD(r){if(r.length>=255)throw new TypeError("Alphabet too long");for(var e=new Uint8Array(256),t=0;t<e.length;t++)e[t]=255;for(var n=0;n<r.length;n++){var o=r.charAt(n),s=o.charCodeAt(0);if(e[s]!==255)throw new TypeError(o+" is ambiguous");e[s]=n}var i=r.length,a=r.charAt(0),c=Math.log(i)/Math.log(256),l=Math.log(256)/Math.log(i);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 h=0,p=0,y=0,w=g.length;y!==w&&g[y]===0;)y++,h++;for(var b=(w-y)*l+1>>>0,E=new Uint8Array(b);y!==w;){for(var S=g[y],_=0,A=b-1;(S!==0||_<p)&&A!==-1;A--,_++)S+=256*E[A]>>>0,E[A]=S%i>>>0,S=S/i>>>0;if(S!==0)throw new Error("Non-zero carry");p=_,y++}for(var D=b-p;D!==b&&E[D]===0;)D++;for(var R=a.repeat(h);D<b;++D)R+=r.charAt(E[D]);return R}function u(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var h=0;if(g[h]!==" "){for(var p=0,y=0;g[h]===a;)p++,h++;for(var w=(g.length-h)*c+1>>>0,b=new Uint8Array(w);g[h];){var E=e[g.charCodeAt(h)];if(E===255)return;for(var S=0,_=w-1;(E!==0||S<y)&&_!==-1;_--,S++)E+=i*b[_]>>>0,b[_]=E%256>>>0,E=E/256>>>0;if(E!==0)throw new Error("Non-zero carry");y=S,h++}if(g[h]!==" "){for(var A=w-y;A!==w&&b[A]===0;)A++;for(var D=new Uint8Array(p+(w-A)),R=p;A!==w;)D[R++]=b[A++];return D}}}function f(g){var h=u(g);if(h)return h;throw new Error("Non-base"+i+" character")}return{encode:d,decodeUnsafe:u,decode:f}}fy.exports=RD});var Sd=Ie((voe,py)=>{"use strict";var SD=new TextDecoder,_D=r=>SD.decode(r),AD=new TextEncoder,ID=r=>AD.encode(r);function DD(r,e){let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}py.exports={decodeText:_D,encodeText:ID,concat:DD}});var gy=Ie((Roe,my)=>{"use strict";var{encodeText:TD}=Sd(),Cp=class{constructor(e,t,n,o){this.name=e,this.code=t,this.codeBuf=TD(this.code),this.alphabet=o,this.codec=n(o)}encode(e){return this.codec.encode(e)}decode(e){for(let t of e)if(this.alphabet&&this.alphabet.indexOf(t)<0)throw new Error(`invalid character '${t}' in '${e}'`);return this.codec.decode(e)}};my.exports=Cp});var wy=Ie((Soe,yy)=>{"use strict";var kD=(r,e,t)=>{let n={};for(let l=0;l<e.length;++l)n[e[l]]=l;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),i=0,a=0,c=0;for(let l=0;l<o;++l){let d=n[r[l]];if(d===void 0)throw new SyntaxError("Invalid character "+r[l]);a=a<<t|d,i+=t,i>=8&&(i-=8,s[c++]=255&a>>i)}if(i>=t||255&a<<8-i)throw new SyntaxError("Unexpected end of data");return s},CD=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},ND=r=>e=>({encode(t){return CD(t,e,r)},decode(t){return kD(t,e,r)}});yy.exports={rfc4648:ND}});var vy=Ie((_oe,xy)=>{"use strict";var dc=hy(),PD=gy(),{rfc4648:At}=wy(),{decodeText:OD,encodeText:LD}=Sd(),BD=()=>({encode:OD,decode:LD}),Ey=[["identity","\0",BD,""],["base2","0",At(1),"01"],["base8","7",At(3),"01234567"],["base10","9",dc,"0123456789"],["base16","f",At(4),"0123456789abcdef"],["base16upper","F",At(4),"0123456789ABCDEF"],["base32hex","v",At(5),"0123456789abcdefghijklmnopqrstuv"],["base32hexupper","V",At(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV"],["base32hexpad","t",At(5),"0123456789abcdefghijklmnopqrstuv="],["base32hexpadupper","T",At(5),"0123456789ABCDEFGHIJKLMNOPQRSTUV="],["base32","b",At(5),"abcdefghijklmnopqrstuvwxyz234567"],["base32upper","B",At(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"],["base32pad","c",At(5),"abcdefghijklmnopqrstuvwxyz234567="],["base32padupper","C",At(5),"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567="],["base32z","h",At(5),"ybndrfg8ejkmcpqxot1uwisza345h769"],["base36","k",dc,"0123456789abcdefghijklmnopqrstuvwxyz"],["base36upper","K",dc,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"],["base58btc","z",dc,"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"],["base58flickr","Z",dc,"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"],["base64","m",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"],["base64pad","M",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="],["base64url","u",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"],["base64urlpad","U",At(6),"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="]],by=Ey.reduce((r,e)=>(r[e[0]]=new PD(e[0],e[1],e[2],e[3]),r),{}),UD=Ey.reduce((r,e)=>(r[e[1]]=by[e[0]],r),{});xy.exports={names:by,codes:UD}});var _y=Ie((Wn,Sy)=>{"use strict";var Vi=vy(),{encodeText:MD,decodeText:_d,concat:Ry}=Sd();function FD(r,e){if(!e)throw new Error("requires an encoded Uint8Array");let{name:t,codeBuf:n}=_s(r);return HD(t,e),Ry([n,e],n.length+e.length)}function VD(r,e){let t=_s(r),n=MD(t.encode(e));return Ry([t.codeBuf,n],t.codeBuf.length+n.length)}function KD(r){r instanceof Uint8Array&&(r=_d(r));let e=r[0];return["f","F","v","V","t","T","b","B","c","C","h","k","K"].includes(e)&&(r=r.toLowerCase()),_s(r[0]).decode(r.substring(1))}function $D(r){if(r instanceof Uint8Array&&(r=_d(r)),Object.prototype.toString.call(r)!=="[object String]")return!1;try{return _s(r[0]).name}catch{return!1}}function HD(r,e){_s(r).decode(_d(e))}function _s(r){if(Object.prototype.hasOwnProperty.call(Vi.names,r))return Vi.names[r];if(Object.prototype.hasOwnProperty.call(Vi.codes,r))return Vi.codes[r];throw new Error(`Unsupported encoding: ${r}`)}function qD(r){return r instanceof Uint8Array&&(r=_d(r)),_s(r[0])}Wn=Sy.exports=FD;Wn.encode=VD;Wn.decode=KD;Wn.isEncoded=$D;Wn.encoding=_s;Wn.encodingFromData=qD;var WD=Object.freeze(Vi.names),GD=Object.freeze(Vi.codes);Wn.names=WD;Wn.codes=GD});var Ty=Ie((Aoe,Dy)=>{Dy.exports=Iy;var Ay=128,zD=127,YD=~zD,QD=Math.pow(2,31);function Iy(r,e,t){e=e||[],t=t||0;for(var n=t;r>=QD;)e[t++]=r&255|Ay,r/=128;for(;r&YD;)e[t++]=r&255|Ay,r>>>=7;return e[t]=r|0,Iy.bytes=t-n+1,e}});var Ny=Ie((Ioe,Cy)=>{Cy.exports=Np;var XD=128,ky=127;function Np(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Np.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&ky)<<o:(i&ky)*Math.pow(2,o),o+=7}while(i>=XD);return Np.bytes=s-n,t}});var Oy=Ie((Doe,Py)=>{var jD=Math.pow(2,7),ZD=Math.pow(2,14),JD=Math.pow(2,21),eT=Math.pow(2,28),tT=Math.pow(2,35),rT=Math.pow(2,42),nT=Math.pow(2,49),oT=Math.pow(2,56),sT=Math.pow(2,63);Py.exports=function(r){return r<jD?1:r<ZD?2:r<JD?3:r<eT?4:r<tT?5:r<rT?6:r<nT?7:r<oT?8:r<sT?9:10}});var By=Ie((Toe,Ly)=>{Ly.exports={encode:Ty(),decode:Ny(),encodingLength:Oy()}});var My=Ie((koe,Uy)=>{"use strict";var iT=Object.freeze({identity:0,sha1:17,"sha2-256":18,"sha2-512":19,"sha3-512":20,"sha3-384":21,"sha3-256":22,"sha3-224":23,"shake-128":24,"shake-256":25,"keccak-224":26,"keccak-256":27,"keccak-384":28,"keccak-512":29,blake3:30,"murmur3-128":34,"murmur3-32":35,"dbl-sha2-256":86,md4:212,md5:213,bmt:214,"sha2-256-trunc254-padded":4114,"ripemd-128":4178,"ripemd-160":4179,"ripemd-256":4180,"ripemd-320":4181,x11:4352,kangarootwelve:7425,"sm3-256":21325,"blake2b-8":45569,"blake2b-16":45570,"blake2b-24":45571,"blake2b-32":45572,"blake2b-40":45573,"blake2b-48":45574,"blake2b-56":45575,"blake2b-64":45576,"blake2b-72":45577,"blake2b-80":45578,"blake2b-88":45579,"blake2b-96":45580,"blake2b-104":45581,"blake2b-112":45582,"blake2b-120":45583,"blake2b-128":45584,"blake2b-136":45585,"blake2b-144":45586,"blake2b-152":45587,"blake2b-160":45588,"blake2b-168":45589,"blake2b-176":45590,"blake2b-184":45591,"blake2b-192":45592,"blake2b-200":45593,"blake2b-208":45594,"blake2b-216":45595,"blake2b-224":45596,"blake2b-232":45597,"blake2b-240":45598,"blake2b-248":45599,"blake2b-256":45600,"blake2b-264":45601,"blake2b-272":45602,"blake2b-280":45603,"blake2b-288":45604,"blake2b-296":45605,"blake2b-304":45606,"blake2b-312":45607,"blake2b-320":45608,"blake2b-328":45609,"blake2b-336":45610,"blake2b-344":45611,"blake2b-352":45612,"blake2b-360":45613,"blake2b-368":45614,"blake2b-376":45615,"blake2b-384":45616,"blake2b-392":45617,"blake2b-400":45618,"blake2b-408":45619,"blake2b-416":45620,"blake2b-424":45621,"blake2b-432":45622,"blake2b-440":45623,"blake2b-448":45624,"blake2b-456":45625,"blake2b-464":45626,"blake2b-472":45627,"blake2b-480":45628,"blake2b-488":45629,"blake2b-496":45630,"blake2b-504":45631,"blake2b-512":45632,"blake2s-8":45633,"blake2s-16":45634,"blake2s-24":45635,"blake2s-32":45636,"blake2s-40":45637,"blake2s-48":45638,"blake2s-56":45639,"blake2s-64":45640,"blake2s-72":45641,"blake2s-80":45642,"blake2s-88":45643,"blake2s-96":45644,"blake2s-104":45645,"blake2s-112":45646,"blake2s-120":45647,"blake2s-128":45648,"blake2s-136":45649,"blake2s-144":45650,"blake2s-152":45651,"blake2s-160":45652,"blake2s-168":45653,"blake2s-176":45654,"blake2s-184":45655,"blake2s-192":45656,"blake2s-200":45657,"blake2s-208":45658,"blake2s-216":45659,"blake2s-224":45660,"blake2s-232":45661,"blake2s-240":45662,"blake2s-248":45663,"blake2s-256":45664,"skein256-8":45825,"skein256-16":45826,"skein256-24":45827,"skein256-32":45828,"skein256-40":45829,"skein256-48":45830,"skein256-56":45831,"skein256-64":45832,"skein256-72":45833,"skein256-80":45834,"skein256-88":45835,"skein256-96":45836,"skein256-104":45837,"skein256-112":45838,"skein256-120":45839,"skein256-128":45840,"skein256-136":45841,"skein256-144":45842,"skein256-152":45843,"skein256-160":45844,"skein256-168":45845,"skein256-176":45846,"skein256-184":45847,"skein256-192":45848,"skein256-200":45849,"skein256-208":45850,"skein256-216":45851,"skein256-224":45852,"skein256-232":45853,"skein256-240":45854,"skein256-248":45855,"skein256-256":45856,"skein512-8":45857,"skein512-16":45858,"skein512-24":45859,"skein512-32":45860,"skein512-40":45861,"skein512-48":45862,"skein512-56":45863,"skein512-64":45864,"skein512-72":45865,"skein512-80":45866,"skein512-88":45867,"skein512-96":45868,"skein512-104":45869,"skein512-112":45870,"skein512-120":45871,"skein512-128":45872,"skein512-136":45873,"skein512-144":45874,"skein512-152":45875,"skein512-160":45876,"skein512-168":45877,"skein512-176":45878,"skein512-184":45879,"skein512-192":45880,"skein512-200":45881,"skein512-208":45882,"skein512-216":45883,"skein512-224":45884,"skein512-232":45885,"skein512-240":45886,"skein512-248":45887,"skein512-256":45888,"skein512-264":45889,"skein512-272":45890,"skein512-280":45891,"skein512-288":45892,"skein512-296":45893,"skein512-304":45894,"skein512-312":45895,"skein512-320":45896,"skein512-328":45897,"skein512-336":45898,"skein512-344":45899,"skein512-352":45900,"skein512-360":45901,"skein512-368":45902,"skein512-376":45903,"skein512-384":45904,"skein512-392":45905,"skein512-400":45906,"skein512-408":45907,"skein512-416":45908,"skein512-424":45909,"skein512-432":45910,"skein512-440":45911,"skein512-448":45912,"skein512-456":45913,"skein512-464":45914,"skein512-472":45915,"skein512-480":45916,"skein512-488":45917,"skein512-496":45918,"skein512-504":45919,"skein512-512":45920,"skein1024-8":45921,"skein1024-16":45922,"skein1024-24":45923,"skein1024-32":45924,"skein1024-40":45925,"skein1024-48":45926,"skein1024-56":45927,"skein1024-64":45928,"skein1024-72":45929,"skein1024-80":45930,"skein1024-88":45931,"skein1024-96":45932,"skein1024-104":45933,"skein1024-112":45934,"skein1024-120":45935,"skein1024-128":45936,"skein1024-136":45937,"skein1024-144":45938,"skein1024-152":45939,"skein1024-160":45940,"skein1024-168":45941,"skein1024-176":45942,"skein1024-184":45943,"skein1024-192":45944,"skein1024-200":45945,"skein1024-208":45946,"skein1024-216":45947,"skein1024-224":45948,"skein1024-232":45949,"skein1024-240":45950,"skein1024-248":45951,"skein1024-256":45952,"skein1024-264":45953,"skein1024-272":45954,"skein1024-280":45955,"skein1024-288":45956,"skein1024-296":45957,"skein1024-304":45958,"skein1024-312":45959,"skein1024-320":45960,"skein1024-328":45961,"skein1024-336":45962,"skein1024-344":45963,"skein1024-352":45964,"skein1024-360":45965,"skein1024-368":45966,"skein1024-376":45967,"skein1024-384":45968,"skein1024-392":45969,"skein1024-400":45970,"skein1024-408":45971,"skein1024-416":45972,"skein1024-424":45973,"skein1024-432":45974,"skein1024-440":45975,"skein1024-448":45976,"skein1024-456":45977,"skein1024-464":45978,"skein1024-472":45979,"skein1024-480":45980,"skein1024-488":45981,"skein1024-496":45982,"skein1024-504":45983,"skein1024-512":45984,"skein1024-520":45985,"skein1024-528":45986,"skein1024-536":45987,"skein1024-544":45988,"skein1024-552":45989,"skein1024-560":45990,"skein1024-568":45991,"skein1024-576":45992,"skein1024-584":45993,"skein1024-592":45994,"skein1024-600":45995,"skein1024-608":45996,"skein1024-616":45997,"skein1024-624":45998,"skein1024-632":45999,"skein1024-640":46e3,"skein1024-648":46001,"skein1024-656":46002,"skein1024-664":46003,"skein1024-672":46004,"skein1024-680":46005,"skein1024-688":46006,"skein1024-696":46007,"skein1024-704":46008,"skein1024-712":46009,"skein1024-720":46010,"skein1024-728":46011,"skein1024-736":46012,"skein1024-744":46013,"skein1024-752":46014,"skein1024-760":46015,"skein1024-768":46016,"skein1024-776":46017,"skein1024-784":46018,"skein1024-792":46019,"skein1024-800":46020,"skein1024-808":46021,"skein1024-816":46022,"skein1024-824":46023,"skein1024-832":46024,"skein1024-840":46025,"skein1024-848":46026,"skein1024-856":46027,"skein1024-864":46028,"skein1024-872":46029,"skein1024-880":46030,"skein1024-888":46031,"skein1024-896":46032,"skein1024-904":46033,"skein1024-912":46034,"skein1024-920":46035,"skein1024-928":46036,"skein1024-936":46037,"skein1024-944":46038,"skein1024-952":46039,"skein1024-960":46040,"skein1024-968":46041,"skein1024-976":46042,"skein1024-984":46043,"skein1024-992":46044,"skein1024-1000":46045,"skein1024-1008":46046,"skein1024-1016":46047,"skein1024-1024":46048,"poseidon-bls12_381-a2-fc1":46081,"poseidon-bls12_381-a2-fc1-sc":46082});Uy.exports={names:iT}});function aT(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,b=h.length;w!==b&&h[w]===0;)w++,p++;for(var E=(b-w)*d+1>>>0,S=new Uint8Array(E);w!==b;){for(var _=h[w],A=0,D=E-1;(_!==0||A<y)&&D!==-1;D--,A++)_+=256*S[D]>>>0,S[D]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=A,w++}for(var R=E-y;R!==E&&S[R]===0;)R++;for(var k=c.repeat(p);R<E;++R)k+=r.charAt(S[R]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var b=(h.length-p)*l+1>>>0,E=new Uint8Array(b);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var _=0,A=b-1;(S!==0||_<w)&&A!==-1;A--,_++)S+=a*E[A]>>>0,E[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=_,p++}if(h[p]!==" "){for(var D=b-w;D!==b&&E[D]===0;)D++;for(var R=new Uint8Array(y+(b-D)),k=y;D!==b;)R[k++]=E[D++];return R}}}function g(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:g}}var cT,lT,Fy,Vy=Ae(()=>{cT=aT,lT=cT,Fy=lT});var Noe,Ky,Gn,$y,Hy,Uo=Ae(()=>{Noe=new Uint8Array(0),Ky=(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},Gn=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")},$y=r=>new TextEncoder().encode(r),Hy=r=>new TextDecoder().decode(r)});var Pp,Op,Lp,Wy,Bp,Ki,Mo,uT,dT,et,Zr=Ae(()=>{Vy();Uo();Pp=class{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")}},Op=class{constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),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 Wy(this,e)}},Lp=class{constructor(e){this.decoders=e}or(e){return Wy(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}},Wy=(r,e)=>new Lp({...r.decoders||{[r.prefix]:r},...e.decoders||{[e.prefix]:e}}),Bp=class{constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Pp(e,t,n),this.decoder=new Op(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}},Ki=({name:r,prefix:e,encode:t,decode:n})=>new Bp(r,e,t,n),Mo=({prefix:r,name:e,alphabet:t})=>{let{encode:n,decode:o}=Fy(t,e);return Ki({prefix:r,name:e,encode:n,decode:s=>Gn(o(s))})},uT=(r,e,t,n)=>{let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i},dT=(r,e,t)=>{let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s},et=({name:r,prefix:e,bitsPerChar:t,alphabet:n})=>Ki({prefix:e,name:r,encode(o){return dT(o,n,t)},decode(o){return uT(o,n,t,r)}})});var Up={};pe(Up,{identity:()=>fT});var fT,Gy=Ae(()=>{Zr();Uo();fT=Ki({prefix:"\0",name:"identity",encode:r=>Hy(r),decode:r=>$y(r)})});var Mp={};pe(Mp,{base2:()=>hT});var hT,zy=Ae(()=>{Zr();hT=et({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1})});var Fp={};pe(Fp,{base8:()=>pT});var pT,Yy=Ae(()=>{Zr();pT=et({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3})});var Vp={};pe(Vp,{base10:()=>mT});var mT,Qy=Ae(()=>{Zr();mT=Mo({prefix:"9",name:"base10",alphabet:"0123456789"})});var Kp={};pe(Kp,{base16:()=>gT,base16upper:()=>yT});var gT,yT,Xy=Ae(()=>{Zr();gT=et({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),yT=et({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4})});var $p={};pe($p,{base32:()=>$i,base32hex:()=>xT,base32hexpad:()=>RT,base32hexpadupper:()=>ST,base32hexupper:()=>vT,base32pad:()=>ET,base32padupper:()=>bT,base32upper:()=>wT,base32z:()=>_T});var $i,wT,ET,bT,xT,vT,RT,ST,_T,Hp=Ae(()=>{Zr();$i=et({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),wT=et({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),ET=et({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),bT=et({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),xT=et({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),vT=et({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),RT=et({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),ST=et({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),_T=et({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5})});var qp={};pe(qp,{base36:()=>AT,base36upper:()=>IT});var AT,IT,jy=Ae(()=>{Zr();AT=Mo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),IT=Mo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"})});var Wp={};pe(Wp,{base58btc:()=>fn,base58flickr:()=>DT});var fn,DT,Gp=Ae(()=>{Zr();fn=Mo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),DT=Mo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"})});var zp={};pe(zp,{base64:()=>TT,base64pad:()=>kT,base64url:()=>CT,base64urlpad:()=>NT});var TT,kT,CT,NT,Zy=Ae(()=>{Zr();TT=et({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),kT=et({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),CT=et({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),NT=et({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6})});var Yp={};pe(Yp,{base256emoji:()=>UT});function LT(r){return r.reduce((e,t)=>(e+=PT[t],e),"")}function BT(r){let e=[];for(let t of r){let n=OT[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Jy,PT,OT,UT,ew=Ae(()=>{Zr();Jy=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}"),PT=Jy.reduce((r,e,t)=>(r[t]=e,r),[]),OT=Jy.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);UT=Ki({prefix:"\u{1F680}",name:"base256emoji",encode:LT,decode:BT})});function nw(r,e,t){e=e||[],t=t||0;for(var n=t;r>=KT;)e[t++]=r&255|tw,r/=128;for(;r&VT;)e[t++]=r&255|tw,r>>>=7;return e[t]=r|0,nw.bytes=t-n+1,e}function Qp(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw Qp.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&rw)<<o:(i&rw)*Math.pow(2,o),o+=7}while(i>=HT);return Qp.bytes=s-n,t}var MT,tw,FT,VT,KT,$T,HT,rw,qT,WT,GT,zT,YT,QT,XT,jT,ZT,JT,ek,tk,fc,ow=Ae(()=>{MT=nw,tw=128,FT=127,VT=~FT,KT=Math.pow(2,31);$T=Qp,HT=128,rw=127;qT=Math.pow(2,7),WT=Math.pow(2,14),GT=Math.pow(2,21),zT=Math.pow(2,28),YT=Math.pow(2,35),QT=Math.pow(2,42),XT=Math.pow(2,49),jT=Math.pow(2,56),ZT=Math.pow(2,63),JT=function(r){return r<qT?1:r<WT?2:r<GT?3:r<zT?4:r<YT?5:r<QT?6:r<XT?7:r<jT?8:r<ZT?9:10},ek={encode:MT,decode:$T,encodingLength:JT},tk=ek,fc=tk});var hc,Hi,qi,Id=Ae(()=>{ow();hc=(r,e=0)=>[fc.decode(r,e),fc.decode.bytes],Hi=(r,e,t=0)=>(fc.encode(r,e,t),e),qi=r=>fc.encodingLength(r)});var As,sw,iw,Wi,mc=Ae(()=>{Uo();Id();As=(r,e)=>{let t=e.byteLength,n=qi(r),o=n+qi(t),s=new Uint8Array(o+t);return Hi(r,s,0),Hi(t,s,n),s.set(e,o),new Wi(r,t,e,s)},sw=r=>{let e=Gn(r),[t,n]=hc(e),[o,s]=hc(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Wi(t,o,i,e)},iw=(r,e)=>r===e?!0:r.code===e.code&&r.size===e.size&&Ky(r.bytes,e.bytes),Wi=class{constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}}});var jp,Xp,Zp=Ae(()=>{mc();jp=({name:r,code:e,encode:t})=>new Xp(r,e,t),Xp=class{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?As(this.code,t):t.then(n=>As(this.code,n))}else throw Error("Unknown type, must be binary type")}}});var Jp={};pe(Jp,{sha256:()=>rk,sha512:()=>nk});var cw,rk,nk,lw=Ae(()=>{Zp();cw=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),rk=jp({name:"sha2-256",code:18,encode:cw("SHA-256")}),nk=jp({name:"sha2-512",code:19,encode:cw("SHA-512")})});var e3={};pe(e3,{identity:()=>ik});var uw,ok,dw,sk,ik,fw=Ae(()=>{Uo();mc();uw=0,ok="identity",dw=Gn,sk=r=>As(uw,dw(r)),ik={code:uw,name:ok,encode:dw,digest:sk}});var hw=Ae(()=>{Uo()});var Joe,ese,pw=Ae(()=>{Joe=new TextEncoder,ese=new TextDecoder});var kd,lk,uk,dk,gc,fk,mw,gw,Dd,Td,hk,pk,mk,yw=Ae(()=>{Id();mc();Gp();Hp();Uo();kd=class r{constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this.byteOffset=o.byteOffset,this.byteLength=o.byteLength,this.asCID=this,this._baseCache=new Map,Object.defineProperties(this,{byteOffset:Td,byteLength:Td,code:Dd,version:Dd,multihash:Dd,bytes:Dd,_baseCache:Td,asCID:Td})}toV0(){switch(this.version){case 0:return this;default:{let{code:e,multihash:t}=this;if(e!==gc)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==fk)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=As(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}equals(e){return e&&this.code===e.code&&this.version===e.version&&iw(this.multihash,e.multihash)}toString(e){let{bytes:t,version:n,_baseCache:o}=this;switch(n){case 0:return uk(t,o,e||fn.encoder);default:return dk(t,o,e||$i.encoder)}}toJSON(){return{code:this.code,version:this.version,hash:this.multihash.bytes}}get[Symbol.toStringTag](){return"CID"}[Symbol.for("nodejs.util.inspect.custom")](){return"CID("+this.toString()+")"}static isCID(e){return pk(/^0\.0/,mk),!!(e&&(e[gw]||e.asCID===e))}get toBaseEncodedString(){throw new Error("Deprecated, use .toString()")}get codec(){throw new Error('"codec" property is deprecated, use integer "code" property instead')}get buffer(){throw new Error("Deprecated .buffer property, use .bytes to get Uint8Array instead")}get multibaseName(){throw new Error('"multibaseName" property is deprecated')}get prefix(){throw new Error('"prefix" property is deprecated')}static asCID(e){if(e instanceof r)return e;if(e!=null&&e.asCID===e){let{version:t,code:n,multihash:o,bytes:s}=e;return new r(t,n,o,s||mw(t,n,o.bytes))}else if(e!=null&&e[gw]===!0){let{version:t,multihash:n,code:o}=e,s=sw(n);return r.create(t,o,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");switch(e){case 0:{if(t!==gc)throw new Error(`Version 0 CID must use dag-pb (code: ${gc}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=mw(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,gc,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Wi(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=hc(e.subarray(t));return t+=f,u},o=n(),s=gc;if(o===18?(o=0,t=0):o===1&&(s=n()),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=lk(e,t),s=r.decode(o);return s._baseCache.set(n,e),s}},lk=(r,e)=>{switch(r[0]){case"Q":{let t=e||fn;return[fn.prefix,t.decode(`${fn.prefix}${r}`)]}case fn.prefix:{let t=e||fn;return[fn.prefix,t.decode(r)]}case $i.prefix:{let t=e||$i;return[$i.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}},uk=(r,e,t)=>{let{prefix:n}=t;if(n!==fn.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o},dk=(r,e,t)=>{let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o},gc=112,fk=18,mw=(r,e,t)=>{let n=qi(r),o=n+qi(e),s=new Uint8Array(o+t.byteLength);return Hi(r,s,0),Hi(e,s,n),s.set(t,o),s},gw=Symbol.for("@ipld/js-cid/CID"),Dd={writable:!1,configurable:!1,enumerable:!0},Td={writable:!1,enumerable:!1,configurable:!1},hk="0.0.0-dev",pk=(r,e)=>{if(r.test(hk))console.warn(e);else throw new Error(e)},mk=`CID.isCID(v) is deprecated and will be removed in the next major release.
4
4
  Following code pattern:
5
5
 
6
6
  if (CID.isCID(value)) {
@@ -14,12 +14,12 @@ if (cid) {
14
14
  // Make sure to use cid instead of value
15
15
  doSomethingWithCID(cid)
16
16
  }
17
- `});var yw=Ae(()=>{gw();Ad();Bo();e3();gc()});var n3,ose,ww=Ae(()=>{Wy();Gy();zy();Yy();Qy();Wp();Xy();Yp();jy();Jy();cw();dw();fw();hw();yw();n3={...Fp,...Vp,...Kp,...$p,...Hp,...qp,...Gp,...zp,...Qp,...Xp},ose={...t3,...r3}});function zi(r){return globalThis.Buffer!=null?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r}var kd=Ae(()=>{});function Cd(r=0){return globalThis.Buffer!=null&&globalThis.Buffer.allocUnsafe!=null?zi(globalThis.Buffer.allocUnsafe(r)):new Uint8Array(r)}var o3=Ae(()=>{kd()});function bw(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Ew,s3,mk,Nd,i3=Ae(()=>{ww();o3();Ew=bw("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),s3=bw("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=Cd(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),mk={utf8:Ew,"utf-8":Ew,hex:n3.base16,latin1:s3,ascii:s3,binary:s3,...n3},Nd=mk});var xw={};pe(xw,{toString:()=>gk});function gk(r,e="utf8"){let t=Nd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):t.encoder.encode(r).substring(1)}var vw=Ae(()=>{i3()});var Rw={};pe(Rw,{fromString:()=>yk});function yk(r,e="utf8"){let t=Nd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?zi(globalThis.Buffer.from(r,"utf-8")):t.decoder.decode(`${t.prefix}${r}`)}var Sw=Ae(()=>{i3();kd()});var _w={};pe(_w,{concat:()=>wk});function wk(r,e){e||(e=r.reduce((o,s)=>o+s.length,0));let t=Cd(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return zi(t)}var Aw=Ae(()=>{o3();kd()});var c3=Ie((yse,Nw)=>{"use strict";var Iw=Sy(),Yi=Ly(),{names:wc}=Uy(),{toString:Pd}=(vw(),Rc(xw)),{fromString:Ek}=(Sw(),Rc(Rw)),{concat:bk}=(Aw(),Rc(_w)),Qi={};for(let r in wc){let e=r;Qi[wc[e]]=e}Object.freeze(Qi);function xk(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Pd(r,"base16")}function vk(r){return Ek(r,"base16")}function Rk(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Pd(Iw.encode("base58btc",r)).slice(1)}function Sk(r){let e=r instanceof Uint8Array?Pd(r):r;return Iw.decode("z"+e)}function Dw(r){if(!(r instanceof Uint8Array))throw new Error("multihash must be a Uint8Array");if(r.length<2)throw new Error("multihash too short. must be > 2 bytes.");let e=Yi.decode(r);if(!kw(e))throw new Error(`multihash unknown function code: 0x${e.toString(16)}`);r=r.slice(Yi.decode.bytes);let t=Yi.decode(r);if(t<0)throw new Error(`multihash invalid length: ${t}`);if(r=r.slice(Yi.decode.bytes),r.length!==t)throw new Error(`multihash length inconsistent: 0x${Pd(r,"base16")}`);return{code:e,name:Qi[e],length:t,digest:r}}function _k(r,e,t){if(!r||e===void 0)throw new Error("multihash encode requires at least two args: digest, code");let n=Tw(e);if(!(r instanceof Uint8Array))throw new Error("digest should be a Uint8Array");if(t==null&&(t=r.length),t&&r.length!==t)throw new Error("digest length should be equal to specified length.");let o=Yi.encode(n),s=Yi.encode(t);return bk([o,s,r],o.length+s.length+r.length)}function Tw(r){let e=r;if(typeof r=="string"){if(wc[r]===void 0)throw new Error(`Unrecognized hash function named: ${r}`);e=wc[r]}if(typeof e!="number")throw new Error(`Hash function code should be a number. Got: ${e}`);if(Qi[e]===void 0&&!a3(e))throw new Error(`Unrecognized function code: ${e}`);return e}function a3(r){return r>0&&r<16}function kw(r){return!!(a3(r)||Qi[r])}function Cw(r){Dw(r)}function Ak(r){return Cw(r),r.subarray(0,2)}Nw.exports={names:wc,codes:Qi,toHexString:xk,fromHexString:vk,toB58String:Rk,fromB58String:Sk,decode:Dw,encode:_k,coerceCode:Tw,isAppCode:a3,validate:Cw,prefix:Ak,isValidCode:kw}});var Ww=Ie(Ud=>{"use strict";Object.defineProperty(Ud,"__esModule",{value:!0});var f3=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}))}}},Bd=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new f3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Ud.EventIterator=Bd;Ud.default=Bd});var Gw=Ie(Ec=>{"use strict";Object.defineProperty(Ec,"__esModule",{value:!0});var h3=Ww();Ec.EventIterator=h3.EventIterator;function Ok(r,e,t){return new h3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Ec.subscribe=Ok;Ec.default=h3.EventIterator});var fC={};pe(fC,{DEFAULT_SESSION_MAX_PROVIDERS:()=>hf,DEFAULT_SESSION_MIN_PROVIDERS:()=>ff,DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY:()=>pf,DEFAULT_SESSION_PROVIDER_QUERY_TIMEOUT:()=>$3,createHelia:()=>uC,libp2pDefaults:()=>Vd});var ff=1,hf=5,pf=5,$3=5e3;var H3=Symbol.for("@libp2p/connection");var Jr=Symbol.for("@libp2p/content-routing");var Vo=Symbol.for("@libp2p/peer-discovery");var mf=Symbol.for("@libp2p/peer-id");function Ns(r){return r!=null&&!!r[mf]}var en=Symbol.for("@libp2p/peer-routing");var q3="keep-alive";var tn=Symbol.for("@libp2p/transport");var Gn;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Gn||(Gn={}));var jt=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.name="AbortError",this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},m=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}},Sc=class extends AggregateError{code;props;constructor(e,t,n,o){super(e,t),this.code=n,this.name=o?.name??"AggregateCodeError",this.props=o??{}}};var pn="ERR_TIMEOUT";var W3="ERR_NOT_FOUND",Ko="ERR_INVALID_MESSAGE";var ie=(r,...e)=>{try{[...e]}catch{}};var Re=class extends EventTarget{#e=new Map;constructor(){super(),ie(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==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 wt(e,t))}},gf=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},wt=globalThis.CustomEvent??gf;function _c(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function zn(...r){let e=[];for(let t of r)_c(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 Yn(...r){let e=[];for(let t of r)_c(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()}))}function ot(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.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 Ac=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Ps=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Ac(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 Ac(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 yf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function st(r={}){return WE(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 WE(r,e){e=e??{};let t=e.onEnd,n=new Ps,o,s,i,a=j(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((y,w)=>{s=b=>{s=null,n.push(b);try{y(r(n))}catch(E){w(E)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=j()})}},l=y=>s!=null?s(y):(n.push(y),o),d=y=>(n=new Ps,s!=null?s({error:y}):(n.push({error:y}),o)),u=y=>{if(i)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})},f=y=>i?o:(i=!0,y!=null?d(y):l({done:!0})),g=()=>(n=new Ps,f(),{done:!0}),h=y=>(f(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:g,throw:h,push:u,end:f,get readableLength(){return n.size},onEmpty:async y=>{let w=y?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let b,E;w!=null&&(b=new Promise((S,_)=>{E=()=>{_(new yf)},w.addEventListener("abort",E)}));try{await Promise.race([a.promise,b])}finally{E!=null&&w!=null&&w?.removeEventListener("abort",E)}}},t==null)return o;let p=o;return o={[Symbol.asyncIterator](){return this},next(){return p.next()},throw(y){return p.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return p.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(y){return p.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return p.readableLength},onEmpty:y=>p.onEmpty(y)},o}var wf=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 Os(r,e,t,n){let o=new wf(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((s,i)=>{let a=l=>{try{if(n?.filter?.(l)===!1)return}catch(d){r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(d);return}r.removeEventListener(e,a),t?.removeEventListener("abort",c),s(l)},c=()=>{r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(o)};r.addEventListener(e,a),t?.addEventListener("abort",c)})}var Ic=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){if(e==null)return r;if(e.aborted)return Promise.reject(new Ic(t?.errorMessage,t?.errorCode));let n,o=new Ic(t?.errorMessage,t?.errorCode);try{return await Promise.race([r,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Dc=class{deferred;signal;where;constructor(e,t){this.signal=t,this.deferred=j(),this.where=e,this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(new jt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function GE(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Tc=class{id;fn;options;priority;recipients;status;timeline;controller;constructor(e,t,n=0){this.id=GE(),this.status="queued",this.fn=e,this.priority=n,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,ie(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&this.controller.abort(new jt)}async join(e={}){let t=new Dc(new Error("where").stack,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 Lt(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.signal?.removeEventListener("abort",this.onAbort)})}};function zE(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var mn=class extends Re{concurrency;queue;pending;constructor(e={}){super(),this.concurrency=e.concurrency??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.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){if(this.queue[this.size-1]?.priority>=e.priority){this.queue.push(e);return}let t=zE(this.queue,e,(n,o)=>o.priority-n.priority);this.queue.splice(t,0,e)}async add(e,t){t?.signal?.throwIfAborted();let n=new Tc(e,t,t?.priority),o=n.join(t).then(s=>(this.safeDispatchEvent("completed",{detail:s}),s)).catch(s=>{throw this.safeDispatchEvent("error",{detail:s}),s});return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),o}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new jt)}),this.clear()}async onEmpty(e){this.size!==0&&await Os(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Os(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Os(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=st({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail)},i=()=>{n()},a=()=>{n(new m("Queue aborted","ERR_QUEUE_ABORTED"))};this.addEventListener("completed",o),this.addEventListener("error",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var Vt=class extends mn{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var kc=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 s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}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 i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&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 s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var G3=45,YE=15,Ls=new kc;function Ef(r){if(!(r.length>YE))return Ls.new(r).parseWith(()=>Ls.readIPv4Addr())}function bf(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>G3))return Ls.new(r).parseWith(()=>Ls.readIPv6Addr())}function Cc(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>G3))return Ls.new(r).parseWith(()=>Ls.readIPAddr())}function Bs(r){return!!Ef(r)}function Us(r){return!!bf(r)}function Nc(r){return!!Cc(r)}var _f={};pe(_f,{base58btc:()=>Ge,base58flickr:()=>eb});var eN=new Uint8Array(0);function z3(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 gn(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 Y3(r){return new TextEncoder().encode(r)}function Q3(r){return new TextDecoder().decode(r)}function QE(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,b=h.length;w!==b&&h[w]===0;)w++,p++;for(var E=(b-w)*d+1>>>0,S=new Uint8Array(E);w!==b;){for(var _=h[w],A=0,D=E-1;(_!==0||A<y)&&D!==-1;D--,A++)_+=256*S[D]>>>0,S[D]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=A,w++}for(var R=E-y;R!==E&&S[R]===0;)R++;for(var k=c.repeat(p);R<E;++R)k+=r.charAt(S[R]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var b=(h.length-p)*l+1>>>0,E=new Uint8Array(b);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var _=0,A=b-1;(S!==0||_<w)&&A!==-1;A--,_++)S+=a*E[A]>>>0,E[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=_,p++}if(h[p]!==" "){for(var D=b-w;D!==b&&E[D]===0;)D++;for(var R=new Uint8Array(y+(b-D)),k=y;D!==b;)R[k++]=E[D++];return R}}}function g(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:g}}var XE=QE,jE=XE,j3=jE;var xf=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")}},vf=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),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 Z3(this,e)}},Rf=class{decoders;constructor(e){this.decoders=e}or(e){return Z3(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 Z3(r,e){return new Rf({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Sf=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 xf(e,t,n),this.decoder=new vf(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Ms({name:r,prefix:e,encode:t,decode:n}){return new Sf(r,e,t,n)}function Qn({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=j3(t,r);return Ms({prefix:e,name:r,encode:n,decode:s=>gn(o(s))})}function ZE(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function JE(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function Qe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Ms({prefix:e,name:r,encode(o){return JE(o,n,t)},decode(o){return ZE(o,n,t,r)}})}var Ge=Qn({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),eb=Qn({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Af={};pe(Af,{base32:()=>lt,base32hex:()=>nb,base32hexpad:()=>sb,base32hexpadupper:()=>ib,base32hexupper:()=>ob,base32pad:()=>tb,base32padupper:()=>rb,base32upper:()=>J3,base32z:()=>ab});var lt=Qe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),J3=Qe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),tb=Qe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),rb=Qe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),nb=Qe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),ob=Qe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),sb=Qe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),ib=Qe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),ab=Qe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var pr={};pe(pr,{Digest:()=>$o,create:()=>Nr,decode:()=>Pr,equals:()=>Df});var cb=r4,e4=128,lb=127,ub=~lb,db=Math.pow(2,31);function r4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=db;)e[t++]=r&255|e4,r/=128;for(;r&ub;)e[t++]=r&255|e4,r>>>=7;return e[t]=r|0,r4.bytes=t-n+1,e}var fb=If,hb=128,t4=127;function If(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw If.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&t4)<<o:(i&t4)*Math.pow(2,o),o+=7}while(i>=hb);return If.bytes=s-n,t}var pb=Math.pow(2,7),mb=Math.pow(2,14),gb=Math.pow(2,21),yb=Math.pow(2,28),wb=Math.pow(2,35),Eb=Math.pow(2,42),bb=Math.pow(2,49),xb=Math.pow(2,56),vb=Math.pow(2,63),Rb=function(r){return r<pb?1:r<mb?2:r<gb?3:r<yb?4:r<wb?5:r<Eb?6:r<bb?7:r<xb?8:r<vb?9:10},Sb={encode:cb,decode:fb,encodingLength:Rb},_b=Sb,ta=_b;function ra(r,e=0){return[ta.decode(r,e),ta.decode.bytes]}function Fs(r,e,t=0){return ta.encode(r,e,t),e}function Vs(r){return ta.encodingLength(r)}function Nr(r,e){let t=e.byteLength,n=Vs(r),o=n+Vs(t),s=new Uint8Array(o+t);return Fs(r,s,0),Fs(t,s,n),s.set(e,o),new $o(r,t,e,s)}function Pr(r){let e=gn(r),[t,n]=ra(e),[o,s]=ra(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new $o(t,o,i,e)}function Df(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&z3(r.bytes,t.bytes)}}var $o=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function n4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Ib(t,Tf(r),e??Ge.encoder);default:return Db(t,Tf(r),e??lt.encoder)}}var o4=new WeakMap;function Tf(r){let e=o4.get(r);if(e==null){let t=new Map;return o4.set(r,t),t}return e}var ce=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!==na)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Tb)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=Nr(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&&Df(e.multihash,n.multihash)}toString(e){return n4(this,e)}toJSON(){return{"/":n4(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:s,bytes:i}=t;return new r(n,o,s,i??s4(n,o,s.bytes))}else if(t[kb]===!0){let{version:n,multihash:o,code:s}=t,i=Pr(o);return r.create(n,s,i)}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!==na)throw new Error(`Version 0 CID must use dag-pb (code: ${na}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=s4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,na,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=gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new $o(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=ra(e.subarray(t));return t+=f,u},o=n(),s=na;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=Ab(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Tf(s).set(n,e),s}};function Ab(r,e){switch(r[0]){case"Q":{let t=e??Ge;return[Ge.prefix,t.decode(`${Ge.prefix}${r}`)]}case Ge.prefix:{let t=e??Ge;return[Ge.prefix,t.decode(r)]}case lt.prefix:{let t=e??lt;return[lt.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Ib(r,e,t){let{prefix:n}=t;if(n!==Ge.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function Db(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var na=112,Tb=18;function s4(r,e,t){let n=Vs(r),o=n+Vs(e),s=new Uint8Array(o+t.byteLength);return Fs(r,s,0),Fs(e,s,n),s.set(t,o),s}var kb=Symbol.for("@ipld/js-cid/CID");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 kf={};pe(kf,{base10:()=>Cb});var Cb=Qn({prefix:"9",name:"base10",alphabet:"0123456789"});var Cf={};pe(Cf,{base16:()=>Nb,base16upper:()=>Pb});var Nb=Qe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Pb=Qe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Nf={};pe(Nf,{base2:()=>Ob});var Ob=Qe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Pf={};pe(Pf,{base256emoji:()=>Fb});var i4=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}"),Lb=i4.reduce((r,e,t)=>(r[t]=e,r),[]),Bb=i4.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function Ub(r){return r.reduce((e,t)=>(e+=Lb[t],e),"")}function Mb(r){let e=[];for(let t of r){let n=Bb[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Fb=Ms({prefix:"\u{1F680}",name:"base256emoji",encode:Ub,decode:Mb});var Of={};pe(Of,{base36:()=>Xn,base36upper:()=>Vb});var Xn=Qn({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Vb=Qn({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Bf={};pe(Bf,{base64:()=>ut,base64pad:()=>Kb,base64url:()=>Lf,base64urlpad:()=>$b});var ut=Qe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),Kb=Qe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Lf=Qe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),$b=Qe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Uf={};pe(Uf,{base8:()=>Hb});var Hb=Qe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Mf={};pe(Mf,{identity:()=>qb});var qb=Ms({prefix:"\0",name:"identity",encode:r=>Q3(r),decode:r=>Y3(r)});var _N=new TextEncoder,AN=new TextDecoder;var a4=512;var Oc=85;var Vf={};pe(Vf,{identity:()=>mr});var l4=0,Wb="identity",u4=gn;function Gb(r){return Nr(l4,u4(r))}var mr={code:l4,name:Wb,encode:u4,digest:Gb};var qf={};pe(qf,{sha256:()=>De,sha512:()=>Hf});function $f({name:r,code:e,encode:t}){return new Kf(r,e,t)}var Kf=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?Nr(this.code,t):t.then(n=>Nr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function f4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var De=$f({name:"sha2-256",code:18,encode:f4("SHA-256")}),Hf=$f({name:"sha2-512",code:19,encode:f4("SHA-512")});var gr={...Mf,...Nf,...Uf,...kf,...Cf,...Af,...Of,..._f,...Bf,...Pf},FN={...qf,...Vf};function Ce(r=0){return new Uint8Array(r)}function ze(r=0){return new Uint8Array(r)}function p4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var h4=p4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Wf=p4("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=ze(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),zb={utf8:h4,"utf-8":h4,hex:gr.base16,latin1:Wf,ascii:Wf,binary:Wf,...gr},Lc=zb;function P(r,e="utf8"){let t=Lc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var Yb=Math.pow(2,7),Qb=Math.pow(2,14),Xb=Math.pow(2,21),Gf=Math.pow(2,28),zf=Math.pow(2,35),Yf=Math.pow(2,42),Qf=Math.pow(2,49),Te=128,kt=127;function Ne(r){if(r<Yb)return 1;if(r<Qb)return 2;if(r<Xb)return 3;if(r<Gf)return 4;if(r<zf)return 5;if(r<Yf)return 6;if(r<Qf)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Xf(r,e,t=0){switch(Ne(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function jb(r,e,t=0){switch(Ne(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function jf(r,e){let t=r[e],n=0;if(n+=t&kt,t<Te||(t=r[e+1],n+=(t&kt)<<7,t<Te)||(t=r[e+2],n+=(t&kt)<<14,t<Te)||(t=r[e+3],n+=(t&kt)<<21,t<Te)||(t=r[e+4],n+=(t&kt)*Gf,t<Te)||(t=r[e+5],n+=(t&kt)*zf,t<Te)||(t=r[e+6],n+=(t&kt)*Yf,t<Te)||(t=r[e+7],n+=(t&kt)*Qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Zb(r,e){let t=r.get(e),n=0;if(n+=t&kt,t<Te||(t=r.get(e+1),n+=(t&kt)<<7,t<Te)||(t=r.get(e+2),n+=(t&kt)<<14,t<Te)||(t=r.get(e+3),n+=(t&kt)<<21,t<Te)||(t=r.get(e+4),n+=(t&kt)*Gf,t<Te)||(t=r.get(e+5),n+=(t&kt)*zf,t<Te)||(t=r.get(e+6),n+=(t&kt)*Yf,t<Te)||(t=r.get(e+7),n+=(t&kt)*Qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=ze(Ne(r))),e instanceof Uint8Array?Xf(r,e,t):jb(r,e,t)}function Bt(r,e=0){return r instanceof Uint8Array?jf(r,e):Zb(r,e)}function xe(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=ze(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var oP=parseInt("0xFFFF",16),sP=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function B(r,e="utf8"){let t=Lc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var y4=Bs,ox=Us,Zf=function(r){let e=0;if(r=r.toString().trim(),y4(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(ox(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=y4(t[n]),i;s&&(i=Zf(t[n]),t[n]=P(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,P(i.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 s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},w4=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 s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Ks={},Jf={},ix=[[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"],[777,-1,"memory"]];ix.forEach(r=>{let e=ax(...r);Jf[e.code]=e,Ks[e.name]=e});function ax(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Z(r){if(typeof r=="number"){if(Jf[r]!=null)return Jf[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Ks[r]!=null)return Ks[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var $P=Z("ip4"),HP=Z("ip6"),qP=Z("ipcidr");function th(r,e){switch(Z(r).code){case 4:case 41:return lx(e);case 42:return x4(e);case 6:case 273:case 33:case 132:return R4(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return x4(e);case 421:return hx(e);case 444:return v4(e);case 445:return v4(e);case 466:return fx(e);default:return P(e,"base16")}}function rh(r,e){switch(Z(r).code){case 4:return E4(e);case 41:return E4(e);case 42:return b4(e);case 6:case 273:case 33:case 132:return nh(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return b4(e);case 421:return ux(e);case 444:return px(e);case 445:return mx(e);case 466:return dx(e);default:return B(e,"base16")}}var eh=Object.values(gr).map(r=>r.decoder),cx=function(){let r=eh[0].or(eh[1]);return eh.slice(2).forEach(e=>r=r.or(e)),r}();function E4(r){if(!Nc(r))throw new Error("invalid ip address");return Zf(r)}function lx(r){let e=w4(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Nc(e))throw new Error("invalid ip address");return e}function nh(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function R4(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function b4(r){let e=B(r),t=Uint8Array.from(Ve(e.length));return xe([t,e],t.length+e.length)}function x4(r){let e=Bt(r);if(r=r.slice(Ne(e)),r.length!==e)throw new Error("inconsistent lengths");return P(r)}function ux(r){let e;r[0]==="Q"||r[0]==="1"?e=Pr(Ge.decode(`z${r}`)).bytes:e=ce.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return xe([t,e],t.length+e.length)}function dx(r){let e=cx.decode(r),t=Uint8Array.from(Ve(e.length));return xe([t,e],t.length+e.length)}function fx(r){let e=Bt(r),t=r.slice(Ne(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+P(t,"base64url")}function hx(r){let e=Bt(r),t=r.slice(Ne(e));if(t.length!==e)throw new Error("inconsistent lengths");return P(t,"base58btc")}function px(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=lt.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=nh(n);return xe([t,o],t.length+o.length)}function mx(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=lt.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=nh(n);return xe([t,o],t.length+o.length)}function v4(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=P(e,"base32"),o=R4(t);return`${n}:${o}`}function S4(r){r=oh(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 s=0;s<o.length;s++){let i=o[s],a=Z(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw A4("invalid address: "+r);if(a.path===!0){n=oh(o.slice(s).join("/")),e.push([a.code,rh(a.code,n)]),t.push([a.code,n]);break}let c=rh(a.code,o[s]);e.push([a.code,c]),t.push([a.code,th(a.code,c)])}return{string:_4(t),bytes:ih(e),tuples:e,stringTuples:t,path:n}}function sh(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Bt(r,o),i=Ne(s),a=Z(s),c=gx(a,r.slice(o+i));if(c===0){e.push([s]),t.push([s]),o+=i;continue}let l=r.slice(o+i,o+i+c);if(o+=c+i,o>r.length)throw A4("Invalid address Uint8Array: "+P(r,"base16"));e.push([s,l]);let d=th(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:_4(t),tuples:e,stringTuples:t,path:n}}function _4(r){let e=[];return r.map(t=>{let n=Z(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),oh(e.join("/"))}function ih(r){return xe(r.map(e=>{let t=Z(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=xe([n,e[1]])),n}))}function gx(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Bt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ne(t)}}function oh(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function A4(r){return new Error("Error parsing address: "+r)}var yx=Symbol.for("nodejs.util.inspect.custom"),ah=Symbol.for("@multiformats/js-multiaddr/multiaddr"),wx=[Z("dns").code,Z("dns4").code,Z("dns6").code,Z("dnsaddr").code],Bc=class r{bytes;#e;#t;#r;#i;[ah]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=sh(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=S4(e)}else if(jn(e))t=sh(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.#i=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=Z("tcp"),a=Z("udp"),c=Z("ip4"),l=Z("ip6"),d=Z("dns6"),u=Z("ip6zone");for(let[g,h]of this.stringTuples())g===u.code&&(s=`%${h??""}`),wx.includes(g)&&(t=i.name,o=443,n=`${h??""}${s}`,e=g===d.code?6:4),(g===i.code||g===a.code)&&(t=Z(g).name,o=parseInt(h??"")),(g===c.code||g===l.code)&&(t=Z(g).name,n=`${h??""}${s}`,e=g===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({},Z(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Z(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(ih(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Ks.p2p.code&&e.push([n,o]),n===Ks["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?P(Ge.decode(`z${n}`),"base58btc"):P(ce.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#i}equals(e){return J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=$s.get(t.name);if(n==null)throw new m(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>X(s))}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)}[yx](){return`Multiaddr(${this.#e})`}};var $s=new Map;function jn(r){return!!r?.[ah]}function X(r){return new Bc(r)}var Ex=r=>r.toString().split("/").slice(1),oa=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Se=r=>({match:e=>oa(t=>t===r).match(e),pattern:r}),Fc=()=>({match:r=>oa(e=>typeof e=="string").match(r),pattern:"{string}"}),Vc=()=>({match:r=>oa(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Et=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Ge.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Uc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Lf.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Ut=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Zt=(...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(", ")})`}),Pe=(...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 rt(...r){function e(o){let s=Ex(o);for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matches:t,exactMatch:n}}var lh=Pe(Se("dns4"),Fc()),uh=Pe(Se("dns6"),Fc()),dh=Pe(Se("dnsaddr"),Fc()),I4=Pe(Se("dns"),Fc()),EO=rt(lh),bO=rt(uh),xO=rt(dh),Kc=rt(Zt(I4,dh,lh,uh)),D4=Pe(Se("ip4"),oa(Bs)),T4=Pe(Se("ip6"),oa(Us)),k4=Zt(D4,T4),rn=Zt(k4,I4,lh,uh,dh),C4=rt(rn),vO=rt(D4),RO=rt(T4),N4=rt(k4),$c=Pe(rn,Se("tcp"),Vc()),sa=Pe(rn,Se("udp"),Vc()),bx=Zt($c,sa),SO=rt($c),_O=rt(sa),fh=Pe(sa,Se("quic")),Hc=Pe(sa,Se("quic-v1")),xx=Zt(fh,Hc),AO=rt(fh),IO=rt(Hc),ch=Zt(rn,$c,sa,fh,Hc),P4=Zt(Pe(ch,Se("ws"),Ut(Et()))),DO=rt(P4),O4=Zt(Pe(ch,Se("wss"),Ut(Et())),Pe(ch,Se("tls"),Se("ws"),Ut(Et()))),TO=rt(O4),L4=Pe(bx,Se("webrtc-direct"),Uc(),Ut(Uc()),Ut(Et())),B4=rt(L4),U4=Pe(Hc,Se("webtransport"),Uc(),Uc(),Ut(Et())),qc=rt(U4),Mc=Zt(P4,O4,Pe($c,Ut(Et())),Pe(xx,Ut(Et())),Pe(rn,Ut(Et())),L4,U4,Et()),kO=rt(Mc),vx=Pe(Mc,Se("p2p-circuit"),Et()),Ho=rt(vx),Rx=Zt(Pe(Mc,Se("p2p-circuit"),Se("webrtc"),Et()),Pe(Mc,Se("webrtc"),Ut(Et())),Se("webrtc")),M4=rt(Rx),Sx=Zt(Pe(rn,Se("tcp"),Vc(),Se("http"),Ut(Et())),Pe(rn,Se("http"),Ut(Et()))),F4=rt(Sx),_x=Zt(Pe(rn,Se("tcp"),Zt(Pe(Se("443"),Se("http")),Pe(Vc(),Se("https"))),Ut(Et())),Pe(rn,Se("tls"),Se("http"),Ut(Et())),Pe(rn,Se("https"),Ut(Et()))),V4=rt(_x);var a8=Ye(hh(),1);function Mx(r){return r[Symbol.asyncIterator]!=null}function Fx(r){if(Mx(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Kt=Fx;var G4=Symbol.for("@achingbrain/uint8arraylist");function W4(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 zc(r){return!!r?.[G4]}var ue=class r{bufs;length;[G4]=!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(zc(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(zc(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=W4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=W4(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(zc(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 xe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:xe(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_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 s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!zc(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 s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let g=this.get(u+f);if(n[f]!==g){d=Math.max(1,f-a[g]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=ze(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=Ce(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=Ce(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=Ce(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=ze(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=Ce(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=Ce(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=Ce(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=Ce(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=Ce(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,s)=>o+s.byteLength,0)),n.length=t,n}};function Yc(r){return r[Symbol.asyncIterator]!=null}var Qc=r=>{let e=Ne(r),t=ze(e);return Ve(r,t),Qc.bytes=e,t};Qc.bytes=0;function yr(r,e){e=e??{};let t=e.lengthEncoder??Qc;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return Yc(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}yr.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Qc;return new ue(t(r.byteLength),r)};var Gs=Ye(Wo(),1);var Kx=8,$x=1024*1024*4,Go;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Go||(Go={}));var ph=r=>{let e=Bt(r);return ph.bytes=Ne(e),e};ph.bytes=0;function $t(r,e){let t=new ue,n=Go.LENGTH,o=-1,s=e?.lengthDecoder??ph,i=e?.maxLengthLength??Kx,a=e?.maxDataLength??$x;function*c(){for(;t.byteLength>0;){if(n===Go.LENGTH)try{if(o=s(t),o<0)throw(0,Gs.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(o>a)throw(0,Gs.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Go.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw(0,Gs.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw l}if(n===Go.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Go.LENGTH}}}return Yc(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,Gs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,Gs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}$t.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}}();return $t(n,{...e??{},onLength:s=>{t=s}})};var mh=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.reject(e),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");if(this.nextResult!=null&&(await this.readNext.promise,this.nextResult!=null))throw new Error("NeedNext promise resolved but nextResult was not consumed");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 Lt(this.readNext.promise,t?.signal,t)}};function Q4(){return new mh}var jc=class extends Error{code;constructor(e,t){super(e),this.code=t}},gh=class extends jc{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted"}};function X4(r,e){let t=Q4();r.sink(t).catch(async i=>{await t.end(i)}),r.sink=async i=>{for await(let a of i)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 ue;return{read:async(i,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new gh("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(i==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new ue:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new jc("unexpected end of input","ERR_UNEXPECTED_EOF");o.append(u)}let d=o.sublist(0,i);return o.consume(i),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(i,a)=>{a?.signal?.throwIfAborted(),i instanceof Uint8Array?await t.push(i,a):await t.push(i.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let i=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*i}()}return r}}}var Zc=class extends Error{code;constructor(e,t){super(e),this.code=t}};function wr(r,e={}){let t=X4(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ne(e.maxDataLength));let n=e?.lengthDecoder??Bt,o=e?.lengthEncoder??Ve;return{read:async i=>{let a=-1,c=new ue;for(;;){c.append(await t.read(1,i));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Zc("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Zc("message length too long","ERR_MSG_DATA_TOO_LONG");return t.read(a,i)},write:async(i,a)=>{await t.write(new ue(o(i.byteLength),i),a)},writeV:async(i,a)=>{let c=new ue(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Hx(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 zs=Hx;function qx(r){return r[Symbol.asyncIterator]!=null}function Wx(r,e){if(qx(r))return async function*(){for await(let a of r)yield e(a)}();let t=zs(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){yield await s;for await(let a of t)yield e(a)}();let i=e;return function*(){yield s;for(let a of t)yield i(a)}()}var bt=Wx;function Gx(r){return r[Symbol.asyncIterator]!=null}function zx(...r){let e=[];for(let t of r)Gx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=st({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var ft=zx;function Ke(r,...e){if(r==null)throw new Error("Empty pipeline");if(yh(r)){let n=r;r=()=>n.source}else if(Z4(r)||j4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&yh(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++)yh(t[n])&&(t[n]=Qx(t[n]));return Yx(...t)}var Yx=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},j4=r=>r?.[Symbol.asyncIterator]!=null,Z4=r=>r?.[Symbol.iterator]!=null,yh=r=>r==null?!1:r.sink!=null&&r.source!=null,Qx=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=st({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(j4(s))o=async function*(){yield*s,n.end()};else if(Z4(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return ft(n,o())}return r.source};function Xx(r){return r[Symbol.asyncIterator]!=null}function jx(r,e){return Xx(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 Zn=jx;var me=class extends Event{constructor(e,t){super(e),this.detail=t}};var ia="/ipfs/bitswap/1.2.0";var wh=new Float32Array([-0]),Jn=new Uint8Array(wh.buffer);function J4(r,e,t){wh[0]=r,e[t]=Jn[0],e[t+1]=Jn[1],e[t+2]=Jn[2],e[t+3]=Jn[3]}function e8(r,e){return Jn[0]=r[e],Jn[1]=r[e+1],Jn[2]=r[e+2],Jn[3]=r[e+3],wh[0]}var Eh=new Float64Array([-0]),Ct=new Uint8Array(Eh.buffer);function t8(r,e,t){Eh[0]=r,e[t]=Ct[0],e[t+1]=Ct[1],e[t+2]=Ct[2],e[t+3]=Ct[3],e[t+4]=Ct[4],e[t+5]=Ct[5],e[t+6]=Ct[6],e[t+7]=Ct[7]}function r8(r,e){return Ct[0]=r[e],Ct[1]=r[e+1],Ct[2]=r[e+2],Ct[3]=r[e+3],Ct[4]=r[e+4],Ct[5]=r[e+5],Ct[6]=r[e+6],Ct[7]=r[e+7],Eh[0]}var Zx=BigInt(Number.MAX_SAFE_INTEGER),Jx=BigInt(Number.MIN_SAFE_INTEGER),er=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return zo;if(e<Zx&&e>Jx)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>n8&&(o=0n,++n>n8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return zo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):zo}},zo=new er(0,0);zo.toBigInt=function(){return 0n};zo.zzEncode=zo.zzDecode=function(){return this};zo.length=function(){return 1};var n8=4294967296n;function o8(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 s8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(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,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function bh(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,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 Or(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Jc(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var xh=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,Or(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 Or(this,4);return Jc(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Or(this,4);return Jc(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Or(this,4);let e=e8(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Or(this,4);let e=r8(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 Or(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return s8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Or(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Or(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new er(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 Or(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 Or(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 Or(this,8);let e=Jc(this.buf,this.pos+=4),t=Jc(this.buf,this.pos+=4);return new er(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=jf(this.buf,this.pos);return this.pos+=Ne(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 vh(r){return new xh(r instanceof Uint8Array?r:r.subarray())}function ee(r,e,t){let n=vh(r);return e.decode(n,void 0,t)}function Rh(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return ze(i);o+i>e&&(n=ze(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Yo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function Sh(){}var Ah=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},ev=Rh();function tv(r){return globalThis.Buffer!=null?ze(r):ev(r)}var ca=class{len;head;tail;states;constructor(){this.len=0,this.head=new Yo(Sh,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Yo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new Ih((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(el,10,er.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=er.fromBigInt(e);return this._push(el,t.length(),t)}uint64Number(e){return this._push(Xf,Ne(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=er.fromBigInt(e).zzEncode();return this._push(el,t.length(),t)}sint64Number(e){let t=er.fromNumber(e).zzEncode();return this._push(el,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(_h,1,e?1:0)}fixed32(e){return this._push(aa,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=er.fromBigInt(e);return this._push(aa,4,t.lo)._push(aa,4,t.hi)}fixed64Number(e){let t=er.fromNumber(e);return this._push(aa,4,t.lo)._push(aa,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(J4,4,e)}double(e){return this._push(t8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(_h,1,0):this.uint32(t)._push(nv,t,e)}string(e){let t=o8(e);return t!==0?this.uint32(t)._push(bh,t,e):this._push(_h,1,0)}fork(){return this.states=new Ah(this),this.head=this.tail=new Yo(Sh,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 Yo(Sh,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=tv(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function _h(r,e,t){e[t]=r&255}function rv(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var Ih=class extends Yo{next;constructor(e,t){super(rv,e,t),this.next=void 0}};function el(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 aa(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 nv(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(ca.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(ov,e,r),this},ca.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(sv,e,r),this});function ov(r,e,t){e.set(r,t)}function sv(r,e,t){r.length<40?bh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(B(r),t)}function Dh(){return new ca}function te(r,e){let t=Dh();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Ys;(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"})(Ys||(Ys={}));function tl(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function $e(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return tl("enum",Ys.VARINT,t,n)}function re(r,e){return tl("message",Ys.LENGTH_DELIMITED,r,e)}var la=class extends Error{code;constructor(e,t,n){super(e,n),this.code=t}};var Xe;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Xe||(Xe={}));var Th;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Th||(Th={}));(function(r){r.codec=()=>$e(Th)})(Xe||(Xe={}));var rl;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),Xe.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={cid:Ce(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.priority=t.int32();break}case 3:{o.cancel=t.bool();break}case 4:{o.wantType=Xe.codec().decode(t);break}case 5:{o.sendDontHave=t.bool();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(rl||(rl={}));var nl;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),rl.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.entries.push(rl.codec().decode(t,t.uint32()));break}case 2:{o.full=t.bool();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(nl||(nl={}));var ol;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>{let o={prefix:Ce(0),data:Ce(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.prefix=t.bytes();break}case 2:{o.data=t.bytes();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(ol||(ol={}));var Er;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Er||(Er={}));var sl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(sl||(sl={}));(function(r){r.codec=()=>$e(sl)})(Er||(Er={}));var il;(function(r){let e;r.codec=()=>(e==null&&(e=re((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&&sl[t.type]!==0&&(n.uint32(16),Er.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={cid:Ce(0),type:Er.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.type=Er.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(il||(il={}));var ua;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),nl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),ol.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),il.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.wantlist=nl.codec().decode(t,t.uint32());break}case 3:{o.blocks.push(ol.codec().decode(t,t.uint32()));break}case 4:{o.blockPresences.push(il.codec().decode(t,t.uint32()));break}case 5:{o.pendingBytes=t.int32();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(ua||(ua={}));a8.default.formatters.B=r=>r==null?"undefined":JSON.stringify({blocks:r.blocks?.map(e=>({data:`${P(e.data,"base64").substring(0,10)}...`,prefix:P(e.prefix,"base64")})),blockPresences:r.blockPresences?.map(e=>({...e,cid:ce.decode(e.cid).toString()})),wantlist:r.wantlist==null?void 0:{full:r.wantlist.full,entries:r.wantlist.entries.map(e=>({...e,cid:ce.decode(e.cid).toString()}))}},null,2);var al=class extends Re{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;messageSendTimeout;runOnTransientConnections;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[ia],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.messageSendTimeout=t.messageSendTimeout??5e3,this.runOnTransientConnections=t.runOnTransientConnections??!1,e.metrics!=null&&(this.metrics={blocksSent:e.metrics?.registerMetricGroup("ipfs_bitswap_sent_blocks"),dataSent:e.metrics?.registerMetricGroup("ipfs_bitswap_sent_data_bytes")}),this.sendQueue=new Vt({concurrency:t.messageSendConcurrency,metrics:e.metrics,metricName:"ipfs_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,runOnTransientConnection:this.runOnTransientConnections});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.abort(new m("Incoming Bitswap stream timed out","ERR_TIMEOUT"))},s=AbortSignal.timeout(this.messageReceiveTimeout);ie(1/0,s),s.addEventListener("abort",o),await Ke(t,i=>$t(i),async i=>{for await(let a of i)try{let c=ua.decode(a);this.log("incoming new bitswap %s message from %p %B",t.protocol,n.remotePeer,c),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),s.removeEventListener("abort",o),s=AbortSignal.timeout(this.messageReceiveTimeout),ie(1/0,s),s.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p",n.remotePeer,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 me("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!this.runOnTransientConnections){let o=!1;for(let s of n.multiaddrs)if(s.getPeerId()==null&&(s=s.encapsulate(`/p2p/${n.id}`)),!Ho.exactMatch(s)){o=!0;break}if(!o)continue}n.protocols?.includes("transport-bitswap")!==!1&&(yield n)}}async findAndConnect(e,t){await Kt(Zn(bt(this.findProviders(e,t),async n=>this.connectTo(n.id,t)),t?.maxProviders??3)).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o={wantlist:{full:t.wantlist?.full??!1,entries:t.wantlist?.entries??[]},blocks:t.blocks??[],blockPresences:t.blockPresences??[],pendingBytes:t.pendingBytes??0},s=ot([AbortSignal.timeout(this.messageSendTimeout),n?.signal]);ie(1/0,s);try{let i=this.sendQueue.find(e);if(i?.status==="queued"){i.options.message=fv(i.options.message,o),await i.join({signal:s});return}await this.sendQueue.add(async a=>{let c=a?.message;if(c==null)throw new m("No message to send","ERR_NO_MESSAGE");this.log("sendMessage to %p %B",e,c),a?.onProgress?.(new me("bitswap:network:send-wantlist",e));let l=await this.libp2p.dialProtocol(e,ia,a);try{let d=wr(l);await d.write(ua.encode(c),a),await d.unwrap().close(a)}catch(d){a?.onProgress?.(new me("bitswap:network:send-wantlist:error",{peer:e,error:d})),this.log.error("error sending message to %p",e,d),l.abort(d)}this._updateSentStats(e,c.blocks)},{peerId:e,signal:s,message:o})}finally{s.clear()}}async connectTo(e,t){if(!this.running)throw new m("Network isn't running","ERR_NOT_STARTED");t?.onProgress?.(new me("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Os(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(ia))return!0;throw new m(`${e} did not support ${ia}`,"ERR_BITSWAP_UNSUPPORTED_BY_PEER")}})]);return n}_updateSentStats(e,t=[]){if(this.metrics!=null){let n=0;for(let o of t.values())n+=o.data.byteLength;this.metrics.dataSent.increment({global:n,[e.toString()]:n}),this.metrics.blocksSent.increment({global:t.length,[e.toString()]:t.length})}}};function fv(r,e){let t=new Map((r.wantlist?.entries??[]).map(i=>[ut.encode(i.cid),i]));for(let i of e.wantlist?.entries??[]){let a=ut.encode(i.cid),c=t.get(a);c!=null&&(c.priority>i.priority&&(i.priority=c.priority),i.cancel=i.cancel??c.cancel,i.wantType=i.wantType??c.wantType,i.sendDontHave=i.sendDontHave??c.sendDontHave),t.set(a,i)}let n=new Map(r.blockPresences.map(i=>[ut.encode(i.cid),i]));for(let i of e.blockPresences){let a=ut.encode(i.cid);n.set(a,i)}let o=new Map(r.blocks.map(i=>[ut.encode(i.data),i]));for(let i of e.blocks){let a=ut.encode(i.data);o.set(a,i)}return{wantlist:{full:r.wantlist?.full??e.wantlist?.full??!1,entries:[...t.values()]},blockPresences:[...n.values()],blocks:[...o.values()],pendingBytes:r.pendingBytes+e.pendingBytes}}var hv=Symbol.for("nodejs.util.inspect.custom"),c8=Object.values(gr).map(r=>r.decoder).reduce((r,e)=>r.or(e),gr.identity.decoder),l8=114,kh=36,Ch=37,da=class{type;multihash;privateKey;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,this.privateKey=e.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[mf]=!0;toString(){return this.string==null&&(this.string=Ge.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return ce.createV1(l8,this.multihash)}toBytes(){return this.multihash.bytes}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 ge(e).equals(this);if(e?.multihash?.bytes!=null)return J(this.multihash.bytes,e.multihash.bytes);throw new Error("not valid Id")}[hv](){return`PeerId(${this.toString()})`}},Qo=class extends da{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Xo=class extends da{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.multihash.digest}},jo=class extends da{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.multihash.digest}};function u8(r){if(r.type==="RSA")return new Qo(r);if(r.type==="Ed25519")return new Xo(r);if(r.type==="secp256k1")return new jo(r);throw new m("Not a PeerId","ERR_INVALID_PARAMETERS")}function ge(r,e){if(e=e??c8,r.charAt(0)==="1"||r.charAt(0)==="Q"){let t=Pr(Ge.decode(`z${r}`));return r.startsWith("12D")?new Xo({multihash:t}):r.startsWith("16U")?new jo({multihash:t}):new Qo({multihash:t})}return je(c8.decode(r))}function je(r){try{let e=Pr(r);if(e.code===mr.code){if(e.digest.length===kh)return new Xo({multihash:e});if(e.digest.length===Ch)return new jo({multihash:e})}if(e.code===De.code)return new Qo({multihash:e})}catch{return pv(ce.decode(r))}throw new Error("Supplied PeerID CID is invalid")}function pv(r){if(r==null||r.multihash==null||r.version==null||r.version===1&&r.code!==l8)throw new Error("Supplied PeerID CID is invalid");let e=r.multihash;if(e.code===De.code)return new Qo({multihash:r.multihash});if(e.code===mr.code){if(e.digest.length===kh)return new Xo({multihash:r.multihash});if(e.digest.length===Ch)return new jo({multihash:r.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function ht(r,e){return r.length===kh?new Xo({multihash:Nr(mr.code,r),privateKey:e}):r.length===Ch?new jo({multihash:Nr(mr.code,r),privateKey:e}):new Qo({multihash:await De.digest(r),publicKey:r,privateKey:e})}function Qs(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}var it=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),n)}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return Qs(this.map.entries(),e=>[ge(e[0]),e[1]])}forEach(e){this.map.forEach((t,n)=>{e(t,ge(n),this)})}get(e){return this.map.get(e.toString())}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),t)}keys(){return Qs(this.map.keys(),e=>ge(e))}values(){return this.map.values()}get size(){return this.map.size}};var Ze=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 Qs(this.set.entries(),e=>{let t=ge(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=ge(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Qs(this.set.values(),e=>ge(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}};var Nh=class extends it{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 fa(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Nh({name:e,metrics:t}):n=new it,n}function gv(r){let e=new Uint8Array(r.reduce((n,o)=>n+Ne(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=Ne(n);return e}var d8=gv;function Ph(r){return d8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var cl=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,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={blockPresences:[],blocks:[]},n=new Set;for(let[o,s]of this.wants.entries()){if(!await this.blockstore.has(s.cid,e)){if(!s.sendDontHave||s.sentDontHave===!0)continue;s.sentDontHave=!0,t.blockPresences.push({cid:s.cid.bytes,type:Er.DontHaveBlock});continue}let a=await this.blockstore.get(s.cid,e);s.wantType===Xe.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(n.add(o),t.blocks.push({data:a,prefix:Ph(s.cid)})):t.blockPresences.push({cid:s.cid.bytes,type:Er.HaveBlock}):(n.add(o),t.blocks.push({data:a,prefix:Ph(s.cid)}))}if(t.blocks.length>0||t.blockPresences.length>0){await this.network.sendMessage(this.peerId,t,e),this.sentBytes(t.blocks.reduce((o,s)=>o+s.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var ll=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;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.ledgerMap=fa({name:"ipfs_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 cl({peerId:e,blockstore:this.blockstore,network:this.network},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let s=ce.decode(o.cid),i=P(s.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,s),n.wants.delete(i)):(o.wantType===Xe.WantHave?this.log("peer %p wanted block presence for %c",e,s):this.log("peer %p wanted block for %c",e,s),n.wants.set(i,{cid:s,priority:o.priority,wantType:o.wantType??Xe.WantBlock,sendDontHave:o.sendDontHave??!1}))}}await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=P(e.multihash.bytes,"base64"),o=[];for(let s of this.ledgerMap.values())s.wants.has(n)&&o.push(s);await Promise.all(o.map(async s=>s.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var Oh=class{root;peers;log;wantList;network;queue;maxProviders;constructor(e,t){this.peers=new Ze,this.root=t.root,this.maxProviders=t.maxProviders,this.log=e.logger.forComponent(`helia:bitswap:session:${t.root}`),this.wantList=e.wantList,this.network=e.network,this.queue=new Vt({concurrency:t.queryConcurrency}),this.queue.addEventListener("error",n=>{this.log.error("error querying peer for %c",this.root,n.detail)})}async want(e,t={}){if(this.peers.size===0)throw new m("Bitswap session had no peers","ERR_NO_SESSION_PEERS");this.log("sending WANT-BLOCK for %c to",e,this.peers);let n=await Promise.any([...this.peers].map(async o=>this.wantList.wantBlock(e,{peerId:o,...t})));return this.log("received block for %c from %p",e,n.sender),n.block}async findNewProviders(e,t,n={}){let o=j(),s=0;this.log("find %d-%d new provider(s) for %c",t,this.maxProviders,e);let i=ft([...this.wantList.peers.keys()],bt(this.network.findProviders(e,n),a=>a.id));return Promise.resolve().then(async()=>{for await(let a of i)await this.queue.add(async()=>{try{if(this.log("asking potential session peer %p if they have %c",a,e),!(await this.wantList.wantPresence(e,{peerId:a,...n})).has){this.log("potential session peer %p did not have %c",a,e);return}this.log("potential session peer %p had %c",a,e),s++,this.peers.add(a),s===t&&(this.log("found %d session peers",s),o.resolve()),s===this.maxProviders&&(this.log("found max provider session peers",s),this.queue.clear())}catch(c){this.log.error("error querying potential session peer %p for %c",a,e,c.errors??c)}},{peerId:a});this.log("found %d session peers total",s),t>0&&o.reject(new m(`Found ${s} of ${t} providers`,"ERR_NO_PROVIDERS_FOUND"))}),o.promise}};async function f8(r,e){let t=new Oh(r,e);return await t.findNewProviders(e.root,e.minProviders,{signal:e.signal}),t}var ul=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("ipfs_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("ipfs_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("ipfs_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("ipfs_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 Lh=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 dl(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Lh({name:e,metrics:t}):n=new Map,n}function yv(r){return r[Symbol.asyncIterator]!=null}function wv(r){if(yv(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 eo=wv;function Ev(r){return r[Symbol.asyncIterator]!=null}function bv(r,e){if(Ev(r))return async function*(){for await(let a of r)await e(a)&&(yield a)}();let t=zs(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){await s&&(yield n);for await(let a of t)await e(a)&&(yield a)}();let i=e;return function*(){s===!0&&(yield n);for(let a of t)i(a)&&(yield a)}()}var Nt=bv;function xv(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Bt(r);e.push(t),r=r.slice(Ne(t))}return e}var h8=xv;var fl=class{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;constructor(e,t={}){this.peers=fa({name:"ipfs_bitswap_peers",metrics:e.metrics}),this.wants=dl({name:"ipfs_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=P(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,session:new Ze,priority:t.priority??1,wantType:t.wantType??Xe.WantBlock,cancel:!1,sendDontHave:!0,blockWantListeners:[],blockPresenceListeners:[]},t.peerId!=null&&o.session.add(t.peerId),this.wants.set(n,o)),o.wantType===Xe.WantHave&&t.wantType===Xe.WantBlock&&(o.wantType=Xe.WantBlock),o.session.size>0&&(t.peerId!=null&&o.session.add(t.peerId),t.peerId==null&&o.session.clear());let s;if(t.wantType===Xe.WantBlock){let a=s=j();o.blockWantListeners.push(a)}else{let a=s=j();o.blockPresenceListeners.push(a)}let i=()=>{this.log("want for %c was aborted, cancelling want",e),o!=null&&(o.cancel=!0),s.reject(new jt("Want was aborted"))};t.signal?.addEventListener("abort",i),clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(a=>{this.log("error sending messages to peers",a)})},this.sendMessagesDelay);try{return await s.promise}finally{t.signal?.removeEventListener("abort",i),t.wantType===Xe.WantBlock?o.blockWantListeners=o.blockWantListeners.filter(a=>a!==s):o.blockPresenceListeners=o.blockPresenceListeners.filter(a=>a!==s)}}async sendMessages(){for(let[e,t]of this.peers){let n=new Set,o={wantlist:{full:!1,entries:Ke(this.wants.entries(),s=>Nt(s,([i,a])=>{if(a.session.size>0&&!a.session.has(e))return!1;let c=t.has(i);return a.cancel?c:!c}),s=>bt(s,([i,a])=>(n.add(i),{cid:a.cid.bytes,priority:a.priority,wantType:a.wantType,cancel:a.cancel,sendDontHave:a.sendDontHave})),s=>eo(s))}};if(o.wantlist?.entries.length===0)return;try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer",s)}}for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}}has(e){let t=P(e.multihash.bytes,"base64");return this.wants.has(t)}async wantPresence(e,t={}){if(t.peerId!=null&&this.peers.get(t.peerId)==null){let n=P(e.multihash.bytes,"base64");try{this.peers.set(t.peerId,new Set([n])),await this.network.sendMessage(t.peerId,{wantlist:{full:!1,entries:[{cid:e.bytes,sendDontHave:!0,wantType:Xe.WantHave,priority:1}]}})}catch(o){throw this.peers.delete(t.peerId),o}}return this.addEntry(e,{...t,wantType:Xe.WantHave})}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Xe.WantBlock})}async receiveMessage(e,t){this.log("received message from %p",e);let n=[],o=[];for(let s of t.blocks){if(s.prefix==null||s.data==null)continue;this.log("received block");let i=h8(s.prefix),a=i[0],c=i[1],l=i[2],d=l===De.code?De:await this.hashLoader?.getHasher(l);if(d==null){this.log.error("unknown hash algorithm",l);continue}let u=await d.digest(s.data),f=ce.create(a===0?0:1,c,u);this.log("received block from %p for %c",e,f),n.push({sender:e,cid:f,block:s.data}),o.push({sender:e,cid:f,has:!0})}for(let{cid:s,type:i}of t.blockPresences){let a=ce.decode(s);this.log("received %s from %p for %c",i,e,a),o.push({sender:e,cid:a,has:i===Er.HaveBlock})}for(let s of n){let i=P(s.cid.multihash.bytes,"base64"),a=this.wants.get(i);if(a==null)return;let c=a.blockWantListeners;a.blockWantListeners=[],c.forEach(l=>{l.resolve(s)}),a.cancel=!0}for(let s of o){let i=P(s.cid.multihash.bytes,"base64"),a=this.wants.get(i);if(a==null)return;let c=a.blockPresenceListeners;a.blockPresenceListeners=[],c.forEach(l=>{l.resolve(s)})}}async peerConnected(e){let t=new Set,n={wantlist:{full:!0,entries:Ke(this.wants.entries(),o=>Nt(o,([s,i])=>!i.cancel&&i.session.size>0&&!i.session.has(e)),o=>Nt(o,([s,i])=>!i.cancel),o=>bt(o,([s,i])=>(t.add(s),{cid:i.cid.bytes,priority:1,wantType:Xe.WantBlock,cancel:!1,sendDontHave:!1})),o=>eo(o))}};if(n.wantlist?.entries.length===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()}};var hl=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 ul(e),this.network=new al(e,t),this.peerWantLists=new ll({...e,network:this.network},t),this.wantList=new fl({...e,network:this.network},t)}async createSession(e,t){let n=t?.minProviders??1,o=t?.maxProviders??5;return f8({wantList:this.wantList,network:this.network,logger:this.logger},{root:e,queryConcurrency:t?.providerQueryConcurrency??5,minProviders:n,maxProviders:o,connectedPeers:t?.queryConnectedPeers!==!1?[...this.wantList.peers.keys()]:[],signal:t?.signal})}async want(e,t={}){let n=new AbortController,o=ot([n.signal,t.signal]);ie(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,s)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await this.peerWantLists.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 p8=(r,e={})=>new hl(r,e);var Bh=class{bitswap;started;constructor(e,t={}){let{hashers:n}=e;this.bitswap=p8(e,{hashLoader:{getHasher:async o=>{let s;if(typeof o=="string"?s=Object.values(n).find(i=>i.name===o):s=n[o],s!=null)return s;throw new Error(`Could not load hasher for code/name "${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)}async createSession(e,t){let n=await this.bitswap.createSession(e,t);return{announce:async(o,s,i)=>{await this.bitswap.notify(o,s,i)},retrieve:async(o,s)=>n.want(o,s)}}};function Uh(r={}){return e=>new Bh(e,r)}var g8=Ye(m8(),1),vv=["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"],Rv=vv.map(r=>new g8.Netmask(r));function Sv(r){for(let e of Rv)if(e.contains(r))return!0;return!1}function _v(r){return/^::$/.test(r)||/^::1$/.test(r)||/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.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 Ht(r){return Bs(r)?Sv(r):Us(r)?_v(r):void 0}var Av=[Z("tcp").code,Z("dns").code,Z("dnsaddr").code,Z("dns4").code,Z("dns6").code];function y8(r){let e;try{e=Z("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function w8(r){return r.some(([e,t])=>e===Z("tls").code)}function tr(r,e,t){let n=E8[Z(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${Z(r).name}`);let o=n(e,t);return r===Z("ip6").code?`[${o}]`:o}var E8={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${tr(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${tr(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${tr(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${tr(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=w8(e),n=y8(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=tr(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return tr(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return tr(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=tr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=w8(e),n=y8(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=tr(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=tr(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${tr(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${tr(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${tr(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function pl(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=Z(o[0]),i=E8[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&Av.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var pa=class{url;#e=0;#t=0;#r=0;#i=0;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}async getRawBlock(e,t){let n=this.url;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`);try{this.#e++;let o=await fetch(n.toString(),{signal:t,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"});if(this.log("GET %s %d",n,o.status),!o.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#i++,new Uint8Array(await o.arrayBuffer())}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}`))}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#i/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}};var ml=class r{components;gateways;routing;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.routing=e.routing,this.gateways=(t.gateways??b8).map(n=>new pa(n,e.logger))}addGateway(e){this.gateways.push(new pa(e,this.components.logger))}async retrieve(e,t={}){let n=this.gateways.sort((s,i)=>i.reliability()-s.reliability()),o=[];for(let s of n){this.log("getting block for %c from %s",e,s.url);try{let i=await s.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,s.url);try{await t.validateFn?.(i)}catch(a){throw this.log.error("failed to validate block for %c from %s",e,s.url,a),s.incrementInvalidBlocks(),new Error(`Block for CID ${e} from gateway ${s.url} failed validation`)}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,s.url,i),i instanceof Error?o.push(i):o.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${s.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,s.url);break}}}throw o.length>0?new AggregateError(o,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}async createSession(e,t={}){let n=[],o=t.minProviders??1,s=t.minProviders??5,i=j(),a=new r(this.components,{gateways:n});this.log("finding transport-ipfs-gateway-http providers for cid %c",e);let c=new Vt({concurrency:t.providerQueryConcurrency??5});return Promise.resolve().then(async()=>{for await(let l of this.routing.findProviders(e,t)){let d=l.multiaddrs.filter(u=>V4.matches(u)||t.allowInsecure===!0&&F4.matches(u)?t.allowLocal===!0||Kc.matches(u)?!0:Ht(u.toOptions().host)===!1:!1);d.length!==0&&(this.log("found transport-ipfs-gateway-http provider %p for cid %c",l.id,e),c.add(async()=>{for(let u of d){let f;try{f=pl(u);let g=`${f}/ipfs/${e.toString()}?format=raw`,h=await fetch(g,{method:"HEAD",headers:{Accept:"application/vnd.ipld.raw","Cache-Control":t.cacheControl??"only-if-cached"},signal:AbortSignal.timeout(t.providerQueryTimeout??5e3)});this.log("HEAD %s %d",g,h.status),n.push(f),a.addGateway(f),this.log("found %d transport-ipfs-gateway-http providers for cid %c",n.length,e),n.length===o&&i.resolve(a),n.length===s&&c.clear()}catch(g){this.log.error("could not fetch %c from %a",e,f??u,g)}}}))}}).catch(l=>{this.log.error("error creating session for %c",e,l)}),i.promise}};var b8=["https://trustless-gateway.link","https://cloudflare-ipfs.com","https://4everland.io"];function Mh(r={}){return e=>new ml(e,r)}var rr=Ye(hh(),1);rr.default.formatters.b=r=>r==null?"undefined":Ge.baseEncode(r);rr.default.formatters.t=r=>r==null?"undefined":lt.baseEncode(r);rr.default.formatters.m=r=>r==null?"undefined":ut.baseEncode(r);rr.default.formatters.p=r=>r==null?"undefined":r.toString();rr.default.formatters.c=r=>r==null?"undefined":r.toString();rr.default.formatters.k=r=>r==null?"undefined":r.toString();rr.default.formatters.a=r=>r==null?"undefined":r.toString();function Iv(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 nr(r)}}}function nr(r){let e=Iv(`${r}:trace`);return rr.default.enabled(`${r}:trace`)&&rr.default.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=(0,rr.default)(`${r}:trace`)),Object.assign((0,rr.default)(r),{error:(0,rr.default)(`${r}:error`),trace:e})}async function*gl(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 vu={};pe(vu,{Ed25519PrivateKey:()=>_n,Ed25519PublicKey:()=>ns,MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>mo,RsaPublicKey:()=>ss,Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateEphemeralKeyPair:()=>Z8,generateKeyPair:()=>Ta,generateKeyPairFromSeed:()=>_S,importKey:()=>ui,keyStretcher:()=>n6,keysPBM:()=>oi,marshalPrivateKey:()=>_0,marshalPublicKey:()=>S0,supportedKeys:()=>Pn,unmarshalPrivateKey:()=>Sr,unmarshalPublicKey:()=>qr});var o0={};pe(o0,{Ed25519PrivateKey:()=>_n,Ed25519PublicKey:()=>ns,generateKeyPair:()=>OR,generateKeyPairFromSeed:()=>n0,unmarshalEd25519PrivateKey:()=>NR,unmarshalEd25519PublicKey:()=>PR});function Fh(r,e){let t=B(r,"base64urlpad");if(e!=null){if(t.length>e)throw new Error("byte array longer than desired length");t=xe([new Uint8Array(e-t.length),t])}return t}function br(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function ro(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function Dv(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Xs(r,...e){if(!Dv(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Zo(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");ro(r.outputLen),ro(r.blockLen)}function js(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 x8(r,e){Xs(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var yl=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var Jo=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Lr=(r,e)=>r<<32-e|r>>>e,wl=(r,e)=>r<<e|r>>>32-e>>>0,mM=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var Tv=async()=>{};async function v8(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await Tv(),n+=s)}}function Vh(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Br(r){return typeof r=="string"&&(r=Vh(r)),Xs(r),r}function El(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Xs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}var Zs=class{clone(){return this._cloneInto()}},kv={}.toString;function R8(r,e){if(e!==void 0&&kv.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Js(r){let e=n=>r().update(Br(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function es(r=32){if(yl&&typeof yl.getRandomValues=="function")return yl.getRandomValues(new Uint8Array(r));throw new Error("crypto.getRandomValues must be defined")}function Cv(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var bl=(r,e,t)=>r&e^~r&t,xl=(r,e,t)=>r&e^r&t^e&t,no=class extends Zs{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=Jo(this.buffer)}update(e){js(this);let{view:t,buffer:n,blockLen:o}=this;e=Br(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=Jo(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){js(this),x8(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;Cv(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=Jo(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}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:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var vl=BigInt(4294967295),Kh=BigInt(32);function S8(r,e=!1){return e?{h:Number(r&vl),l:Number(r>>Kh&vl)}:{h:Number(r>>Kh&vl)|0,l:Number(r&vl)|0}}function Nv(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:s,l:i}=S8(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var Pv=(r,e)=>BigInt(r>>>0)<<Kh|BigInt(e>>>0),Ov=(r,e,t)=>r>>>t,Lv=(r,e,t)=>r<<32-t|e>>>t,Bv=(r,e,t)=>r>>>t|e<<32-t,Uv=(r,e,t)=>r<<32-t|e>>>t,Mv=(r,e,t)=>r<<64-t|e>>>t-32,Fv=(r,e,t)=>r>>>t-32|e<<64-t,Vv=(r,e)=>e,Kv=(r,e)=>r,$v=(r,e,t)=>r<<t|e>>>32-t,Hv=(r,e,t)=>e<<t|r>>>32-t,qv=(r,e,t)=>e<<t-32|r>>>64-t,Wv=(r,e,t)=>r<<t-32|e>>>64-t;function Gv(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var zv=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Yv=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,Qv=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),Xv=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,jv=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),Zv=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var Jv={fromBig:S8,split:Nv,toBig:Pv,shrSH:Ov,shrSL:Lv,rotrSH:Bv,rotrSL:Uv,rotrBH:Mv,rotrBL:Fv,rotr32H:Vv,rotr32L:Kv,rotlSH:$v,rotlSL:Hv,rotlBH:qv,rotlBL:Wv,add:Gv,add3L:zv,add3H:Yv,add4L:Qv,add4H:Xv,add5H:Zv,add5L:jv},fe=Jv;var[eR,tR]=fe.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))),oo=new Uint32Array(80),so=new Uint32Array(80),$h=class extends no{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:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:g,Gl:h,Hh:p,Hl:y}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,g,h,p,y]}set(e,t,n,o,s,i,a,c,l,d,u,f,g,h,p,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=g|0,this.Gl=h|0,this.Hh=p|0,this.Hl=y|0}process(e,t){for(let E=0;E<16;E++,t+=4)oo[E]=e.getUint32(t),so[E]=e.getUint32(t+=4);for(let E=16;E<80;E++){let S=oo[E-15]|0,_=so[E-15]|0,A=fe.rotrSH(S,_,1)^fe.rotrSH(S,_,8)^fe.shrSH(S,_,7),D=fe.rotrSL(S,_,1)^fe.rotrSL(S,_,8)^fe.shrSL(S,_,7),R=oo[E-2]|0,k=so[E-2]|0,O=fe.rotrSH(R,k,19)^fe.rotrBH(R,k,61)^fe.shrSH(R,k,6),N=fe.rotrSL(R,k,19)^fe.rotrBL(R,k,61)^fe.shrSL(R,k,6),L=fe.add4L(D,N,so[E-7],so[E-16]),F=fe.add4H(L,A,O,oo[E-7],oo[E-16]);oo[E]=F|0,so[E]=L|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:g,Fl:h,Gh:p,Gl:y,Hh:w,Hl:b}=this;for(let E=0;E<80;E++){let S=fe.rotrSH(u,f,14)^fe.rotrSH(u,f,18)^fe.rotrBH(u,f,41),_=fe.rotrSL(u,f,14)^fe.rotrSL(u,f,18)^fe.rotrBL(u,f,41),A=u&g^~u&p,D=f&h^~f&y,R=fe.add5L(b,_,D,tR[E],so[E]),k=fe.add5H(R,w,S,A,eR[E],oo[E]),O=R|0,N=fe.rotrSH(n,o,28)^fe.rotrBH(n,o,34)^fe.rotrBH(n,o,39),L=fe.rotrSL(n,o,28)^fe.rotrBL(n,o,34)^fe.rotrBL(n,o,39),F=n&s^n&a^s&a,Y=o&i^o&c^i&c;w=p|0,b=y|0,p=g|0,y=h|0,g=u|0,h=f|0,{h:u,l:f}=fe.add(l|0,d|0,k|0,O|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let I=fe.add3L(O,L,Y);n=fe.add3H(I,k,N,F),o=I|0}({h:n,l:o}=fe.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fe.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fe.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fe.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fe.add(this.Eh|0,this.El|0,u|0,f|0),{h:g,l:h}=fe.add(this.Fh|0,this.Fl|0,g|0,h|0),{h:p,l:y}=fe.add(this.Gh|0,this.Gl|0,p|0,y|0),{h:w,l:b}=fe.add(this.Hh|0,this.Hl|0,w|0,b|0),this.set(n,o,s,i,a,c,l,d,u,f,g,h,p,y,w,b)}roundClean(){oo.fill(0),so.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 io=Js(()=>new $h);var Sl={};pe(Sl,{abytes:()=>ei,bitGet:()=>cR,bitLen:()=>aR,bitMask:()=>ma,bitSet:()=>lR,bytesToHex:()=>En,bytesToNumberBE:()=>bn,bytesToNumberLE:()=>Ur,concatBytes:()=>vn,createHmacDrbg:()=>Wh,ensureBytes:()=>Ue,equalBytes:()=>sR,hexToBytes:()=>ts,hexToNumber:()=>qh,isBytes:()=>ao,numberToBytesBE:()=>co,numberToBytesLE:()=>xn,numberToHexUnpadded:()=>D8,numberToVarBytesBE:()=>oR,utf8ToBytes:()=>iR,validateObject:()=>xr});var I8=BigInt(0),Rl=BigInt(1),rR=BigInt(2);function ao(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function ei(r){if(!ao(r))throw new Error("Uint8Array expected")}var nR=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function En(r){ei(r);let e="";for(let t=0;t<r.length;t++)e+=nR[r[t]];return e}function D8(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function qh(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var wn={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function _8(r){if(r>=wn._0&&r<=wn._9)return r-wn._0;if(r>=wn._A&&r<=wn._F)return r-(wn._A-10);if(r>=wn._a&&r<=wn._f)return r-(wn._a-10)}function ts(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,s=0;o<t;o++,s+=2){let i=_8(r.charCodeAt(s)),a=_8(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}function bn(r){return qh(En(r))}function Ur(r){return ei(r),qh(En(Uint8Array.from(r).reverse()))}function co(r,e){return ts(r.toString(16).padStart(e*2,"0"))}function xn(r,e){return co(r,e).reverse()}function oR(r){return ts(D8(r))}function Ue(r,e,t){let n;if(typeof e=="string")try{n=ts(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(ao(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function vn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ei(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function sR(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 iR(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function aR(r){let e;for(e=0;r>I8;r>>=Rl,e+=1);return e}function cR(r,e){return r>>BigInt(e)&Rl}function lR(r,e,t){return r|(t?Rl:I8)<<BigInt(e)}var ma=r=>(rR<<BigInt(r-1))-Rl,Hh=r=>new Uint8Array(r),A8=r=>Uint8Array.from(r);function Wh(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=Hh(r),o=Hh(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=Hh())=>{o=a(A8([0]),u),n=a(),u.length!==0&&(o=a(A8([1]),u),n=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let g=n.slice();f.push(g),u+=n.length}return vn(...f)};return(u,f)=>{i(),c(u);let g;for(;!(g=f(l()));)c();return i(),g}}var uR={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"||ao(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 xr(r,e,t={}){let n=(o,s,i)=>{let a=uR[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=r[o];if(!(i&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))n(o,s,!1);for(let[o,s]of Object.entries(t))n(o,s,!0);return r}var dt=BigInt(0),He=BigInt(1),rs=BigInt(2),dR=BigInt(3),Gh=BigInt(4),T8=BigInt(5),k8=BigInt(8),fR=BigInt(9),hR=BigInt(16);function _e(r,e){let t=r%e;return t>=dt?t:e+t}function zh(r,e,t){if(t<=dt||e<dt)throw new Error("Expected power/modulo > 0");if(t===He)return dt;let n=He;for(;e>dt;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Me(r,e,t){let n=r;for(;e-- >dt;)n*=n,n%=t;return n}function _l(r,e){if(r===dt||e<=dt)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=_e(r,e),n=e,o=dt,s=He,i=He,a=dt;for(;t!==dt;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==He)throw new Error("invert: does not exist");return _e(o,e)}function pR(r){let e=(r-He)/rs,t,n,o;for(t=r-He,n=0;t%rs===dt;t/=rs,n++);for(o=rs;o<r&&zh(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/Gh;return function(c,l){let d=c.pow(l,i);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let s=(t+He)/rs;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,s),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let g=1;for(let p=a.sqr(f);g<l&&!a.eql(p,a.ONE);g++)p=a.sqr(p);let h=a.pow(d,He<<BigInt(l-g-1));d=a.sqr(h),u=a.mul(u,h),f=a.mul(f,d),l=g}return u}}function mR(r){if(r%Gh===dR){let e=(r+He)/Gh;return function(n,o){let s=n.pow(o,e);if(!n.eql(n.sqr(s),o))throw new Error("Cannot find square root");return s}}if(r%k8===T8){let e=(r-T8)/k8;return function(n,o){let s=n.mul(o,rs),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,rs),i),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%hR,pR(r)}var C8=(r,e)=>(_e(r,e)&He)===He,gR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Yh(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=gR.reduce((n,o)=>(n[o]="function",n),e);return xr(r,t)}function yR(r,e,t){if(t<dt)throw new Error("Expected power > 0");if(t===dt)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>dt;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function wR(r,e){let t=new Array(e.length),n=e.reduce((s,i,a)=>r.is0(i)?s:(t[a]=s,r.mul(s,i)),r.ONE),o=r.inv(n);return e.reduceRight((s,i,a)=>r.is0(i)?s:(t[a]=r.mul(s,t[a]),r.mul(s,i)),o),t}function Qh(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function Al(r,e,t=!1,n={}){if(r<=dt)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=Qh(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=mR(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:ma(o),ZERO:dt,ONE:He,create:c=>_e(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return dt<=c&&c<r},is0:c=>c===dt,isOdd:c=>(c&He)===He,neg:c=>_e(-c,r),eql:(c,l)=>c===l,sqr:c=>_e(c*c,r),add:(c,l)=>_e(c+l,r),sub:(c,l)=>_e(c-l,r),mul:(c,l)=>_e(c*l,r),pow:(c,l)=>yR(a,c,l),div:(c,l)=>_e(c*_l(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>_l(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>wR(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?xn(c,s):co(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?Ur(c):bn(c)}});return Object.freeze(a)}function N8(r,e){if(!r.isOdd)throw new Error("Field doesn't have isOdd");let t=r.sqrt(e);return r.isOdd(t)?r.neg(t):t}function P8(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 Xh(r){let e=P8(r);return e+Math.ceil(e/2)}function O8(r,e,t=!1){let n=r.length,o=P8(e),s=Xh(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?bn(r):Ur(r),a=_e(i,e-He)+He;return t?xn(a,o):co(a,o)}var bR=BigInt(0),jh=BigInt(1);function Il(r,e){let t=(o,s)=>{let i=s.negate();return o?i:s},n=o=>{let s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:t,unsafeLadder(o,s){let i=r.ZERO,a=o;for(;s>bR;)s&jh&&(i=i.add(a)),a=a.double(),s>>=jh;return i},precomputeWindow(o,s){let{windows:i,windowSize:a}=n(s),c=[],l=o,d=l;for(let u=0;u<i;u++){d=l,c.push(d);for(let f=1;f<a;f++)d=d.add(l),c.push(d);l=d.double()}return c},wNAF(o,s,i){let{windows:a,windowSize:c}=n(o),l=r.ZERO,d=r.BASE,u=BigInt(2**o-1),f=2**o,g=BigInt(o);for(let h=0;h<a;h++){let p=h*c,y=Number(i&u);i>>=g,y>c&&(y-=f,i+=jh);let w=p,b=p+Math.abs(y)-1,E=h%2!==0,S=y<0;y===0?d=d.add(t(E,s[w])):l=l.add(t(S,s[b]))}return{p:l,f:d}},wNAFCached(o,s,i,a){let c=o._WINDOW_SIZE||1,l=s.get(o);return l||(l=this.precomputeWindow(o,c),c!==1&&s.set(o,a(l))),this.wNAF(c,l,i)}}}function ga(r){return Yh(r.Fp),xr(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Qh(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Mr=BigInt(0),or=BigInt(1),Dl=BigInt(2),xR=BigInt(8),vR={zip215:!0};function RR(r){let e=ga(r);return xr(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Tl(r){let e=RR(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Dl<<BigInt(a*8)-or,d=t.create,u=e.uvRatio||((T,v)=>{try{return{isValid:!0,value:t.sqrt(T*t.inv(v))}}catch{return{isValid:!1,value:Mr}}}),f=e.adjustScalarBytes||(T=>T),g=e.domain||((T,v,U)=>{if(v.length||U)throw new Error("Contexts/pre-hash are not supported");return T}),h=T=>typeof T=="bigint"&&Mr<T,p=(T,v)=>h(T)&&h(v)&&T<v,y=T=>T===Mr||p(T,l);function w(T,v){if(p(T,v))return T;throw new Error(`Expected valid scalar < ${v}, got ${typeof T} ${T}`)}function b(T){return T===Mr?T:w(T,n)}let E=new Map;function S(T){if(!(T instanceof _))throw new Error("ExtendedPoint expected")}class _{constructor(v,U,V,H){if(this.ex=v,this.ey=U,this.ez=V,this.et=H,!y(v))throw new Error("x required");if(!y(U))throw new Error("y required");if(!y(V))throw new Error("z required");if(!y(H))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof _)throw new Error("extended point not allowed");let{x:U,y:V}=v||{};if(!y(U)||!y(V))throw new Error("invalid affine point");return new _(U,V,or,d(U*V))}static normalizeZ(v){let U=t.invertBatch(v.map(V=>V.ez));return v.map((V,H)=>V.toAffine(U[H])).map(_.fromAffine)}_setWindowSize(v){this._WINDOW_SIZE=v,E.delete(this)}assertValidity(){let{a:v,d:U}=e;if(this.is0())throw new Error("bad point: ZERO");let{ex:V,ey:H,ez:oe,et:se}=this,de=d(V*V),ae=d(H*H),le=d(oe*oe),Be=d(le*le),ke=d(de*v),gt=d(le*d(ke+ae)),yt=d(Be+d(U*d(de*ae)));if(gt!==yt)throw new Error("bad point: equation left != right (1)");let ct=d(V*H),Tt=d(oe*se);if(ct!==Tt)throw new Error("bad point: equation left != right (2)")}equals(v){S(v);let{ex:U,ey:V,ez:H}=this,{ex:oe,ey:se,ez:de}=v,ae=d(U*de),le=d(oe*H),Be=d(V*de),ke=d(se*H);return ae===le&&Be===ke}is0(){return this.equals(_.ZERO)}negate(){return new _(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:v}=e,{ex:U,ey:V,ez:H}=this,oe=d(U*U),se=d(V*V),de=d(Dl*d(H*H)),ae=d(v*oe),le=U+V,Be=d(d(le*le)-oe-se),ke=ae+se,gt=ke-de,yt=ae-se,ct=d(Be*gt),Tt=d(ke*yt),hn=d(Be*yt),Fo=d(gt*ke);return new _(ct,Tt,Fo,hn)}add(v){S(v);let{a:U,d:V}=e,{ex:H,ey:oe,ez:se,et:de}=this,{ex:ae,ey:le,ez:Be,et:ke}=v;if(U===BigInt(-1)){let O3=d((oe-H)*(le+ae)),L3=d((oe+H)*(le-ae)),df=d(L3-O3);if(df===Mr)return this.double();let B3=d(se*Dl*ke),U3=d(de*Dl*Be),M3=U3+B3,F3=L3+O3,V3=U3-B3,BE=d(M3*df),UE=d(F3*V3),ME=d(M3*V3),FE=d(df*F3);return new _(BE,UE,FE,ME)}let gt=d(H*ae),yt=d(oe*le),ct=d(de*V*ke),Tt=d(se*Be),hn=d((H+oe)*(ae+le)-gt-yt),Fo=Tt-ct,ea=Tt+ct,P3=d(yt-U*gt),NE=d(hn*Fo),PE=d(ea*P3),OE=d(hn*P3),LE=d(Fo*ea);return new _(NE,PE,LE,OE)}subtract(v){return this.add(v.negate())}wNAF(v){return R.wNAFCached(this,E,v,_.normalizeZ)}multiply(v){let{p:U,f:V}=this.wNAF(w(v,n));return _.normalizeZ([U,V])[0]}multiplyUnsafe(v){let U=b(v);return U===Mr?D:this.equals(D)||U===or?this:this.equals(A)?this.wNAF(U).p:R.unsafeLadder(this,U)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return R.unsafeLadder(this,n).is0()}toAffine(v){let{ex:U,ey:V,ez:H}=this,oe=this.is0();v==null&&(v=oe?xR:t.inv(H));let se=d(U*v),de=d(V*v),ae=d(H*v);if(oe)return{x:Mr,y:or};if(ae!==or)throw new Error("invZ was invalid");return{x:se,y:de}}clearCofactor(){let{h:v}=e;return v===or?this:this.multiplyUnsafe(v)}static fromHex(v,U=!1){let{d:V,a:H}=e,oe=t.BYTES;v=Ue("pointHex",v,oe);let se=v.slice(),de=v[oe-1];se[oe-1]=de&-129;let ae=Ur(se);ae===Mr||(U?w(ae,l):w(ae,t.ORDER));let le=d(ae*ae),Be=d(le-or),ke=d(V*le-H),{isValid:gt,value:yt}=u(Be,ke);if(!gt)throw new Error("Point.fromHex: invalid y coordinate");let ct=(yt&or)===or,Tt=(de&128)!==0;if(!U&&yt===Mr&&Tt)throw new Error("Point.fromHex: x=0 and x_0=1");return Tt!==ct&&(yt=d(-yt)),_.fromAffine({x:yt,y:ae})}static fromPrivateKey(v){return N(v).point}toRawBytes(){let{x:v,y:U}=this.toAffine(),V=xn(U,t.BYTES);return V[V.length-1]|=v&or?128:0,V}toHex(){return En(this.toRawBytes())}}_.BASE=new _(e.Gx,e.Gy,or,d(e.Gx*e.Gy)),_.ZERO=new _(Mr,or,or,Mr);let{BASE:A,ZERO:D}=_,R=Il(_,a*8);function k(T){return _e(T,n)}function O(T){return k(Ur(T))}function N(T){let v=a;T=Ue("private key",T,v);let U=Ue("hashed private key",s(T),2*v),V=f(U.slice(0,v)),H=U.slice(v,2*v),oe=O(V),se=A.multiply(oe),de=se.toRawBytes();return{head:V,prefix:H,scalar:oe,point:se,pointBytes:de}}function L(T){return N(T).pointBytes}function F(T=new Uint8Array,...v){let U=vn(...v);return O(s(g(U,Ue("context",T),!!o)))}function Y(T,v,U={}){T=Ue("message",T),o&&(T=o(T));let{prefix:V,scalar:H,pointBytes:oe}=N(v),se=F(U.context,V,T),de=A.multiply(se).toRawBytes(),ae=F(U.context,de,oe,T),le=k(se+ae*H);b(le);let Be=vn(de,xn(le,t.BYTES));return Ue("result",Be,a*2)}let I=vR;function C(T,v,U,V=I){let{context:H,zip215:oe}=V,se=t.BYTES;T=Ue("signature",T,2*se),v=Ue("message",v),o&&(v=o(v));let de=Ur(T.slice(se,2*se)),ae,le,Be;try{ae=_.fromHex(U,oe),le=_.fromHex(T.slice(0,se),oe),Be=A.multiplyUnsafe(de)}catch{return!1}if(!oe&&ae.isSmallOrder())return!1;let ke=F(H,le.toRawBytes(),ae.toRawBytes(),v);return le.add(ae.multiplyUnsafe(ke)).subtract(Be).clearCofactor().equals(_.ZERO)}return A._setWindowSize(8),{CURVE:e,getPublicKey:L,sign:Y,verify:C,ExtendedPoint:_,utils:{getExtendedPublicKey:N,randomPrivateKey:()=>i(t.BYTES),precompute(T=8,v=_.BASE){return v._setWindowSize(T),v.multiply(BigInt(3)),v}}}}var ya=BigInt(0),Zh=BigInt(1);function SR(r){return xr(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function L8(r){let e=SR(r),{P:t}=e,n=E=>_e(E,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(E=>E),c=e.powPminus2||(E=>zh(E,t-BigInt(2),t));function l(E,S,_){let A=n(E*(S-_));return S=n(S-A),_=n(_+A),[S,_]}function d(E){if(typeof E=="bigint"&&ya<=E&&E<t)return E;throw new Error("Expected valid scalar 0 < scalar < CURVE.P")}let u=(e.a-BigInt(2))/BigInt(4);function f(E,S){let _=d(E),A=d(S),D=_,R=Zh,k=ya,O=_,N=Zh,L=ya,F;for(let I=BigInt(o-1);I>=ya;I--){let C=A>>I&Zh;L^=C,F=l(L,R,O),R=F[0],O=F[1],F=l(L,k,N),k=F[0],N=F[1],L=C;let $=R+k,T=n($*$),v=R-k,U=n(v*v),V=T-U,H=O+N,oe=O-N,se=n(oe*$),de=n(H*v),ae=se+de,le=se-de;O=n(ae*ae),N=n(D*n(le*le)),R=n(T*U),k=n(V*(T+n(u*V)))}F=l(L,R,O),R=F[0],O=F[1],F=l(L,k,N),k=F[0],N=F[1];let Y=c(k);return n(R*Y)}function g(E){return xn(n(E),s)}function h(E){let S=Ue("u coordinate",E,s);return i===32&&(S[31]&=127),Ur(S)}function p(E){let S=Ue("scalar",E),_=S.length;if(_!==s&&_!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${_}`);return Ur(a(S))}function y(E,S){let _=h(S),A=p(E),D=f(_,A);if(D===ya)throw new Error("Invalid private or public key received");return g(D)}let w=g(e.Gu);function b(E){return y(E,w)}return{scalarMult:y,scalarMultBase:b,getSharedSecret:(E,S)=>y(E,S),getPublicKey:E=>b(E),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:w}}var wa=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),B8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),KM=BigInt(0),_R=BigInt(1),Jh=BigInt(2),AR=BigInt(5),U8=BigInt(10),IR=BigInt(20),DR=BigInt(40),M8=BigInt(80);function F8(r){let e=wa,n=r*r%e*r%e,o=Me(n,Jh,e)*n%e,s=Me(o,_R,e)*r%e,i=Me(s,AR,e)*s%e,a=Me(i,U8,e)*i%e,c=Me(a,IR,e)*a%e,l=Me(c,DR,e)*c%e,d=Me(l,M8,e)*l%e,u=Me(d,M8,e)*l%e,f=Me(u,U8,e)*i%e;return{pow_p_5_8:Me(f,Jh,e)*r%e,b2:n}}function V8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function TR(r,e){let t=wa,n=_e(e*e*e,t),o=_e(n*n*e,t),s=F8(r*o).pow_p_5_8,i=_e(r*n*s,t),a=_e(e*i*i,t),c=i,l=_e(i*B8,t),d=a===r,u=a===_e(-r,t),f=a===_e(-r*B8,t);return d&&(i=c),(u||f)&&(i=l),C8(i,t)&&(i=_e(-i,t)),{isValid:d||u,value:i}}var Rn=Al(wa,void 0,!0),e0={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Rn,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:io,randomBytes:es,adjustScalarBytes:V8,uvRatio:TR},ti=Tl(e0);function K8(r,e,t){if(e.length>255)throw new Error("Context is too big");return El(Vh("SigEd25519 no Ed25519 collisions"),new Uint8Array([t?1:0,e.length]),e,r)}var $M=Tl({...e0,domain:K8}),HM=Tl({...e0,domain:K8,prehash:io}),Ea=L8({P:wa,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=wa,{pow_p_5_8:t,b2:n}=F8(r);return _e(Me(t,BigInt(3),e)*n,e)},adjustScalarBytes:V8,randomBytes:es});var kR=(Rn.ORDER+BigInt(3))/BigInt(8),qM=Rn.pow(Jh,kR),WM=Rn.sqrt(Rn.neg(Rn.ONE)),GM=(Rn.ORDER-BigInt(5))/BigInt(8),zM=BigInt(486662);var YM=N8(Rn,Rn.neg(BigInt(486664)));var QM=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),XM=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),jM=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),ZM=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var JM=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var ri=32,Sn=64,kl=32;function $8(){let r=ti.utils.randomPrivateKey(),e=ti.getPublicKey(r);return{privateKey:G8(r,e),publicKey:e}}function H8(r){if(r.length!==kl)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=ti.getPublicKey(e);return{privateKey:G8(e,t),publicKey:t}}function q8(r,e){let t=r.subarray(0,kl);return ti.sign(e instanceof Uint8Array?e:e.subarray(),t)}function W8(r,e,t){return ti.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function G8(r,e){let t=new Uint8Array(Sn);for(let n=0;n<kl;n++)t[n]=r[n],t[kl+n]=e[n];return t}var qe={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("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"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var t0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Cl(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=qe.get();t*=8;async function c(u,f){let g=a.getRandomValues(new Uint8Array(s)),h=a.getRandomValues(new Uint8Array(n)),p={name:e,iv:h};typeof f=="string"&&(f=B(f));let y;if(f.length===0){y=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(p,y,u);return xe([g,p.iv,new Uint8Array(w)])}async function l(u,f){let g=u.subarray(0,s),h=u.subarray(s,s+n),p=u.subarray(s+n),y={name:e,iv:h};typeof f=="string"&&(f=B(f));let w;if(f.length===0)try{let E={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,S,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,S,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(y,w,p);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function ni(r,e){let n=await Cl().encrypt(r,e);return ut.encode(n)}var oi={};pe(oi,{KeyType:()=>Fe,PrivateKey:()=>Vr,PublicKey:()=>Fr});var Fe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Fe||(Fe={}));var r0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(r0||(r0={}));(function(r){r.codec=()=>$e(r0)})(Fe||(Fe={}));var Fr;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Fr||(Fr={}));var Vr;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Vr||(Vr={}));var ns=class{_key;constructor(e){this._key=si(e,ri)}verify(e,t){return W8(this._key,t,e)}marshal(){return this._key}get bytes(){return Fr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return br(e)?e.then(({bytes:t})=>t):e.bytes}},_n=class{_key;_publicKey;constructor(e,t){this._key=si(e,Sn),this._publicKey=si(t,ri)}sign(e){return q8(this._key,e)}get public(){return new ns(this._publicKey)}marshal(){return this._key}get bytes(){return Vr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return br(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=mr.digest(this.public.bytes);return Ge.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ni(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function NR(r){if(r.length>Sn){r=si(r,Sn+ri);let n=r.subarray(0,Sn),o=r.subarray(Sn,r.length);return new _n(n,o)}r=si(r,Sn);let e=r.subarray(0,Sn),t=r.subarray(ri);return new _n(e,t)}function PR(r){return r=si(r,ri),new ns(r)}async function OR(){let{privateKey:r,publicKey:e}=$8();return new _n(r,e)}async function n0(r){let{privateKey:e,publicKey:t}=H8(r);return new _n(e,t)}function si(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new m(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var Y8={"P-256":256,"P-384":384,"P-521":521},LR=Object.keys(Y8),s0=LR.join(" / ");async function Q8(r){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${s0}`,"ERR_INVALID_CURVE");let e=await qe.get().subtle.generateKey({name:"ECDH",namedCurve:r},!0,["deriveBits"]),t=async(s,i)=>{let a;i!=null?a=await qe.get().subtle.importKey("jwk",UR(r,i),{name:"ECDH",namedCurve:r},!1,["deriveBits"]):a=e.privateKey;let c=await qe.get().subtle.importKey("jwk",j8(r,s),{name:"ECDH",namedCurve:r},!1,[]),l=await qe.get().subtle.deriveBits({name:"ECDH",namedCurve:r,public:c},a,Y8[r]);return new Uint8Array(l,0,l.byteLength)},n=await qe.get().subtle.exportKey("jwk",e.publicKey);return{key:BR(n),genSharedKey:t}}var X8={"P-256":32,"P-384":48,"P-521":66};function BR(r){if(r.crv==null||r.x==null||r.y==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");if(r.crv!=="P-256"&&r.crv!=="P-384"&&r.crv!=="P-521")throw new m(`Unknown curve: ${r.crv}. Must be ${s0}`,"ERR_INVALID_CURVE");let e=X8[r.crv];return xe([Uint8Array.from([4]),Fh(r.x,e),Fh(r.y,e)],1+e*2)}function j8(r,e){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${s0}`,"ERR_INVALID_CURVE");let t=X8[r];if(!J(e.subarray(0,1),Uint8Array.from([4])))throw new m("Cannot unmarshal public key - invalid key format","ERR_INVALID_KEY_FORMAT");return{kty:"EC",crv:r,x:P(e.subarray(1,t+1),"base64url"),y:P(e.subarray(1+t),"base64url"),ext:!0}}var UR=(r,e)=>({...j8(r,e.public),d:P(e.private,"base64url")});var Z8=Q8;async function J8(r,e){let t=ut.decode(r);return Cl().decrypt(t,e)}var e6={SHA1:20,SHA256:32,SHA512:64};var MR={SHA1:"SHA-1",SHA256:"SHA-256",SHA512:"SHA-512"},FR=async(r,e)=>{let t=await qe.get().subtle.sign({name:"HMAC"},r,e);return new Uint8Array(t,0,t.byteLength)};async function t6(r,e){let t=MR[r],n=await qe.get().subtle.importKey("raw",e,{name:"HMAC",hash:{name:t}},!1,["sign"]);return{async digest(o){return FR(n,o)},length:e6[r]}}var r6={"AES-128":{ivSize:16,keySize:16},"AES-256":{ivSize:16,keySize:32},Blowfish:{ivSize:8,keySize:32}};async function n6(r,e,t){let n=r6[r];if(n==null){let b=Object.keys(r6).join(" / ");throw new m(`unknown cipher type '${r}'. Must be ${b}`,"ERR_INVALID_CIPHER_TYPE")}if(e==null)throw new m("missing hash type","ERR_MISSING_HASH_TYPE");let o=n.keySize,s=n.ivSize,i=20,a=B("key expansion"),c=2*(s+o+i),l=await t6(e,t),d=await l.digest(a),u=[],f=0;for(;f<c;){let b=await l.digest(xe([d,a])),E=b.length;f+E>c&&(E=c-f),u.push(b),f+=E,d=await l.digest(d)}let g=c/2,h=xe(u),p=h.subarray(0,g),y=h.subarray(g,c),w=b=>({iv:b.subarray(0,s),cipherKey:b.subarray(s,s+o),macKey:b.subarray(s+o)});return{k1:w(p),k2:w(y)}}var g0={};pe(g0,{MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>mo,RsaPublicKey:()=>ss,fromJwk:()=>uS,generateKeyPair:()=>dS,unmarshalRsaPrivateKey:()=>p0,unmarshalRsaPublicKey:()=>lS});function qt(r){if(isNaN(r)||r<=0)throw new m("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return es(r)}var po={};pe(po,{exportToPem:()=>sS,importFromPem:()=>h0,jwkToPkcs1:()=>tS,jwkToPkix:()=>nS,pkcs1ToJwk:()=>eS,pkixToJwk:()=>rS});var Nl=class extends Zs{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Zo(e);let n=Br(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,s=new Uint8Array(o);s.set(n.length>o?e.create().update(n).digest():n);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return js(this),this.iHash.update(e),this}digestInto(e){js(this),Xs(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:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,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()}},lo=(r,e,t)=>new Nl(r,e).update(t).digest();lo.create=(r,e)=>new Nl(r,e);function o6(r,e,t,n){Zo(r);let o=R8({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(ro(s),ro(i),ro(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Br(e),l=Br(t),d=new Uint8Array(i),u=lo.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function s6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function i6(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=o6(r,e,t,n),l,d=new Uint8Array(4),u=Jo(d),f=new Uint8Array(a.outputLen);for(let g=1,h=0;h<s;g++,h+=a.outputLen){let p=i.subarray(h,h+a.outputLen);u.setInt32(0,g,!1),(l=c._cloneInto(l)).update(d).digestInto(f),p.set(f.subarray(0,p.length));for(let y=1;y<o;y++){a._cloneInto(l).update(f).digestInto(f);for(let w=0;w<p.length;w++)p[w]^=f[w]}}return s6(a,c,i,l,f)}async function i0(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=o6(r,e,t,n),d,u=new Uint8Array(4),f=Jo(u),g=new Uint8Array(c.outputLen);for(let h=1,p=0;p<s;h++,p+=c.outputLen){let y=a.subarray(p,p+c.outputLen);f.setInt32(0,h,!1),(d=l._cloneInto(d)).update(u).digestInto(g),y.set(g.subarray(0,y.length)),await v8(o-1,i,()=>{c._cloneInto(d).update(g).digestInto(g);for(let w=0;w<y.length;w++)y[w]^=g[w]})}return s6(c,l,a,d,g)}var ye=Ye(a6());function os(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 uo(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function Ll(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function c0(){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=os(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,os(s,8)-n}function c6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=uo(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=uo(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function l6(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 Wt(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var WF=Math.log(2);function Bl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function l0(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function kn(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 xa=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return l0(this.items)}},ba=[new Uint8Array([1])],u6="0123456789";var ci="",$r=new ArrayBuffer(0),u0=new Uint8Array(0),va="EndOfContent",f6="OCTET STRING",h6="BIT STRING";function Cn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):u0}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!kn(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,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",$r)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var In=class{constructor({blockLength:e=0,error:t=ci,warnings:n=[],valueBeforeDecode:o=u0}={}){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)}}};In.NAME="baseBlock";var Pt=class extends In{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'")}};Pt.NAME="valueBlock";var Ul=class extends Cn(In){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):u0,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!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",$r}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=uo(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!kn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[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=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let g=0;g<l.length;g++)f[g]=l[g];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=os(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}}};Ul.NAME="identificationBlock";var Ml=class extends In{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(!kn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=os(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+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=uo(this.length,8);if(o.byteLength>127)return this.error="Too big length",$r;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];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}}};Ml.NAME="lengthBlock";var W={},xt=class extends In{constructor({name:e=ci,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Ul(o),this.lenBlock=new Ml(o),this.valueBlock=s?new s(o):new Pt(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 xa;t||p6(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 s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?$r: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 l6(t,n)}};xt.NAME="BaseBlock";function p6(r){if(r instanceof W.Constructed)for(let e of r.valueBlock.value)p6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Fl=class extends xt{constructor({value:e=ci,...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}'`}};Fl.NAME="BaseStringBlock";var Vl=class extends Cn(Pt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Vl.NAME="PrimitiveValueBlock";var m6,Kl=class extends xt{constructor(e={}){super(e,Vl),this.idBlock.isConstructed=!1}};m6=Kl;W.Primitive=m6;Kl.NAME="PRIMITIVE";function QR(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 bu(r,e=0,t=r.length){let n=e,o=new xt({},Pt),s=new In;if(!kn(s,r,e,t))return o.error=s.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=xt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=W.EndOfContent;break;case 1:c=W.Boolean;break;case 2:c=W.Integer;break;case 3:c=W.BitString;break;case 4:c=W.OctetString;break;case 5:c=W.Null;break;case 6:c=W.ObjectIdentifier;break;case 10:c=W.Enumerated;break;case 12:c=W.Utf8String;break;case 13:c=W.RelativeObjectIdentifier;break;case 14:c=W.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=W.Sequence;break;case 17:c=W.Set;break;case 18:c=W.NumericString;break;case 19:c=W.PrintableString;break;case 20:c=W.TeletexString;break;case 21:c=W.VideotexString;break;case 22:c=W.IA5String;break;case 23:c=W.UTCTime;break;case 24:c=W.GeneralizedTime;break;case 25:c=W.GraphicString;break;case 26:c=W.VisibleString;break;case 27:c=W.GeneralString;break;case 28:c=W.UniversalString;break;case 29:c=W.CharacterString;break;case 30:c=W.BmpString;break;case 31:c=W.DATE;break;case 32:c=W.TimeOfDay;break;case 33:c=W.DateTime;break;case 34:c=W.Duration;break;default:{let l=o.idBlock.isConstructed?new W.Constructed:new W.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?W.Constructed:W.Primitive}return o=QR(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 li(r){if(!r.byteLength){let e=new xt({},Pt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return bu(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function XR(r,e){return r?1:e}var nn=class extends Pt{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(!kn(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 s=t;for(;XR(this.isIndefiniteForm,n)>0;){let i=bu(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===va)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===va?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new xa;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?$r:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};nn.NAME="ConstructedValueBlock";var g6,fo=class extends xt{constructor(e={}){super(e,nn),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(`
17
+ `});var ww=Ae(()=>{yw();Id();Uo();Zp();mc()});var t3,cse,Ew=Ae(()=>{Gy();zy();Yy();Qy();Xy();Hp();jy();Gp();Zy();ew();lw();fw();hw();pw();ww();t3={...Up,...Mp,...Fp,...Vp,...Kp,...$p,...qp,...Wp,...zp,...Yp},cse={...Jp,...e3}});function Gi(r){return globalThis.Buffer!=null?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r}var Cd=Ae(()=>{});function Nd(r=0){return globalThis.Buffer!=null&&globalThis.Buffer.allocUnsafe!=null?Gi(globalThis.Buffer.allocUnsafe(r)):new Uint8Array(r)}var r3=Ae(()=>{Cd()});function xw(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var bw,n3,gk,Pd,o3=Ae(()=>{Ew();r3();bw=xw("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),n3=xw("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=Nd(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),gk={utf8:bw,"utf-8":bw,hex:t3.base16,latin1:n3,ascii:n3,binary:n3,...t3},Pd=gk});var vw={};pe(vw,{toString:()=>yk});function yk(r,e="utf8"){let t=Pd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString("utf8"):t.encoder.encode(r).substring(1)}var Rw=Ae(()=>{o3()});var Sw={};pe(Sw,{fromString:()=>wk});function wk(r,e="utf8"){let t=Pd[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?Gi(globalThis.Buffer.from(r,"utf-8")):t.decoder.decode(`${t.prefix}${r}`)}var _w=Ae(()=>{o3();Cd()});var Aw={};pe(Aw,{concat:()=>Ek});function Ek(r,e){e||(e=r.reduce((o,s)=>o+s.length,0));let t=Nd(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return Gi(t)}var Iw=Ae(()=>{r3();Cd()});var i3=Ie((xse,Pw)=>{"use strict";var Dw=_y(),zi=By(),{names:yc}=My(),{toString:Od}=(Rw(),Rc(vw)),{fromString:bk}=(_w(),Rc(Sw)),{concat:xk}=(Iw(),Rc(Aw)),Yi={};for(let r in yc){let e=r;Yi[yc[e]]=e}Object.freeze(Yi);function vk(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Od(r,"base16")}function Rk(r){return bk(r,"base16")}function Sk(r){if(!(r instanceof Uint8Array))throw new Error("must be passed a Uint8Array");return Od(Dw.encode("base58btc",r)).slice(1)}function _k(r){let e=r instanceof Uint8Array?Od(r):r;return Dw.decode("z"+e)}function Tw(r){if(!(r instanceof Uint8Array))throw new Error("multihash must be a Uint8Array");if(r.length<2)throw new Error("multihash too short. must be > 2 bytes.");let e=zi.decode(r);if(!Cw(e))throw new Error(`multihash unknown function code: 0x${e.toString(16)}`);r=r.slice(zi.decode.bytes);let t=zi.decode(r);if(t<0)throw new Error(`multihash invalid length: ${t}`);if(r=r.slice(zi.decode.bytes),r.length!==t)throw new Error(`multihash length inconsistent: 0x${Od(r,"base16")}`);return{code:e,name:Yi[e],length:t,digest:r}}function Ak(r,e,t){if(!r||e===void 0)throw new Error("multihash encode requires at least two args: digest, code");let n=kw(e);if(!(r instanceof Uint8Array))throw new Error("digest should be a Uint8Array");if(t==null&&(t=r.length),t&&r.length!==t)throw new Error("digest length should be equal to specified length.");let o=zi.encode(n),s=zi.encode(t);return xk([o,s,r],o.length+s.length+r.length)}function kw(r){let e=r;if(typeof r=="string"){if(yc[r]===void 0)throw new Error(`Unrecognized hash function named: ${r}`);e=yc[r]}if(typeof e!="number")throw new Error(`Hash function code should be a number. Got: ${e}`);if(Yi[e]===void 0&&!s3(e))throw new Error(`Unrecognized function code: ${e}`);return e}function s3(r){return r>0&&r<16}function Cw(r){return!!(s3(r)||Yi[r])}function Nw(r){Tw(r)}function Ik(r){return Nw(r),r.subarray(0,2)}Pw.exports={names:yc,codes:Yi,toHexString:vk,fromHexString:Rk,toB58String:Sk,fromB58String:_k,decode:Tw,encode:Ak,coerceCode:kw,isAppCode:s3,validate:Nw,prefix:Ik,isValidCode:Cw}});var Gw=Ie(Md=>{"use strict";Object.defineProperty(Md,"__esModule",{value:!0});var u3=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}))}}},Ud=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new u3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:s=>o.push(s),stop:()=>o.stop(),fail:s=>o.fail(s),on:(s,i)=>{o.eventHandlers[s]=i}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Md.EventIterator=Ud;Md.default=Ud});var zw=Ie(wc=>{"use strict";Object.defineProperty(wc,"__esModule",{value:!0});var d3=Gw();wc.EventIterator=d3.EventIterator;function Lk(r,e,t){return new d3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}wc.subscribe=Lk;wc.default=d3.EventIterator});var hC={};pe(hC,{DEFAULT_SESSION_MAX_PROVIDERS:()=>hf,DEFAULT_SESSION_MIN_PROVIDERS:()=>ff,DEFAULT_SESSION_PROVIDER_QUERY_CONCURRENCY:()=>pf,DEFAULT_SESSION_PROVIDER_QUERY_TIMEOUT:()=>K3,createHelia:()=>dC,libp2pDefaults:()=>Kd});var ff=1,hf=5,pf=5,K3=5e3;var $3=Symbol.for("@libp2p/connection");var Jr=Symbol.for("@libp2p/content-routing");var Ko=Symbol.for("@libp2p/peer-discovery");var mf=Symbol.for("@libp2p/peer-id");function Cs(r){return r!=null&&!!r[mf]}var en=Symbol.for("@libp2p/peer-routing");var H3="keep-alive";var tn=Symbol.for("@libp2p/transport");var Yn;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Yn||(Yn={}));var Cr=class r extends Error{code;type;constructor(e="The operation was aborted"){super(e),this.name="AbortError",this.code=r.code,this.type=r.type}static code="ABORT_ERR";static type="aborted"},m=class extends Error{code;props;constructor(e,t,n){super(e),this.code=t,this.name=n?.name??"CodeError",this.props=n??{}}},Sc=class extends AggregateError{code;props;constructor(e,t,n,o){super(e,t),this.code=n,this.name=o?.name??"AggregateCodeError",this.props=o??{}}};var pn="ERR_TIMEOUT";var q3="ERR_NOT_FOUND",$o="ERR_INVALID_MESSAGE";var ee=(r,...e)=>{try{[...e]}catch{}};var xe=class extends EventTarget{#e=new Map;constructor(){super(),ee(1/0,this)}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:s})=>s!==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 yt(e,t))}},gf=class extends Event{detail;constructor(e,t){super(e,t),this.detail=t?.detail}},yt=globalThis.CustomEvent??gf;function _c(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function Qn(...r){let e=[];for(let t of r)_c(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 Xn(...r){let e=[];for(let t of r)_c(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()}))}function ot(r){let e=new globalThis.AbortController;function t(){e.abort();for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}for(let s of r){if(s?.aborted===!0){t();break}s?.addEventListener!=null&&s.addEventListener("abort",t)}function n(){for(let s of r)s?.removeEventListener!=null&&s.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function Z(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Ac=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Ns=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Ac(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 Ac(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 yf=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function dt(r={}){return GE(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 GE(r,e){e=e??{};let t=e.onEnd,n=new Ns,o,s,i,a=Z(),c=async()=>{try{return n.isEmpty()?i?{done:!0}:await new Promise((y,w)=>{s=b=>{s=null,n.push(b);try{y(r(n))}catch(E){w(E)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Z()})}},l=y=>s!=null?s(y):(n.push(y),o),d=y=>(n=new Ns,s!=null?s({error:y}):(n.push({error:y}),o)),u=y=>{if(i)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})},f=y=>i?o:(i=!0,y!=null?d(y):l({done:!0})),g=()=>(n=new Ns,f(),{done:!0}),h=y=>(f(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:g,throw:h,push:u,end:f,get readableLength(){return n.size},onEmpty:async y=>{let w=y?.signal;if(w?.throwIfAborted(),n.isEmpty())return;let b,E;w!=null&&(b=new Promise((S,_)=>{E=()=>{_(new yf)},w.addEventListener("abort",E)}));try{await Promise.race([a.promise,b])}finally{E!=null&&w!=null&&w?.removeEventListener("abort",E)}}},t==null)return o;let p=o;return o={[Symbol.asyncIterator](){return this},next(){return p.next()},throw(y){return p.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return p.return(),t!=null&&(t(),t=void 0),{done:!0}},push:u,end(y){return p.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return p.readableLength},onEmpty:y=>p.onEmpty(y)},o}var wf=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 rn(r,e,t,n){let o=new wf(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((s,i)=>{let a=l=>{try{if(n?.filter?.(l)===!1)return}catch(d){r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(d);return}r.removeEventListener(e,a),t?.removeEventListener("abort",c),s(l)},c=()=>{r.removeEventListener(e,a),t?.removeEventListener("abort",c),i(o)};r.addEventListener(e,a),t?.addEventListener("abort",c)})}var Ic=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 Ot(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new Ic(t?.errorMessage,t?.errorCode));let n,o=new Ic(t?.errorMessage,t?.errorCode);try{return await Promise.race([r,new Promise((s,i)=>{n=()=>{i(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Dc=class{deferred;signal;where;constructor(e,t){this.signal=t,this.deferred=Z(),this.where=e,this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(new Cr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function zE(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Tc=class{id;fn;options;priority;recipients;status;timeline;controller;constructor(e,t,n=0){this.id=zE(),this.status="queued",this.fn=e,this.priority=n,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,ee(1/0,this.controller.signal),this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&this.controller.abort(new Cr)}async join(e={}){let t=new Dc(new Error("where").stack,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 Ot(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.signal?.removeEventListener("abort",this.onAbort)})}};function YE(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var mn=class extends xe{concurrency;queue;pending;constructor(e={}){super(),this.concurrency=e.concurrency??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.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){if(this.queue[this.size-1]?.priority>=e.priority){this.queue.push(e);return}let t=YE(this.queue,e,(n,o)=>o.priority-n.priority);this.queue.splice(t,0,e)}async add(e,t){t?.signal?.throwIfAborted();let n=new Tc(e,t,t?.priority),o=n.join(t).then(s=>(this.safeDispatchEvent("completed",{detail:s}),this.safeDispatchEvent("success",{detail:{job:n,result:s}}),s)).catch(s=>{throw this.safeDispatchEvent("error",{detail:s}),this.safeDispatchEvent("failure",{detail:{job:n,error:s}}),s});return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),o}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Cr)}),this.clear()}async onEmpty(e){this.size!==0&&await rn(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await rn(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await rn(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=dt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},s=c=>{n(c.detail)},i=()=>{n()},a=()=>{n(new m("Queue aborted","ERR_QUEUE_ABORTED"))};this.addEventListener("completed",o),this.addEventListener("error",s),this.addEventListener("idle",i),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",s),this.removeEventListener("idle",i),e?.signal?.removeEventListener("abort",a),n()}}};var Vt=class extends mn{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var kc=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 s=0,i=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let d=this.readAtomically(()=>{let u=this.readChar();if(u===void 0)return;let f=Number.parseInt(u,e);if(!Number.isNaN(f))return f});if(d===void 0)break;if(s*=e,s+=d,s>l||(i+=1,t!==void 0&&i>t))return}if(i!==0)return!n&&c&&i>1?void 0:s})}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 i=this.readSeparator(":",n,()=>this.readIPv4Addr());if(i!==void 0)return t[o]=i[0],t[o+1]=i[1],t[o+2]=i[2],t[o+3]=i[3],[o+4,!0]}let s=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(s===void 0)return[o,!1];t[o]=s>>8,t[o+1]=s&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 s=new Uint8Array(14),i=16-(n+2),[a]=e(s.subarray(0,i));return t.set(s.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var W3=45,QE=15,Ps=new kc;function Ef(r){if(!(r.length>QE))return Ps.new(r).parseWith(()=>Ps.readIPv4Addr())}function bf(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>W3))return Ps.new(r).parseWith(()=>Ps.readIPv6Addr())}function Cc(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>W3))return Ps.new(r).parseWith(()=>Ps.readIPAddr())}function Os(r){return!!Ef(r)}function Ls(r){return!!bf(r)}function Nc(r){return!!Cc(r)}var _f={};pe(_f,{base58btc:()=>Ge,base58flickr:()=>tb});var tN=new Uint8Array(0);function G3(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 gn(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 z3(r){return new TextEncoder().encode(r)}function Y3(r){return new TextDecoder().decode(r)}function XE(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 s=r.charAt(o),i=s.charCodeAt(0);if(t[i]!==255)throw new TypeError(s+" is ambiguous");t[i]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),d=Math.log(256)/Math.log(a);function u(h){if(h instanceof Uint8Array||(ArrayBuffer.isView(h)?h=new Uint8Array(h.buffer,h.byteOffset,h.byteLength):Array.isArray(h)&&(h=Uint8Array.from(h))),!(h instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(h.length===0)return"";for(var p=0,y=0,w=0,b=h.length;w!==b&&h[w]===0;)w++,p++;for(var E=(b-w)*d+1>>>0,S=new Uint8Array(E);w!==b;){for(var _=h[w],A=0,D=E-1;(_!==0||A<y)&&D!==-1;D--,A++)_+=256*S[D]>>>0,S[D]=_%a>>>0,_=_/a>>>0;if(_!==0)throw new Error("Non-zero carry");y=A,w++}for(var R=E-y;R!==E&&S[R]===0;)R++;for(var k=c.repeat(p);R<E;++R)k+=r.charAt(S[R]);return k}function f(h){if(typeof h!="string")throw new TypeError("Expected String");if(h.length===0)return new Uint8Array;var p=0;if(h[p]!==" "){for(var y=0,w=0;h[p]===c;)y++,p++;for(var b=(h.length-p)*l+1>>>0,E=new Uint8Array(b);h[p];){var S=t[h.charCodeAt(p)];if(S===255)return;for(var _=0,A=b-1;(S!==0||_<w)&&A!==-1;A--,_++)S+=a*E[A]>>>0,E[A]=S%256>>>0,S=S/256>>>0;if(S!==0)throw new Error("Non-zero carry");w=_,p++}if(h[p]!==" "){for(var D=b-w;D!==b&&E[D]===0;)D++;for(var R=new Uint8Array(y+(b-D)),k=y;D!==b;)R[k++]=E[D++];return R}}}function g(h){var p=f(h);if(p)return p;throw new Error(`Non-${e} character`)}return{encode:u,decodeUnsafe:f,decode:g}}var jE=XE,ZE=jE,X3=ZE;var xf=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")}},vf=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),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 j3(this,e)}},Rf=class{decoders;constructor(e){this.decoders=e}or(e){return j3(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 j3(r,e){return new Rf({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Sf=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 xf(e,t,n),this.decoder=new vf(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Bs({name:r,prefix:e,encode:t,decode:n}){return new Sf(r,e,t,n)}function jn({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=X3(t,r);return Bs({prefix:e,name:r,encode:n,decode:s=>gn(o(s))})}function JE(r,e,t,n){let o={};for(let d=0;d<e.length;++d)o[e[d]]=d;let s=r.length;for(;r[s-1]==="=";)--s;let i=new Uint8Array(s*t/8|0),a=0,c=0,l=0;for(let d=0;d<s;++d){let u=o[r[d]];if(u===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|u,a+=t,a>=8&&(a-=8,i[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return i}function eb(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,s="",i=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],i+=8;i>t;)i-=t,s+=e[o&a>>i];if(i!==0&&(s+=e[o&a<<t-i]),n)for(;s.length*t&7;)s+="=";return s}function Qe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Bs({prefix:e,name:r,encode(o){return eb(o,n,t)},decode(o){return JE(o,n,t,r)}})}var Ge=jn({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),tb=jn({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Af={};pe(Af,{base32:()=>ct,base32hex:()=>ob,base32hexpad:()=>ib,base32hexpadupper:()=>ab,base32hexupper:()=>sb,base32pad:()=>rb,base32padupper:()=>nb,base32upper:()=>Z3,base32z:()=>cb});var ct=Qe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Z3=Qe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),rb=Qe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),nb=Qe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),ob=Qe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),sb=Qe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),ib=Qe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),ab=Qe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),cb=Qe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var fr={};pe(fr,{Digest:()=>Ho,create:()=>Nr,decode:()=>Pr,equals:()=>Df});var lb=t4,J3=128,ub=127,db=~ub,fb=Math.pow(2,31);function t4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=fb;)e[t++]=r&255|J3,r/=128;for(;r&db;)e[t++]=r&255|J3,r>>>=7;return e[t]=r|0,t4.bytes=t-n+1,e}var hb=If,pb=128,e4=127;function If(r,n){var t=0,n=n||0,o=0,s=n,i,a=r.length;do{if(s>=a)throw If.bytes=0,new RangeError("Could not decode varint");i=r[s++],t+=o<28?(i&e4)<<o:(i&e4)*Math.pow(2,o),o+=7}while(i>=pb);return If.bytes=s-n,t}var mb=Math.pow(2,7),gb=Math.pow(2,14),yb=Math.pow(2,21),wb=Math.pow(2,28),Eb=Math.pow(2,35),bb=Math.pow(2,42),xb=Math.pow(2,49),vb=Math.pow(2,56),Rb=Math.pow(2,63),Sb=function(r){return r<mb?1:r<gb?2:r<yb?3:r<wb?4:r<Eb?5:r<bb?6:r<xb?7:r<vb?8:r<Rb?9:10},_b={encode:lb,decode:hb,encodingLength:Sb},Ab=_b,ea=Ab;function ta(r,e=0){return[ea.decode(r,e),ea.decode.bytes]}function Us(r,e,t=0){return ea.encode(r,e,t),e}function Ms(r){return ea.encodingLength(r)}function Nr(r,e){let t=e.byteLength,n=Ms(r),o=n+Ms(t),s=new Uint8Array(o+t);return Us(r,s,0),Us(t,s,n),s.set(e,o),new Ho(r,t,e,s)}function Pr(r){let e=gn(r),[t,n]=ta(e),[o,s]=ta(e.subarray(n)),i=e.subarray(n+s);if(i.byteLength!==o)throw new Error("Incorrect length");return new Ho(t,o,i,e)}function Df(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&G3(r.bytes,t.bytes)}}var Ho=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function r4(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Db(t,Tf(r),e??Ge.encoder);default:return Tb(t,Tf(r),e??ct.encoder)}}var n4=new WeakMap;function Tf(r){let e=n4.get(r);if(e==null){let t=new Map;return n4.set(r,t),t}return e}var ce=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!==ra)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==kb)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=Nr(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&&Df(e.multihash,n.multihash)}toString(e){return r4(this,e)}toJSON(){return{"/":r4(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:s,bytes:i}=t;return new r(n,o,s,i??o4(n,o,s.bytes))}else if(t[Cb]===!0){let{version:n,multihash:o,code:s}=t,i=Pr(o);return r.create(n,s,i)}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!==ra)throw new Error(`Version 0 CID must use dag-pb (code: ${ra}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=o4(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,ra,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=gn(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let s=o.subarray(t.multihashSize-t.digestSize),i=new Ho(t.multihashCode,t.digestSize,s,o);return[t.version===0?r.createV0(i):r.createV1(t.codec,i),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[u,f]=ta(e.subarray(t));return t+=f,u},o=n(),s=ra;if(o===18?(o=0,t=0):s=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let i=t,a=n(),c=n(),l=t+c,d=l-i;return{version:o,codec:s,multihashCode:a,digestSize:c,multihashSize:d,size:l}}static parse(e,t){let[n,o]=Ib(e,t),s=r.decode(o);if(s.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Tf(s).set(n,e),s}};function Ib(r,e){switch(r[0]){case"Q":{let t=e??Ge;return[Ge.prefix,t.decode(`${Ge.prefix}${r}`)]}case Ge.prefix:{let t=e??Ge;return[Ge.prefix,t.decode(r)]}case ct.prefix:{let t=e??ct;return[ct.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Db(r,e,t){let{prefix:n}=t;if(n!==Ge.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let s=t.encode(r).slice(1);return e.set(n,s),s}else return o}function Tb(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let s=t.encode(r);return e.set(n,s),s}else return o}var ra=112,kb=18;function o4(r,e,t){let n=Ms(r),o=n+Ms(e),s=new Uint8Array(o+t.byteLength);return Us(r,s,0),Us(e,s,n),s.set(t,o),s}var Cb=Symbol.for("@ipld/js-cid/CID");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 kf={};pe(kf,{base10:()=>Nb});var Nb=jn({prefix:"9",name:"base10",alphabet:"0123456789"});var Cf={};pe(Cf,{base16:()=>Pb,base16upper:()=>Ob});var Pb=Qe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Ob=Qe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Nf={};pe(Nf,{base2:()=>Lb});var Lb=Qe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Pf={};pe(Pf,{base256emoji:()=>Vb});var s4=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}"),Bb=s4.reduce((r,e,t)=>(r[t]=e,r),[]),Ub=s4.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function Mb(r){return r.reduce((e,t)=>(e+=Bb[t],e),"")}function Fb(r){let e=[];for(let t of r){let n=Ub[t.codePointAt(0)];if(n===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(n)}return new Uint8Array(e)}var Vb=Bs({prefix:"\u{1F680}",name:"base256emoji",encode:Mb,decode:Fb});var Of={};pe(Of,{base36:()=>Zn,base36upper:()=>Kb});var Zn=jn({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),Kb=jn({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var Bf={};pe(Bf,{base64:()=>lt,base64pad:()=>$b,base64url:()=>Lf,base64urlpad:()=>Hb});var lt=Qe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),$b=Qe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Lf=Qe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),Hb=Qe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Uf={};pe(Uf,{base8:()=>qb});var qb=Qe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Mf={};pe(Mf,{identity:()=>Wb});var Wb=Bs({prefix:"\0",name:"identity",encode:r=>Y3(r),decode:r=>z3(r)});var AN=new TextEncoder,IN=new TextDecoder;var i4=512;var Oc=85;var Vf={};pe(Vf,{identity:()=>hr});var c4=0,Gb="identity",l4=gn;function zb(r){return Nr(c4,l4(r))}var hr={code:c4,name:Gb,encode:l4,digest:zb};var qf={};pe(qf,{sha256:()=>De,sha512:()=>Hf});function $f({name:r,code:e,encode:t}){return new Kf(r,e,t)}var Kf=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?Nr(this.code,t):t.then(n=>Nr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function d4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var De=$f({name:"sha2-256",code:18,encode:d4("SHA-256")}),Hf=$f({name:"sha2-512",code:19,encode:d4("SHA-512")});var pr={...Mf,...Nf,...Uf,...kf,...Cf,...Af,...Of,..._f,...Bf,...Pf},VN={...qf,...Vf};function Ce(r=0){return new Uint8Array(r)}function ze(r=0){return new Uint8Array(r)}function h4(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var f4=h4("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Wf=h4("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=ze(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),Yb={utf8:f4,"utf-8":f4,hex:pr.base16,latin1:Wf,ascii:Wf,binary:Wf,...pr},Lc=Yb;function P(r,e="utf8"){let t=Lc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var Qb=Math.pow(2,7),Xb=Math.pow(2,14),jb=Math.pow(2,21),Gf=Math.pow(2,28),zf=Math.pow(2,35),Yf=Math.pow(2,42),Qf=Math.pow(2,49),Te=128,kt=127;function Ne(r){if(r<Qb)return 1;if(r<Xb)return 2;if(r<jb)return 3;if(r<Gf)return 4;if(r<zf)return 5;if(r<Yf)return 6;if(r<Qf)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Xf(r,e,t=0){switch(Ne(r)){case 8:e[t++]=r&255|Te,r/=128;case 7:e[t++]=r&255|Te,r/=128;case 6:e[t++]=r&255|Te,r/=128;case 5:e[t++]=r&255|Te,r/=128;case 4:e[t++]=r&255|Te,r>>>=7;case 3:e[t++]=r&255|Te,r>>>=7;case 2:e[t++]=r&255|Te,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Zb(r,e,t=0){switch(Ne(r)){case 8:e.set(t++,r&255|Te),r/=128;case 7:e.set(t++,r&255|Te),r/=128;case 6:e.set(t++,r&255|Te),r/=128;case 5:e.set(t++,r&255|Te),r/=128;case 4:e.set(t++,r&255|Te),r>>>=7;case 3:e.set(t++,r&255|Te),r>>>=7;case 2:e.set(t++,r&255|Te),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function jf(r,e){let t=r[e],n=0;if(n+=t&kt,t<Te||(t=r[e+1],n+=(t&kt)<<7,t<Te)||(t=r[e+2],n+=(t&kt)<<14,t<Te)||(t=r[e+3],n+=(t&kt)<<21,t<Te)||(t=r[e+4],n+=(t&kt)*Gf,t<Te)||(t=r[e+5],n+=(t&kt)*zf,t<Te)||(t=r[e+6],n+=(t&kt)*Yf,t<Te)||(t=r[e+7],n+=(t&kt)*Qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Jb(r,e){let t=r.get(e),n=0;if(n+=t&kt,t<Te||(t=r.get(e+1),n+=(t&kt)<<7,t<Te)||(t=r.get(e+2),n+=(t&kt)<<14,t<Te)||(t=r.get(e+3),n+=(t&kt)<<21,t<Te)||(t=r.get(e+4),n+=(t&kt)*Gf,t<Te)||(t=r.get(e+5),n+=(t&kt)*zf,t<Te)||(t=r.get(e+6),n+=(t&kt)*Yf,t<Te)||(t=r.get(e+7),n+=(t&kt)*Qf,t<Te))return n;throw new RangeError("Could not decode varint")}function Ve(r,e,t=0){return e==null&&(e=ze(Ne(r))),e instanceof Uint8Array?Xf(r,e,t):Zb(r,e,t)}function Lt(r,e=0){return r instanceof Uint8Array?jf(r,e):Jb(r,e)}function ve(r,e){e==null&&(e=r.reduce((o,s)=>o+s.length,0));let t=ze(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var sP=parseInt("0xFFFF",16),iP=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function B(r,e="utf8"){let t=Lc[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var g4=Os,sx=Ls,Zf=function(r){let e=0;if(r=r.toString().trim(),g4(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(sx(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let s=g4(t[n]),i;s&&(i=Zf(t[n]),t[n]=P(i.slice(0,2),"base16")),i!=null&&++n<8&&t.splice(n,0,P(i.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 s=[n,1];for(n=9-t.length;n>0;n--)s.push("0");t.splice.apply(t,s)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let s=parseInt(t[n],16);o[e++]=s>>8&255,o[e++]=s&255}return o}throw new Error("invalid ip address")},y4=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 s=0;s<t;s++)o.push(r[e+s]);return o.join(".")}if(t===16){let o=[];for(let s=0;s<t;s+=2)o.push(n.getUint16(e+s).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Fs={},Jf={},ax=[[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"],[777,-1,"memory"]];ax.forEach(r=>{let e=cx(...r);Jf[e.code]=e,Fs[e.name]=e});function cx(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function J(r){if(typeof r=="number"){if(Jf[r]!=null)return Jf[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Fs[r]!=null)return Fs[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var HP=J("ip4"),qP=J("ip6"),WP=J("ipcidr");function th(r,e){switch(J(r).code){case 4:case 41:return ux(e);case 42:return b4(e);case 6:case 273:case 33:case 132:return v4(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return b4(e);case 421:return px(e);case 444:return x4(e);case 445:return x4(e);case 466:return hx(e);default:return P(e,"base16")}}function rh(r,e){switch(J(r).code){case 4:return w4(e);case 41:return w4(e);case 42:return E4(e);case 6:case 273:case 33:case 132:return nh(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return E4(e);case 421:return dx(e);case 444:return mx(e);case 445:return gx(e);case 466:return fx(e);default:return B(e,"base16")}}var eh=Object.values(pr).map(r=>r.decoder),lx=function(){let r=eh[0].or(eh[1]);return eh.slice(2).forEach(e=>r=r.or(e)),r}();function w4(r){if(!Nc(r))throw new Error("invalid ip address");return Zf(r)}function ux(r){let e=y4(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!Nc(e))throw new Error("invalid ip address");return e}function nh(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function v4(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function E4(r){let e=B(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function b4(r){let e=Lt(r);if(r=r.slice(Ne(e)),r.length!==e)throw new Error("inconsistent lengths");return P(r)}function dx(r){let e;r[0]==="Q"||r[0]==="1"?e=Pr(Ge.decode(`z${r}`)).bytes:e=ce.parse(r).multihash.bytes;let t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function fx(r){let e=lx.decode(r),t=Uint8Array.from(Ve(e.length));return ve([t,e],t.length+e.length)}function hx(r){let e=Lt(r),t=r.slice(Ne(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+P(t,"base64url")}function px(r){let e=Lt(r),t=r.slice(Ne(e));if(t.length!==e)throw new Error("inconsistent lengths");return P(t,"base58btc")}function mx(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=ct.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=nh(n);return ve([t,o],t.length+o.length)}function gx(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=ct.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=nh(n);return ve([t,o],t.length+o.length)}function x4(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=P(e,"base32"),o=v4(t);return`${n}:${o}`}function R4(r){r=oh(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 s=0;s<o.length;s++){let i=o[s],a=J(i);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(s++,s>=o.length)throw _4("invalid address: "+r);if(a.path===!0){n=oh(o.slice(s).join("/")),e.push([a.code,rh(a.code,n)]),t.push([a.code,n]);break}let c=rh(a.code,o[s]);e.push([a.code,c]),t.push([a.code,th(a.code,c)])}return{string:S4(t),bytes:ih(e),tuples:e,stringTuples:t,path:n}}function sh(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let s=Lt(r,o),i=Ne(s),a=J(s),c=yx(a,r.slice(o+i));if(c===0){e.push([s]),t.push([s]),o+=i;continue}let l=r.slice(o+i,o+i+c);if(o+=c+i,o>r.length)throw _4("Invalid address Uint8Array: "+P(r,"base16"));e.push([s,l]);let d=th(s,l);if(t.push([s,d]),a.path===!0){n=d;break}}return{bytes:Uint8Array.from(r),string:S4(t),tuples:e,stringTuples:t,path:n}}function S4(r){let e=[];return r.map(t=>{let n=J(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),oh(e.join("/"))}function ih(r){return ve(r.map(e=>{let t=J(e[0]),n=Uint8Array.from(Ve(t.code));return e.length>1&&e[1]!=null&&(n=ve([n,e[1]])),n}))}function yx(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=Lt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ne(t)}}function oh(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}function _4(r){return new Error("Error parsing address: "+r)}var wx=Symbol.for("nodejs.util.inspect.custom"),ah=Symbol.for("@multiformats/js-multiaddr/multiaddr"),Ex=[J("dns").code,J("dns4").code,J("dns6").code,J("dnsaddr").code],Bc=class r{bytes;#e;#t;#r;#i;[ah]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=sh(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=R4(e)}else if(Jn(e))t=sh(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.#i=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,s="",i=J("tcp"),a=J("udp"),c=J("ip4"),l=J("ip6"),d=J("dns6"),u=J("ip6zone");for(let[g,h]of this.stringTuples())g===u.code&&(s=`%${h??""}`),Ex.includes(g)&&(t=i.name,o=443,n=`${h??""}${s}`,e=g===d.code?6:4),(g===i.code||g===a.code)&&(t=J(g).name,o=parseInt(h??"")),(g===c.code||g===l.code)&&(t=J(g).name,n=`${h??""}${s}`,e=g===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({},J(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>J(e).name)}tuples(){return this.#t}stringTuples(){return this.#r}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(ih(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Fs.p2p.code&&e.push([n,o]),n===Fs["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?P(Ge.decode(`z${n}`),"base58btc"):P(ce.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#i}equals(e){return j(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(s=>s.resolvable);if(t==null)return[this];let n=Vs.get(t.name);if(n==null)throw new m(`no available resolver for ${t.name}`,"ERR_NO_AVAILABLE_RESOLVER");return(await n(this,e)).map(s=>X(s))}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)}[wx](){return`Multiaddr(${this.#e})`}};var Vs=new Map;function Jn(r){return!!r?.[ah]}function X(r){return new Bc(r)}var bx=r=>r.toString().split("/").slice(1),na=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Se=r=>({match:e=>na(t=>t===r).match(e),pattern:r}),Fc=()=>({match:r=>na(e=>typeof e=="string").match(r),pattern:"{string}"}),Vc=()=>({match:r=>na(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),wt=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Ge.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Uc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Lf.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Bt=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Xt=(...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(", ")})`}),Pe=(...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 tt(...r){function e(o){let s=bx(o);for(let i of r){let a=i.match(s);if(a===!1)return!1;s=a}return s}function t(o){return e(o)!==!1}function n(o){let s=e(o);return s===!1?!1:s.length===0}return{matches:t,exactMatch:n}}var lh=Pe(Se("dns4"),Fc()),uh=Pe(Se("dns6"),Fc()),dh=Pe(Se("dnsaddr"),Fc()),A4=Pe(Se("dns"),Fc()),bO=tt(lh),xO=tt(uh),vO=tt(dh),Kc=tt(Xt(A4,dh,lh,uh)),I4=Pe(Se("ip4"),na(Os)),D4=Pe(Se("ip6"),na(Ls)),T4=Xt(I4,D4),nn=Xt(T4,A4,lh,uh,dh),k4=tt(nn),RO=tt(I4),SO=tt(D4),C4=tt(T4),$c=Pe(nn,Se("tcp"),Vc()),oa=Pe(nn,Se("udp"),Vc()),xx=Xt($c,oa),_O=tt($c),AO=tt(oa),fh=Pe(oa,Se("quic")),Hc=Pe(oa,Se("quic-v1")),vx=Xt(fh,Hc),IO=tt(fh),DO=tt(Hc),ch=Xt(nn,$c,oa,fh,Hc),N4=Xt(Pe(ch,Se("ws"),Bt(wt()))),TO=tt(N4),P4=Xt(Pe(ch,Se("wss"),Bt(wt())),Pe(ch,Se("tls"),Se("ws"),Bt(wt()))),kO=tt(P4),O4=Pe(xx,Se("webrtc-direct"),Uc(),Bt(Uc()),Bt(wt())),L4=tt(O4),B4=Pe(Hc,Se("webtransport"),Uc(),Uc(),Bt(wt())),qc=tt(B4),Mc=Xt(N4,P4,Pe($c,Bt(wt())),Pe(vx,Bt(wt())),Pe(nn,Bt(wt())),O4,B4,wt()),CO=tt(Mc),Rx=Pe(Mc,Se("p2p-circuit"),wt()),wn=tt(Rx),Sx=Xt(Pe(Mc,Se("p2p-circuit"),Se("webrtc"),wt()),Pe(Mc,Se("webrtc"),Bt(wt())),Se("webrtc")),U4=tt(Sx),_x=Xt(Pe(nn,Se("tcp"),Vc(),Se("http"),Bt(wt())),Pe(nn,Se("http"),Bt(wt()))),M4=tt(_x),Ax=Xt(Pe(nn,Se("tcp"),Xt(Pe(Se("443"),Se("http")),Pe(Vc(),Se("https"))),Bt(wt())),Pe(nn,Se("tls"),Se("http"),Bt(wt())),Pe(nn,Se("https"),Bt(wt()))),F4=tt(Ax);var i8=Ye(hh(),1);function Fx(r){return r[Symbol.asyncIterator]!=null}function Vx(r){if(Fx(r))return(async()=>{for await(let e of r);})();for(let e of r);}var mr=Vx;var W4=Symbol.for("@achingbrain/uint8arraylist");function q4(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 zc(r){return!!r?.[W4]}var ue=class r{bufs;length;[W4]=!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(zc(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(zc(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=q4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=q4(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(zc(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 ve(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ve(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),s=new r;return s.length=o,s.bufs=[...n],s}_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 s=0;s<this.bufs.length;s++){let i=this.bufs[s],a=o,c=a+i.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,d=t>a&&t<=c;if(l&&d){if(e===a&&t===c){n.push(i);break}let u=e-a;n.push(i.subarray(u,u+(t-e)));break}if(l){if(e===0){n.push(i);continue}n.push(i.subarray(e-a));continue}if(d){if(t===c){n.push(i);break}n.push(i.subarray(0,t-a));break}n.push(i)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!zc(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 s=256,i=new Int32Array(s);for(let u=0;u<s;u++)i[u]=-1;for(let u=0;u<o;u++)i[n[u]]=u;let a=i,c=this.byteLength-n.byteLength,l=n.byteLength-1,d;for(let u=t;u<=c;u+=d){d=0;for(let f=l;f>=0;f--){let g=this.get(u+f);if(n[f]!==g){d=Math.max(1,f-a[g]);break}}if(d===0)return u}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=ze(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=Ce(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=Ce(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=Ce(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=ze(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=Ce(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=Ce(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=Ce(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=Ce(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=Ce(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,s)=>o+s.byteLength,0)),n.length=t,n}};function Yc(r){return r[Symbol.asyncIterator]!=null}var Qc=r=>{let e=Ne(r),t=ze(e);return Ve(r,t),Qc.bytes=e,t};Qc.bytes=0;function gr(r,e){e=e??{};let t=e.lengthEncoder??Qc;function*n(o){let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return Yc(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}gr.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Qc;return new ue(t(r.byteLength),r)};var qs=Ye(Wo(),1);var $x=8,Hx=1024*1024*4,Go;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Go||(Go={}));var ph=r=>{let e=Lt(r);return ph.bytes=Ne(e),e};ph.bytes=0;function Kt(r,e){let t=new ue,n=Go.LENGTH,o=-1,s=e?.lengthDecoder??ph,i=e?.maxLengthLength??$x,a=e?.maxDataLength??Hx;function*c(){for(;t.byteLength>0;){if(n===Go.LENGTH)try{if(o=s(t),o<0)throw(0,qs.default)(new Error("invalid message length"),"ERR_INVALID_MSG_LENGTH");if(o>a)throw(0,qs.default)(new Error("message length too long"),"ERR_MSG_DATA_TOO_LONG");let l=s.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Go.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>i)throw(0,qs.default)(new Error("message length length too long"),"ERR_MSG_LENGTH_TOO_LONG");break}throw l}if(n===Go.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Go.LENGTH}}}return Yc(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,qs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw(0,qs.default)(new Error("unexpected end of input"),"ERR_UNEXPECTED_EOF")}()}Kt.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:s,value:i}=await r.next(t);if(s===!0)return;i!=null&&(yield i)}catch(s){if(s.code==="ERR_UNDER_READ")return{done:!0,value:null};throw s}finally{t=1}}();return Kt(n,{...e??{},onLength:s=>{t=s}})};var mh=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[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=Z(),e}async throw(e){return this.ended=!0,e!=null&&this.haveNext.reject(e),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");if(this.nextResult!=null&&(await this.readNext.promise,this.nextResult!=null))throw new Error("NeedNext promise resolved but nextResult was not consumed");e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=Z(),await Ot(this.readNext.promise,t?.signal,t)}};function Y4(){return new mh}var jc=class extends Error{code;constructor(e,t){super(e),this.code=t}},gh=class extends jc{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted"}};function Q4(r,e){let t=Y4();r.sink(t).catch(async i=>{await t.end(i)}),r.sink=async i=>{for await(let a of i)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 ue;return{read:async(i,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((d,u)=>{c=()=>{u(new gh("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(i==null){let{done:u,value:f}=await Promise.race([n.next(),l]);return u===!0?new ue:f}for(;o.byteLength<i;){let{value:u,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new jc("unexpected end of input","ERR_UNEXPECTED_EOF");o.append(u)}let d=o.sublist(0,i);return o.consume(i),d}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(i,a)=>{a?.signal?.throwIfAborted(),i instanceof Uint8Array?await t.push(i,a):await t.push(i.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let i=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*i}()}return r}}}var Zc=class extends Error{code;constructor(e,t){super(e),this.code=t}};function yr(r,e={}){let t=Q4(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ne(e.maxDataLength));let n=e?.lengthDecoder??Lt,o=e?.lengthEncoder??Ve;return{read:async i=>{let a=-1,c=new ue;for(;;){c.append(await t.read(1,i));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Zc("message length length too long","ERR_MSG_LENGTH_TOO_LONG");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Zc("message length too long","ERR_MSG_DATA_TOO_LONG");return t.read(a,i)},write:async(i,a)=>{await t.write(new ue(o(i.byteLength),i),a)},writeV:async(i,a)=>{let c=new ue(...i.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function qx(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 Ws=qx;function Wx(r){return r[Symbol.asyncIterator]!=null}function Gx(r,e){if(Wx(r))return async function*(){for await(let a of r)yield e(a)}();let t=Ws(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){yield await s;for await(let a of t)yield e(a)}();let i=e;return function*(){yield s;for(let a of t)yield i(a)}()}var Et=Gx;function zx(r){return r[Symbol.asyncIterator]!=null}function Yx(...r){let e=[];for(let t of r)zx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=dt({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var bt=Yx;function Ke(r,...e){if(r==null)throw new Error("Empty pipeline");if(yh(r)){let n=r;r=()=>n.source}else if(j4(r)||X4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&yh(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++)yh(t[n])&&(t[n]=Xx(t[n]));return Qx(...t)}var Qx=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},X4=r=>r?.[Symbol.asyncIterator]!=null,j4=r=>r?.[Symbol.iterator]!=null,yh=r=>r==null?!1:r.sink!=null&&r.source!=null,Xx=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=dt({objectMode:!0});t.then(()=>{n.end()},i=>{n.end(i)});let o,s=r.source;if(X4(s))o=async function*(){yield*s,n.end()};else if(j4(s))o=function*(){yield*s,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return bt(n,o())}return r.source};function jx(r){return r[Symbol.asyncIterator]!=null}function Zx(r,e){return jx(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 eo=Zx;var me=class extends Event{constructor(e,t){super(e),this.detail=t}};var sa="/ipfs/bitswap/1.2.0";var wh=new Float32Array([-0]),to=new Uint8Array(wh.buffer);function Z4(r,e,t){wh[0]=r,e[t]=to[0],e[t+1]=to[1],e[t+2]=to[2],e[t+3]=to[3]}function J4(r,e){return to[0]=r[e],to[1]=r[e+1],to[2]=r[e+2],to[3]=r[e+3],wh[0]}var Eh=new Float64Array([-0]),Ct=new Uint8Array(Eh.buffer);function e8(r,e,t){Eh[0]=r,e[t]=Ct[0],e[t+1]=Ct[1],e[t+2]=Ct[2],e[t+3]=Ct[3],e[t+4]=Ct[4],e[t+5]=Ct[5],e[t+6]=Ct[6],e[t+7]=Ct[7]}function t8(r,e){return Ct[0]=r[e],Ct[1]=r[e+1],Ct[2]=r[e+2],Ct[3]=r[e+3],Ct[4]=r[e+4],Ct[5]=r[e+5],Ct[6]=r[e+6],Ct[7]=r[e+7],Eh[0]}var Jx=BigInt(Number.MAX_SAFE_INTEGER),ev=BigInt(Number.MIN_SAFE_INTEGER),Zt=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return zo;if(e<Jx&&e>ev)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>r8&&(o=0n,++n>r8&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return zo;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):zo}},zo=new Zt(0,0);zo.toBigInt=function(){return 0n};zo.zzEncode=zo.zzDecode=function(){return this};zo.length=function(){return 1};var r8=4294967296n;function n8(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 o8(r,e,t){if(t-e<1)return"";let o,s=[],i=0,a;for(;e<t;)a=r[e++],a<128?s[i++]=a:a>191&&a<224?s[i++]=(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,s[i++]=55296+(a>>10),s[i++]=56320+(a&1023)):s[i++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,i>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,s)),i=0);return o!=null?(i>0&&o.push(String.fromCharCode.apply(String,s.slice(0,i))),o.join("")):String.fromCharCode.apply(String,s.slice(0,i))}function bh(r,e,t){let n=t,o,s;for(let i=0;i<r.length;++i)o=r.charCodeAt(i),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((s=r.charCodeAt(i+1))&64512)===56320?(o=65536+((o&1023)<<10)+(s&1023),++i,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 Or(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Jc(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var xh=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,Or(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 Or(this,4);return Jc(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Or(this,4);return Jc(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Or(this,4);let e=J4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Or(this,4);let e=t8(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 Or(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return o8(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Or(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Or(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new Zt(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 Or(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 Or(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 Or(this,8);let e=Jc(this.buf,this.pos+=4),t=Jc(this.buf,this.pos+=4);return new Zt(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=jf(this.buf,this.pos);return this.pos+=Ne(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 vh(r){return new xh(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=vh(r);return e.decode(n,void 0,t)}function Rh(r){let e=r??8192,t=e>>>1,n,o=e;return function(i){if(i<1||i>t)return ze(i);o+i>e&&(n=ze(e),o=0);let a=n.subarray(o,o+=i);return o&7&&(o=(o|7)+1),a}}var Yo=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function Sh(){}var Ah=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},tv=Rh();function rv(r){return globalThis.Buffer!=null?ze(r):tv(r)}var aa=class{len;head;tail;states;constructor(){this.len=0,this.head=new Yo(Sh,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new Yo(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new Ih((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(el,10,Zt.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Zt.fromBigInt(e);return this._push(el,t.length(),t)}uint64Number(e){return this._push(Xf,Ne(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=Zt.fromBigInt(e).zzEncode();return this._push(el,t.length(),t)}sint64Number(e){let t=Zt.fromNumber(e).zzEncode();return this._push(el,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(_h,1,e?1:0)}fixed32(e){return this._push(ia,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Zt.fromBigInt(e);return this._push(ia,4,t.lo)._push(ia,4,t.hi)}fixed64Number(e){let t=Zt.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(Z4,4,e)}double(e){return this._push(e8,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(_h,1,0):this.uint32(t)._push(ov,t,e)}string(e){let t=n8(e);return t!==0?this.uint32(t)._push(bh,t,e):this._push(_h,1,0)}fork(){return this.states=new Ah(this),this.head=this.tail=new Yo(Sh,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 Yo(Sh,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=rv(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function _h(r,e,t){e[t]=r&255}function nv(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var Ih=class extends Yo{next;constructor(e,t){super(nv,e,t),this.next=void 0}};function el(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 ov(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(aa.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(sv,e,r),this},aa.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(iv,e,r),this});function sv(r,e,t){e.set(r,t)}function iv(r,e,t){r.length<40?bh(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(B(r),t)}function Dh(){return new aa}function re(r,e){let t=Dh();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Gs;(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"})(Gs||(Gs={}));function tl(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function $e(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(s,i){let a=e(s);i.int32(a)},n=function(s){let i=s.int32();return e(i)};return tl("enum",Gs.VARINT,t,n)}function ne(r,e){return tl("message",Gs.LENGTH_DELIMITED,r,e)}var ca=class extends Error{code;constructor(e,t,n){super(e,n),this.code=t}};var rt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(rt||(rt={}));var Th;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Th||(Th={}));(function(r){r.codec=()=>$e(Th)})(rt||(rt={}));var rl;(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),rt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={cid:Ce(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.priority=t.int32();break}case 3:{o.cancel=t.bool();break}case 4:{o.wantType=rt.codec().decode(t);break}case 5:{o.sendDontHave=t.bool();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(rl||(rl={}));var nl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let s of t.entries)n.uint32(10),rl.codec().encode(s,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.entries.push(rl.codec().decode(t,t.uint32()));break}case 2:{o.full=t.bool();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(nl||(nl={}));var ol;(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)=>{let o={prefix:Ce(0),data:Ce(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.prefix=t.bytes();break}case 2:{o.data=t.bytes();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(ol||(ol={}));var wr;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(wr||(wr={}));var sl;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})(sl||(sl={}));(function(r){r.codec=()=>$e(sl)})(wr||(wr={}));var il;(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&&sl[t.type]!==0&&(n.uint32(16),wr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={cid:Ce(0),type:wr.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.type=wr.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(il||(il={}));var la;(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),nl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let s of t.blocks)n.uint32(26),ol.codec().encode(s,n);if(t.blockPresences!=null)for(let s of t.blockPresences)n.uint32(34),il.codec().encode(s,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.wantlist=nl.codec().decode(t,t.uint32());break}case 3:{o.blocks.push(ol.codec().decode(t,t.uint32()));break}case 4:{o.blockPresences.push(il.codec().decode(t,t.uint32()));break}case 5:{o.pendingBytes=t.int32();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(la||(la={}));i8.default.formatters.B=r=>r==null?"undefined":JSON.stringify({blocks:r.blocks?.map(e=>({data:`${P(e.data,"base64").substring(0,10)}...`,prefix:P(e.prefix,"base64")})),blockPresences:r.blockPresences?.map(e=>({...e,cid:ce.decode(e.cid).toString()})),wantlist:r.wantlist==null?void 0:{full:r.wantlist.full,entries:r.wantlist.entries.map(e=>({...e,cid:ce.decode(e.cid).toString()}))}},null,2);var al=class extends xe{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;messageSendTimeout;runOnTransientConnections;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[sa],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.messageSendTimeout=t.messageSendTimeout??5e3,this.runOnTransientConnections=t.runOnTransientConnections??!1,this.metrics={blocksSent:e.libp2p.metrics?.registerCounter("ipfs_bitswap_sent_blocks_total"),dataSent:e.libp2p.metrics?.registerCounter("ipfs_bitswap_sent_data_bytes_total")},this.sendQueue=new Vt({concurrency:t.messageSendConcurrency??50,metrics:e.libp2p.metrics,metricName:"ipfs_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,runOnTransientConnection:this.runOnTransientConnections});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.abort(new m("Incoming Bitswap stream timed out","ERR_TIMEOUT"))},s=AbortSignal.timeout(this.messageReceiveTimeout);ee(1/0,s),s.addEventListener("abort",o),await Ke(t,i=>Kt(i),async i=>{for await(let a of i)try{let c=la.decode(a);this.log("incoming new bitswap %s message from %p %B",t.protocol,n.remotePeer,c),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),s.removeEventListener("abort",o),s=AbortSignal.timeout(this.messageReceiveTimeout),ee(1/0,s),s.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p",n.remotePeer,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 me("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t)){if(!this.runOnTransientConnections){let o=!1;for(let s of n.multiaddrs)if(s.getPeerId()==null&&(s=s.encapsulate(`/p2p/${n.id}`)),!wn.exactMatch(s)){o=!0;break}if(!o)continue}n.protocols?.includes("transport-bitswap")!==!1&&(yield n)}}async findAndConnect(e,t){await mr(Et(eo(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={wantlist:{full:t.wantlist?.full??!1,entries:t.wantlist?.entries??[]},blocks:t.blocks??[],blockPresences:t.blockPresences??[],pendingBytes:t.pendingBytes??0},s=ot([AbortSignal.timeout(this.messageSendTimeout),n?.signal]);ee(1/0,s);try{let i=this.sendQueue.queue.find(a=>e.equals(a.options.peerId)&&a.status==="queued");if(i!=null){i.options.message=pv(i.options.message,o),await i.join({signal:s});return}await this.sendQueue.add(async a=>{let c=a?.message;if(c==null)throw new m("No message to send","ERR_NO_MESSAGE");this.log("sendMessage to %p %B",e,c),a?.onProgress?.(new me("bitswap:network:send-wantlist",e));let l=await this.libp2p.dialProtocol(e,sa,a);try{let d=yr(l);await d.write(la.encode(c),a),await d.unwrap().close(a)}catch(d){a?.onProgress?.(new me("bitswap:network:send-wantlist:error",{peer:e,error:d})),this.log.error("error sending message to %p",e,d),l.abort(d)}this._updateSentStats(c.blocks)},{peerId:e,signal:s,message:o})}finally{s.clear()}}async connectTo(e,t){if(!this.running)throw new m("Network isn't running","ERR_NOT_STARTED");t?.onProgress?.(new me("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),rn(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(sa))return!0;throw new m(`${e} did not support ${sa}`,"ERR_BITSWAP_UNSUPPORTED_BY_PEER")}})]);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.length)}};function pv(r,e){let t=new Map((r.wantlist?.entries??[]).map(i=>[lt.encode(i.cid),i]));for(let i of e.wantlist?.entries??[]){let a=lt.encode(i.cid),c=t.get(a);c!=null&&(c.priority>i.priority&&(i.priority=c.priority),i.cancel=i.cancel??c.cancel,i.wantType=i.wantType??c.wantType,i.sendDontHave=i.sendDontHave??c.sendDontHave),t.set(a,i)}let n=new Map(r.blockPresences.map(i=>[lt.encode(i.cid),i]));for(let i of e.blockPresences){let a=lt.encode(i.cid);n.set(a,i)}let o=new Map(r.blocks.map(i=>[lt.encode(i.data),i]));for(let i of e.blocks){let a=lt.encode(i.data);o.set(a,i)}return{wantlist:{full:r.wantlist?.full??e.wantlist?.full??!1,entries:[...t.values()]},blockPresences:[...n.values()],blocks:[...o.values()],pendingBytes:r.pendingBytes+e.pendingBytes}}var mv=Symbol.for("nodejs.util.inspect.custom"),a8=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e),pr.identity.decoder),c8=114,kh=36,Ch=37,ua=class{type;multihash;privateKey;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,this.privateKey=e.privateKey,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[mf]=!0;toString(){return this.string==null&&(this.string=Ge.encode(this.multihash.bytes).slice(1)),this.string}toCID(){return ce.createV1(c8,this.multihash)}toBytes(){return this.multihash.bytes}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 ge(e).equals(this);if(e?.multihash?.bytes!=null)return j(this.multihash.bytes,e.multihash.bytes);throw new Error("not valid Id")}[mv](){return`PeerId(${this.toString()})`}},Qo=class extends ua{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Xo=class extends ua{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.multihash.digest}},jo=class extends ua{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.multihash.digest}};function l8(r){if(r.type==="RSA")return new Qo(r);if(r.type==="Ed25519")return new Xo(r);if(r.type==="secp256k1")return new jo(r);throw new m("Not a PeerId","ERR_INVALID_PARAMETERS")}function ge(r,e){if(e=e??a8,r.charAt(0)==="1"||r.charAt(0)==="Q"){let t=Pr(Ge.decode(`z${r}`));return r.startsWith("12D")?new Xo({multihash:t}):r.startsWith("16U")?new jo({multihash:t}):new Qo({multihash:t})}return Xe(a8.decode(r))}function Xe(r){try{let e=Pr(r);if(e.code===hr.code){if(e.digest.length===kh)return new Xo({multihash:e});if(e.digest.length===Ch)return new jo({multihash:e})}if(e.code===De.code)return new Qo({multihash:e})}catch{return gv(ce.decode(r))}throw new Error("Supplied PeerID CID is invalid")}function gv(r){if(r==null||r.multihash==null||r.version==null||r.version===1&&r.code!==c8)throw new Error("Supplied PeerID CID is invalid");let e=r.multihash;if(e.code===De.code)return new Qo({multihash:r.multihash});if(e.code===hr.code){if(e.digest.length===kh)return new Xo({multihash:r.multihash});if(e.digest.length===Ch)return new jo({multihash:r.multihash})}throw new Error("Supplied PeerID CID is invalid")}async function ft(r,e){return r.length===kh?new Xo({multihash:Nr(hr.code,r),privateKey:e}):r.length===Ch?new jo({multihash:Nr(hr.code,r),privateKey:e}):new Qo({multihash:await De.digest(r),publicKey:r,privateKey:e})}function zs(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}var st=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),n)}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return zs(this.map.entries(),e=>[ge(e[0]),e[1]])}forEach(e){this.map.forEach((t,n)=>{e(t,ge(n),this)})}get(e){return this.map.get(e.toString())}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),t)}keys(){return zs(this.map.keys(),e=>ge(e))}values(){return this.map.values()}get size(){return this.map.size}};var je=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 zs(this.set.entries(),e=>{let t=ge(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=ge(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return zs(this.set.values(),e=>ge(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}};var Nh=class extends st{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function da(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Nh({name:e,metrics:t}):n=new st,n}function wv(r){let e=new Uint8Array(r.reduce((n,o)=>n+Ne(o),0)),t=0;for(let n of r)e=Ve(n,e,t),t+=Ne(n);return e}var u8=wv;function Ph(r){return u8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var cl=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,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={blockPresences:[],blocks:[]},n=new Set;for(let[o,s]of this.wants.entries()){if(!await this.blockstore.has(s.cid,e)){if(!s.sendDontHave||s.sentDontHave===!0)continue;s.sentDontHave=!0,t.blockPresences.push({cid:s.cid.bytes,type:wr.DontHaveBlock});continue}let a=await this.blockstore.get(s.cid,e);s.wantType===rt.WantHave?a.byteLength<this.maxSizeReplaceHasWithBlock?(n.add(o),t.blocks.push({data:a,prefix:Ph(s.cid)})):t.blockPresences.push({cid:s.cid.bytes,type:wr.HaveBlock}):(n.add(o),t.blocks.push({data:a,prefix:Ph(s.cid)}))}if(t.blocks.length>0||t.blockPresences.length>0){await this.network.sendMessage(this.peerId,t,e),this.sentBytes(t.blocks.reduce((o,s)=>o+s.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var ll=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;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.ledgerMap=da({name:"ipfs_bitswap_ledger_map",metrics:e.libp2p.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 cl({peerId:e,blockstore:this.blockstore,network:this.network},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,s)=>o+s.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let s=ce.decode(o.cid),i=P(s.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,s),n.wants.delete(i)):(o.wantType===rt.WantHave?this.log("peer %p wanted block presence for %c",e,s):this.log("peer %p wanted block for %c",e,s),n.wants.set(i,{cid:s,priority:o.priority,wantType:o.wantType??rt.WantBlock,sendDontHave:o.sendDontHave??!1}))}}await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=P(e.multihash.bytes,"base64"),o=[];for(let s of this.ledgerMap.values())s.wants.has(n)&&o.push(s);await Promise.all(o.map(async s=>s.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var Oh=class{root;peers;log;wantList;network;queue;maxProviders;constructor(e,t){this.peers=new je,this.root=t.root,this.maxProviders=t.maxProviders,this.log=e.logger.forComponent(`helia:bitswap:session:${t.root}`),this.wantList=e.wantList,this.network=e.network,this.queue=new Vt({concurrency:t.queryConcurrency}),this.queue.addEventListener("error",n=>{this.log.error("error querying peer for %c",this.root,n.detail)})}async want(e,t={}){if(this.peers.size===0)throw new m("Bitswap session had no peers","ERR_NO_SESSION_PEERS");this.log("sending WANT-BLOCK for %c to",e,this.peers);let n=await Promise.any([...this.peers].map(async o=>this.wantList.wantBlock(e,{peerId:o,...t})));return this.log("received block for %c from %p",e,n.sender),n.block}async findNewProviders(e,t,n={}){let o=Z(),s=0;this.log("find %d-%d new provider(s) for %c",t,this.maxProviders,e);let i=bt([...this.wantList.peers.keys()],Et(this.network.findProviders(e,n),a=>a.id));return Promise.resolve().then(async()=>{for await(let a of i){if(s===this.maxProviders){this.queue.clear();break}await this.queue.add(async()=>{try{if(this.log("asking potential session peer %p if they have %c",a,e),!(await this.wantList.wantPresence(e,{peerId:a,...n})).has){this.log("potential session peer %p did not have %c",a,e);return}this.log("potential session peer %p had %c",a,e),s++,this.peers.add(a),s===t&&(this.log("found %d session peers",s),o.resolve()),s===this.maxProviders&&(this.log("found max provider session peers",s),this.queue.clear())}catch(c){this.log.error("error querying potential session peer %p for %c",a,e,c.errors??c)}},{peerId:a})}this.log("found %d session peers total",s),t>0&&o.reject(new m(`Found ${s} of ${t} providers`,"ERR_NO_PROVIDERS_FOUND"))}),o.promise}};async function d8(r,e){let t=new Oh(r,e);return await t.findNewProviders(e.root,e.minProviders,{signal:e.signal}),t}var ul=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_received_blocks"),this.duplicateBlocksReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_duplicate_received_blocks"),this.dataReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_bitswap_data_received_bytes"),this.duplicateDataReceived=e.libp2p.metrics?.registerMetricGroup("ipfs_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 Lh=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 dl(r){let{name:e,metrics:t}=r,n;return t!=null?n=new Lh({name:e,metrics:t}):n=new Map,n}function Ev(r){return r[Symbol.asyncIterator]!=null}function bv(r){if(Ev(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 ro=bv;function xv(r){return r[Symbol.asyncIterator]!=null}function vv(r,e){if(xv(r))return async function*(){for await(let a of r)await e(a)&&(yield a)}();let t=Ws(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();let s=e(n);if(typeof s.then=="function")return async function*(){await s&&(yield n);for await(let a of t)await e(a)&&(yield a)}();let i=e;return function*(){s===!0&&(yield n);for(let a of t)i(a)&&(yield a)}()}var Ut=vv;function Rv(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=Lt(r);e.push(t),r=r.slice(Ne(t))}return e}var f8=Rv;var fl=class extends xe{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),ee(1/0,this),this.peers=da({name:"ipfs_bitswap_peers",metrics:e.libp2p.metrics}),this.wants=dl({name:"ipfs_bitswap_wantlist",metrics:e.libp2p.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=P(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,session:new je,priority:t.priority??1,wantType:t.wantType??rt.WantBlock,cancel:!1,sendDontHave:!0},t.peerId!=null&&o.session.add(t.peerId),this.wants.set(n,o)),o.wantType===rt.WantHave&&t.wantType===rt.WantBlock&&(o.wantType=rt.WantBlock),o.session.size>0&&(t.peerId!=null&&o.session.add(t.peerId),t.peerId==null&&o.session.clear()),await this.sendMessagesDebounced();try{return t.wantType===rt.WantBlock?(await rn(this,"block",t?.signal,{filter:a=>j(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await rn(this,"presence",t?.signal,{filter:i=>j(e.multihash.digest,i.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=Z(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o={wantlist:{full:!1,entries:Ke(this.wants.entries(),s=>Ut(s,([i,a])=>{if(a.session.size>0&&!a.session.has(e))return!1;let c=t.has(i);return a.cancel?c:!c}),s=>Et(s,([i,a])=>(n.add(i),{cid:a.cid.bytes,priority:a.priority,wantType:a.wantType,cancel:a.cancel,sendDontHave:a.sendDontHave})),s=>ro(s))}};if(o.wantlist?.entries.length!==0)try{await this.network.sendMessage(e,o);for(let s of n)t.add(s)}catch(s){this.log.error("error sending full wantlist to new peer",s)}})).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=P(e.multihash.bytes,"base64");return this.wants.has(t)}async wantPresence(e,t={}){if(t.peerId!=null){let n=t.peerId;return await this.network.sendMessage(t.peerId,{wantlist:{full:!1,entries:[{cid:e.bytes,sendDontHave:!0,wantType:rt.WantHave,priority:1}]}}),(await rn(this,"presence",t.signal,{filter:s=>n.equals(s.detail.sender)&&j(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}return this.addEntry(e,{...t,wantType:rt.WantHave})}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:rt.WantBlock})}async receivedBlock(e,t){let n=P(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",e);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let s=f8(o.prefix),i=s[0],a=s[1],c=s[2],l=c===De.code?De:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let d=await l.digest(o.data),u=ce.create(i===0?0:1,a,d);this.log("received block from %p for %c",e,u),this.safeDispatchEvent("block",{detail:{sender:e,cid:u,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:u,has:!0,block:o.data}});let f=P(u.multihash.bytes,"base64"),g=this.wants.get(f);if(g==null)return;g.cancel=!0,n=!0}for(let{cid:o,type:s}of t.blockPresences){let i=ce.decode(o);this.log("received %s from %p for %c",s,e,i),this.safeDispatchEvent("presence",{detail:{sender:e,cid:i,has:s===wr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n={wantlist:{full:!0,entries:Ke(this.wants.entries(),o=>Ut(o,([s,i])=>!i.cancel&&i.session.size>0&&!i.session.has(e)),o=>Ut(o,([s,i])=>!i.cancel),o=>Et(o,([s,i])=>(t.add(s),{cid:i.cid.bytes,priority:1,wantType:rt.WantBlock,cancel:!1,sendDontHave:!1})),o=>ro(o))}};if(n.wantlist?.entries.length===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()}};var hl=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 ul(e),this.network=new al(e,t),this.peerWantLists=new ll({...e,network:this.network},t),this.wantList=new fl({...e,network:this.network},t)}async createSession(e,t){let n=t?.minProviders??1,o=t?.maxProviders??5;return d8({wantList:this.wantList,network:this.network,logger:this.logger},{root:e,queryConcurrency:t?.providerQueryConcurrency??5,minProviders:n,maxProviders:o,connectedPeers:t?.queryConnectedPeers!==!1?[...this.wantList.peers.keys()]:[],signal:t?.signal})}async want(e,t={}){let n=new AbortController,o=ot([n.signal,t.signal]);ee(1/0,n.signal,o),this.network.findAndConnect(e,{...t,signal:o}).catch(s=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,s)});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 h8=(r,e={})=>new hl(r,e);var Bh=class{bitswap;started;constructor(e,t={}){let{hashers:n}=e;this.bitswap=h8(e,{hashLoader:{getHasher:async o=>{let s;if(typeof o=="string"?s=Object.values(n).find(i=>i.name===o):s=n[o],s!=null)return s;throw new Error(`Could not load hasher for code/name "${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)}async createSession(e,t){let n=await this.bitswap.createSession(e,t);return{announce:async(o,s,i)=>{await this.bitswap.notify(o,s,i)},retrieve:async(o,s)=>n.want(o,s)}}};function Uh(r={}){return e=>new Bh(e,r)}var m8=Ye(p8(),1),Sv=["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"],_v=Sv.map(r=>new m8.Netmask(r));function Av(r){for(let e of _v)if(e.contains(r))return!0;return!1}function Iv(r){return/^::$/.test(r)||/^::1$/.test(r)||/^::f{4}:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^::f{4}:0.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.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 $t(r){return Os(r)?Av(r):Ls(r)?Iv(r):void 0}var Dv=[J("tcp").code,J("dns").code,J("dnsaddr").code,J("dns4").code,J("dns6").code];function g8(r){let e;try{e=J("sni").code}catch{return null}for(let[t,n]of r)if(t===e&&n!==void 0)return n;return null}function y8(r){return r.some(([e,t])=>e===J("tls").code)}function Jt(r,e,t){let n=w8[J(r).name];if(n===void 0)throw new Error(`Can't interpret protocol ${J(r).name}`);let o=n(e,t);return r===J("ip6").code?`[${o}]`:o}var w8={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`tcp://${Jt(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`udp://${Jt(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/ipfs/${r}`},p2p:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p/${r}`},http:(r,e)=>{let t=y8(e),n=g8(e);if(t&&n!==null)return`https://${n}`;let o=t?"https://":"http://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=Jt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},tls:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Jt(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return Jt(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Jt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=y8(e),n=g8(e);if(t&&n!==null)return`wss://${n}`;let o=t?"wss://":"ws://",s=e.pop();if(s===void 0)throw new Error("Unexpected end of multiaddr");let i=Jt(s[0],s[1]??"",e);return i=i.replace("tcp://",""),`${o}${i}`},wss:(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");let n=Jt(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`},"p2p-websocket-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p-websocket-star`},"p2p-webrtc-star":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p-webrtc-star`},"p2p-webrtc-direct":(r,e)=>{let t=e.pop();if(t===void 0)throw new Error("Unexpected end of multiaddr");return`${Jt(t[0],t[1]??"",e)}/p2p-webrtc-direct`}};function pl(r,e){let n=X(r).stringTuples(),o=n.pop();if(o===void 0)throw new Error("Unexpected end of multiaddr");let s=J(o[0]),i=w8[s.name];if(i==null)throw new Error(`No interpreter found for ${s.name}`);let a=i(o[1]??"",n);return e?.assumeHttp!==!1&&Dv.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var ha=class{url;#e=0;#t=0;#r=0;#i=0;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}async getRawBlock(e,t){let n=this.url;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`);try{this.#e++;let o=await fetch(n.toString(),{signal:t,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"});if(this.log("GET %s %d",n,o.status),!o.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#i++,new Uint8Array(await o.arrayBuffer())}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}`))}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#i/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}};var ml=class r{components;gateways;routing;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.routing=e.routing,this.gateways=(t.gateways??E8).map(n=>new ha(n,e.logger))}addGateway(e){this.gateways.push(new ha(e,this.components.logger))}async retrieve(e,t={}){let n=this.gateways.sort((s,i)=>i.reliability()-s.reliability()),o=[];for(let s of n){this.log("getting block for %c from %s",e,s.url);try{let i=await s.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,s.url);try{await t.validateFn?.(i)}catch(a){throw this.log.error("failed to validate block for %c from %s",e,s.url,a),s.incrementInvalidBlocks(),new Error(`Block for CID ${e} from gateway ${s.url} failed validation`)}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,s.url,i),i instanceof Error?o.push(i):o.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${s.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,s.url);break}}}throw o.length>0?new AggregateError(o,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}async createSession(e,t={}){let n=[],o=t.minProviders??1,s=t.minProviders??5,i=Z(),a=new r(this.components,{gateways:n});this.log("finding transport-ipfs-gateway-http providers for cid %c",e);let c=new Vt({concurrency:t.providerQueryConcurrency??5});return Promise.resolve().then(async()=>{for await(let l of this.routing.findProviders(e,t)){let d=l.multiaddrs.filter(u=>F4.matches(u)||t.allowInsecure===!0&&M4.matches(u)?t.allowLocal===!0||Kc.matches(u)?!0:$t(u.toOptions().host)===!1:!1);d.length!==0&&(this.log("found transport-ipfs-gateway-http provider %p for cid %c",l.id,e),c.add(async()=>{for(let u of d){let f;try{f=pl(u);let g=`${f}/ipfs/${e.toString()}?format=raw`,h=await fetch(g,{method:"HEAD",headers:{Accept:"application/vnd.ipld.raw","Cache-Control":t.cacheControl??"only-if-cached"},signal:AbortSignal.timeout(t.providerQueryTimeout??5e3)});this.log("HEAD %s %d",g,h.status),n.push(f),a.addGateway(f),this.log("found %d transport-ipfs-gateway-http providers for cid %c",n.length,e),n.length===o&&i.resolve(a),n.length===s&&c.clear()}catch(g){this.log.error("could not fetch %c from %a",e,f??u,g)}}}))}}).catch(l=>{this.log.error("error creating session for %c",e,l)}),i.promise}};var E8=["https://trustless-gateway.link","https://cloudflare-ipfs.com","https://4everland.io"];function Mh(r={}){return e=>new ml(e,r)}var er=Ye(hh(),1);er.default.formatters.b=r=>r==null?"undefined":Ge.baseEncode(r);er.default.formatters.t=r=>r==null?"undefined":ct.baseEncode(r);er.default.formatters.m=r=>r==null?"undefined":lt.baseEncode(r);er.default.formatters.p=r=>r==null?"undefined":r.toString();er.default.formatters.c=r=>r==null?"undefined":r.toString();er.default.formatters.k=r=>r==null?"undefined":r.toString();er.default.formatters.a=r=>r==null?"undefined":r.toString();function Tv(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 no(){return{forComponent(r){return tr(r)}}}function tr(r){let e=Tv(`${r}:trace`);return er.default.enabled(`${r}:trace`)&&er.default.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=(0,er.default)(`${r}:trace`)),Object.assign((0,er.default)(r),{error:(0,er.default)(`${r}:error`),trace:e})}async function*gl(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 vu={};pe(vu,{Ed25519PrivateKey:()=>An,Ed25519PublicKey:()=>ns,MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>yo,RsaPublicKey:()=>ss,Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateEphemeralKeyPair:()=>j8,generateKeyPair:()=>Da,generateKeyPairFromSeed:()=>IS,importKey:()=>ci,keyStretcher:()=>r6,keysPBM:()=>ri,marshalPrivateKey:()=>_0,marshalPublicKey:()=>S0,supportedKeys:()=>On,unmarshalPrivateKey:()=>Rr,unmarshalPublicKey:()=>qr});var o0={};pe(o0,{Ed25519PrivateKey:()=>An,Ed25519PublicKey:()=>ns,generateKeyPair:()=>BR,generateKeyPairFromSeed:()=>n0,unmarshalEd25519PrivateKey:()=>OR,unmarshalEd25519PublicKey:()=>LR});function Fh(r,e){let t=B(r,"base64urlpad");if(e!=null){if(t.length>e)throw new Error("byte array longer than desired length");t=ve([new Uint8Array(e-t.length),t])}return t}function Er(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function oo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function kv(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Ys(r,...e){if(!kv(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Zo(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");oo(r.outputLen),oo(r.blockLen)}function Qs(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 b8(r,e){Ys(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var yl=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;var Jo=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Lr=(r,e)=>r<<32-e|r>>>e,wl=(r,e)=>r<<e|r>>>32-e>>>0,wM=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;var Cv=async()=>{};async function x8(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let s=Date.now()-n;s>=0&&s<e||(await Cv(),n+=s)}}function Vh(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Br(r){return typeof r=="string"&&(r=Vh(r)),Ys(r),r}function El(...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 s=r[n];t.set(s,o),o+=s.length}return t}var Xs=class{clone(){return this._cloneInto()}},Nv={}.toString;function v8(r,e){if(e!==void 0&&Nv.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function js(r){let e=n=>r().update(Br(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function es(r=32){if(yl&&typeof yl.getRandomValues=="function")return yl.getRandomValues(new Uint8Array(r));throw new Error("crypto.getRandomValues must be defined")}function Pv(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}var bl=(r,e,t)=>r&e^~r&t,xl=(r,e,t)=>r&e^r&t^e&t,so=class extends Xs{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=Jo(this.buffer)}update(e){Qs(this);let{view:t,buffer:n,blockLen:o}=this;e=Br(e);let s=e.length;for(let i=0;i<s;){let a=Math.min(o-this.pos,s-i);if(a===o){let c=Jo(e);for(;o<=s-i;i+=o)this.process(c,i);continue}n.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Qs(this),b8(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:s}=this,{pos:i}=this;t[i++]=128,this.buffer.subarray(i).fill(0),this.padOffset>o-i&&(this.process(n,0),i=0);for(let u=i;u<o;u++)t[u]=0;Pv(n,o-8,BigInt(this.length*8),s),this.process(n,0);let a=Jo(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<l;u++)a.setUint32(4*u,d[u],s)}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:s,destroyed:i,pos:a}=this;return e.length=o,e.pos=a,e.finished=s,e.destroyed=i,o%t&&e.buffer.set(n),e}};var vl=BigInt(4294967295),Kh=BigInt(32);function R8(r,e=!1){return e?{h:Number(r&vl),l:Number(r>>Kh&vl)}:{h:Number(r>>Kh&vl)|0,l:Number(r&vl)|0}}function Ov(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:s,l:i}=R8(r[o],e);[t[o],n[o]]=[s,i]}return[t,n]}var Lv=(r,e)=>BigInt(r>>>0)<<Kh|BigInt(e>>>0),Bv=(r,e,t)=>r>>>t,Uv=(r,e,t)=>r<<32-t|e>>>t,Mv=(r,e,t)=>r>>>t|e<<32-t,Fv=(r,e,t)=>r<<32-t|e>>>t,Vv=(r,e,t)=>r<<64-t|e>>>t-32,Kv=(r,e,t)=>r>>>t-32|e<<64-t,$v=(r,e)=>e,Hv=(r,e)=>r,qv=(r,e,t)=>r<<t|e>>>32-t,Wv=(r,e,t)=>e<<t|r>>>32-t,Gv=(r,e,t)=>e<<t-32|r>>>64-t,zv=(r,e,t)=>r<<t-32|e>>>64-t;function Yv(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var Qv=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Xv=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,jv=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),Zv=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,Jv=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),eR=(r,e,t,n,o,s)=>e+t+n+o+s+(r/2**32|0)|0;var tR={fromBig:R8,split:Ov,toBig:Lv,shrSH:Bv,shrSL:Uv,rotrSH:Mv,rotrSL:Fv,rotrBH:Vv,rotrBL:Kv,rotr32H:$v,rotr32L:Hv,rotlSH:qv,rotlSL:Wv,rotlBH:Gv,rotlBL:zv,add:Yv,add3L:Qv,add3H:Xv,add4L:jv,add4H:Zv,add5H:eR,add5L:Jv},fe=tR;var[rR,nR]=fe.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))),io=new Uint32Array(80),ao=new Uint32Array(80),$h=class extends so{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:s,Cl:i,Dh:a,Dl:c,Eh:l,El:d,Fh:u,Fl:f,Gh:g,Gl:h,Hh:p,Hl:y}=this;return[e,t,n,o,s,i,a,c,l,d,u,f,g,h,p,y]}set(e,t,n,o,s,i,a,c,l,d,u,f,g,h,p,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=s|0,this.Cl=i|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=d|0,this.Fh=u|0,this.Fl=f|0,this.Gh=g|0,this.Gl=h|0,this.Hh=p|0,this.Hl=y|0}process(e,t){for(let E=0;E<16;E++,t+=4)io[E]=e.getUint32(t),ao[E]=e.getUint32(t+=4);for(let E=16;E<80;E++){let S=io[E-15]|0,_=ao[E-15]|0,A=fe.rotrSH(S,_,1)^fe.rotrSH(S,_,8)^fe.shrSH(S,_,7),D=fe.rotrSL(S,_,1)^fe.rotrSL(S,_,8)^fe.shrSL(S,_,7),R=io[E-2]|0,k=ao[E-2]|0,O=fe.rotrSH(R,k,19)^fe.rotrBH(R,k,61)^fe.shrSH(R,k,6),N=fe.rotrSL(R,k,19)^fe.rotrBL(R,k,61)^fe.shrSL(R,k,6),L=fe.add4L(D,N,ao[E-7],ao[E-16]),F=fe.add4H(L,A,O,io[E-7],io[E-16]);io[E]=F|0,ao[E]=L|0}let{Ah:n,Al:o,Bh:s,Bl:i,Ch:a,Cl:c,Dh:l,Dl:d,Eh:u,El:f,Fh:g,Fl:h,Gh:p,Gl:y,Hh:w,Hl:b}=this;for(let E=0;E<80;E++){let S=fe.rotrSH(u,f,14)^fe.rotrSH(u,f,18)^fe.rotrBH(u,f,41),_=fe.rotrSL(u,f,14)^fe.rotrSL(u,f,18)^fe.rotrBL(u,f,41),A=u&g^~u&p,D=f&h^~f&y,R=fe.add5L(b,_,D,nR[E],ao[E]),k=fe.add5H(R,w,S,A,rR[E],io[E]),O=R|0,N=fe.rotrSH(n,o,28)^fe.rotrBH(n,o,34)^fe.rotrBH(n,o,39),L=fe.rotrSL(n,o,28)^fe.rotrBL(n,o,34)^fe.rotrBL(n,o,39),F=n&s^n&a^s&a,Y=o&i^o&c^i&c;w=p|0,b=y|0,p=g|0,y=h|0,g=u|0,h=f|0,{h:u,l:f}=fe.add(l|0,d|0,k|0,O|0),l=a|0,d=c|0,a=s|0,c=i|0,s=n|0,i=o|0;let I=fe.add3L(O,L,Y);n=fe.add3H(I,k,N,F),o=I|0}({h:n,l:o}=fe.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:s,l:i}=fe.add(this.Bh|0,this.Bl|0,s|0,i|0),{h:a,l:c}=fe.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:d}=fe.add(this.Dh|0,this.Dl|0,l|0,d|0),{h:u,l:f}=fe.add(this.Eh|0,this.El|0,u|0,f|0),{h:g,l:h}=fe.add(this.Fh|0,this.Fl|0,g|0,h|0),{h:p,l:y}=fe.add(this.Gh|0,this.Gl|0,p|0,y|0),{h:w,l:b}=fe.add(this.Hh|0,this.Hl|0,w|0,b|0),this.set(n,o,s,i,a,c,l,d,u,f,g,h,p,y,w,b)}roundClean(){io.fill(0),ao.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 co=js(()=>new $h);var Sl={};pe(Sl,{abytes:()=>Zs,bitGet:()=>uR,bitLen:()=>lR,bitMask:()=>pa,bitSet:()=>dR,bytesToHex:()=>bn,bytesToNumberBE:()=>xn,bytesToNumberLE:()=>Ur,concatBytes:()=>Rn,createHmacDrbg:()=>Wh,ensureBytes:()=>Ue,equalBytes:()=>aR,hexToBytes:()=>ts,hexToNumber:()=>qh,isBytes:()=>lo,numberToBytesBE:()=>uo,numberToBytesLE:()=>vn,numberToHexUnpadded:()=>I8,numberToVarBytesBE:()=>iR,utf8ToBytes:()=>cR,validateObject:()=>br});var A8=BigInt(0),Rl=BigInt(1),oR=BigInt(2);function lo(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Zs(r){if(!lo(r))throw new Error("Uint8Array expected")}var sR=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function bn(r){Zs(r);let e="";for(let t=0;t<r.length;t++)e+=sR[r[t]];return e}function I8(r){let e=r.toString(16);return e.length&1?`0${e}`:e}function qh(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return BigInt(r===""?"0":`0x${r}`)}var En={_0:48,_9:57,_A:65,_F:70,_a:97,_f:102};function S8(r){if(r>=En._0&&r<=En._9)return r-En._0;if(r>=En._A&&r<=En._F)return r-(En._A-10);if(r>=En._a&&r<=En._f)return r-(En._a-10)}function ts(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("padded hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,s=0;o<t;o++,s+=2){let i=S8(r.charCodeAt(s)),a=S8(r.charCodeAt(s+1));if(i===void 0||a===void 0){let c=r[s]+r[s+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+s)}n[o]=i*16+a}return n}function xn(r){return qh(bn(r))}function Ur(r){return Zs(r),qh(bn(Uint8Array.from(r).reverse()))}function uo(r,e){return ts(r.toString(16).padStart(e*2,"0"))}function vn(r,e){return uo(r,e).reverse()}function iR(r){return ts(I8(r))}function Ue(r,e,t){let n;if(typeof e=="string")try{n=ts(e)}catch(s){throw new Error(`${r} must be valid hex string, got "${e}". Cause: ${s}`)}else if(lo(e))n=Uint8Array.from(e);else throw new Error(`${r} must be hex string or Uint8Array`);let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(`${r} expected ${t} bytes, got ${o}`);return n}function Rn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Zs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let s=r[n];t.set(s,o),o+=s.length}return t}function aR(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 cR(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function lR(r){let e;for(e=0;r>A8;r>>=Rl,e+=1);return e}function uR(r,e){return r>>BigInt(e)&Rl}function dR(r,e,t){return r|(t?Rl:A8)<<BigInt(e)}var pa=r=>(oR<<BigInt(r-1))-Rl,Hh=r=>new Uint8Array(r),_8=r=>Uint8Array.from(r);function Wh(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=Hh(r),o=Hh(r),s=0,i=()=>{n.fill(1),o.fill(0),s=0},a=(...u)=>t(o,n,...u),c=(u=Hh())=>{o=a(_8([0]),u),n=a(),u.length!==0&&(o=a(_8([1]),u),n=a())},l=()=>{if(s++>=1e3)throw new Error("drbg: tried 1000 values");let u=0,f=[];for(;u<e;){n=a();let g=n.slice();f.push(g),u+=n.length}return Rn(...f)};return(u,f)=>{i(),c(u);let g;for(;!(g=f(l()));)c();return i(),g}}var fR={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"||lo(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 br(r,e,t={}){let n=(o,s,i)=>{let a=fR[s];if(typeof a!="function")throw new Error(`Invalid validator "${s}", expected function`);let c=r[o];if(!(i&&c===void 0)&&!a(c,r))throw new Error(`Invalid param ${String(o)}=${c} (${typeof c}), expected ${s}`)};for(let[o,s]of Object.entries(e))n(o,s,!1);for(let[o,s]of Object.entries(t))n(o,s,!0);return r}var ut=BigInt(0),He=BigInt(1),rs=BigInt(2),hR=BigInt(3),Gh=BigInt(4),D8=BigInt(5),T8=BigInt(8),pR=BigInt(9),mR=BigInt(16);function _e(r,e){let t=r%e;return t>=ut?t:e+t}function zh(r,e,t){if(t<=ut||e<ut)throw new Error("Expected power/modulo > 0");if(t===He)return ut;let n=He;for(;e>ut;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Me(r,e,t){let n=r;for(;e-- >ut;)n*=n,n%=t;return n}function _l(r,e){if(r===ut||e<=ut)throw new Error(`invert: expected positive integers, got n=${r} mod=${e}`);let t=_e(r,e),n=e,o=ut,s=He,i=He,a=ut;for(;t!==ut;){let l=n/t,d=n%t,u=o-i*l,f=s-a*l;n=t,t=d,o=i,s=a,i=u,a=f}if(n!==He)throw new Error("invert: does not exist");return _e(o,e)}function gR(r){let e=(r-He)/rs,t,n,o;for(t=r-He,n=0;t%rs===ut;t/=rs,n++);for(o=rs;o<r&&zh(o,e,r)!==r-He;o++);if(n===1){let i=(r+He)/Gh;return function(c,l){let d=c.pow(l,i);if(!c.eql(c.sqr(d),l))throw new Error("Cannot find square root");return d}}let s=(t+He)/rs;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,d=a.pow(a.mul(a.ONE,o),t),u=a.pow(c,s),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let g=1;for(let p=a.sqr(f);g<l&&!a.eql(p,a.ONE);g++)p=a.sqr(p);let h=a.pow(d,He<<BigInt(l-g-1));d=a.sqr(h),u=a.mul(u,h),f=a.mul(f,d),l=g}return u}}function yR(r){if(r%Gh===hR){let e=(r+He)/Gh;return function(n,o){let s=n.pow(o,e);if(!n.eql(n.sqr(s),o))throw new Error("Cannot find square root");return s}}if(r%T8===D8){let e=(r-D8)/T8;return function(n,o){let s=n.mul(o,rs),i=n.pow(s,e),a=n.mul(o,i),c=n.mul(n.mul(a,rs),i),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%mR,gR(r)}var k8=(r,e)=>(_e(r,e)&He)===He,wR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Yh(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=wR.reduce((n,o)=>(n[o]="function",n),e);return br(r,t)}function ER(r,e,t){if(t<ut)throw new Error("Expected power > 0");if(t===ut)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>ut;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function bR(r,e){let t=new Array(e.length),n=e.reduce((s,i,a)=>r.is0(i)?s:(t[a]=s,r.mul(s,i)),r.ONE),o=r.inv(n);return e.reduceRight((s,i,a)=>r.is0(i)?s:(t[a]=r.mul(s,t[a]),r.mul(s,i)),o),t}function Qh(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function Al(r,e,t=!1,n={}){if(r<=ut)throw new Error(`Expected Field ORDER > 0, got ${r}`);let{nBitLength:o,nByteLength:s}=Qh(r,e);if(s>2048)throw new Error("Field lengths over 2048 bytes are not supported");let i=yR(r),a=Object.freeze({ORDER:r,BITS:o,BYTES:s,MASK:pa(o),ZERO:ut,ONE:He,create:c=>_e(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error(`Invalid field element: expected bigint, got ${typeof c}`);return ut<=c&&c<r},is0:c=>c===ut,isOdd:c=>(c&He)===He,neg:c=>_e(-c,r),eql:(c,l)=>c===l,sqr:c=>_e(c*c,r),add:(c,l)=>_e(c+l,r),sub:(c,l)=>_e(c-l,r),mul:(c,l)=>_e(c*l,r),pow:(c,l)=>ER(a,c,l),div:(c,l)=>_e(c*_l(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>_l(c,r),sqrt:n.sqrt||(c=>i(a,c)),invertBatch:c=>bR(a,c),cmov:(c,l,d)=>d?l:c,toBytes:c=>t?vn(c,s):uo(c,s),fromBytes:c=>{if(c.length!==s)throw new Error(`Fp.fromBytes: expected ${s}, got ${c.length}`);return t?Ur(c):xn(c)}});return Object.freeze(a)}function C8(r,e){if(!r.isOdd)throw new Error("Field doesn't have isOdd");let t=r.sqrt(e);return r.isOdd(t)?r.neg(t):t}function N8(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 Xh(r){let e=N8(r);return e+Math.ceil(e/2)}function P8(r,e,t=!1){let n=r.length,o=N8(e),s=Xh(e);if(n<16||n<s||n>1024)throw new Error(`expected ${s}-1024 bytes of input, got ${n}`);let i=t?xn(r):Ur(r),a=_e(i,e-He)+He;return t?vn(a,o):uo(a,o)}var vR=BigInt(0),jh=BigInt(1);function Il(r,e){let t=(o,s)=>{let i=s.negate();return o?i:s},n=o=>{let s=Math.ceil(e/o)+1,i=2**(o-1);return{windows:s,windowSize:i}};return{constTimeNegate:t,unsafeLadder(o,s){let i=r.ZERO,a=o;for(;s>vR;)s&jh&&(i=i.add(a)),a=a.double(),s>>=jh;return i},precomputeWindow(o,s){let{windows:i,windowSize:a}=n(s),c=[],l=o,d=l;for(let u=0;u<i;u++){d=l,c.push(d);for(let f=1;f<a;f++)d=d.add(l),c.push(d);l=d.double()}return c},wNAF(o,s,i){let{windows:a,windowSize:c}=n(o),l=r.ZERO,d=r.BASE,u=BigInt(2**o-1),f=2**o,g=BigInt(o);for(let h=0;h<a;h++){let p=h*c,y=Number(i&u);i>>=g,y>c&&(y-=f,i+=jh);let w=p,b=p+Math.abs(y)-1,E=h%2!==0,S=y<0;y===0?d=d.add(t(E,s[w])):l=l.add(t(S,s[b]))}return{p:l,f:d}},wNAFCached(o,s,i,a){let c=o._WINDOW_SIZE||1,l=s.get(o);return l||(l=this.precomputeWindow(o,c),c!==1&&s.set(o,a(l))),this.wNAF(c,l,i)}}}function ma(r){return Yh(r.Fp),br(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...Qh(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Mr=BigInt(0),rr=BigInt(1),Dl=BigInt(2),RR=BigInt(8),SR={zip215:!0};function _R(r){let e=ma(r);return br(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Tl(r){let e=_R(r),{Fp:t,n,prehash:o,hash:s,randomBytes:i,nByteLength:a,h:c}=e,l=Dl<<BigInt(a*8)-rr,d=t.create,u=e.uvRatio||((T,v)=>{try{return{isValid:!0,value:t.sqrt(T*t.inv(v))}}catch{return{isValid:!1,value:Mr}}}),f=e.adjustScalarBytes||(T=>T),g=e.domain||((T,v,U)=>{if(v.length||U)throw new Error("Contexts/pre-hash are not supported");return T}),h=T=>typeof T=="bigint"&&Mr<T,p=(T,v)=>h(T)&&h(v)&&T<v,y=T=>T===Mr||p(T,l);function w(T,v){if(p(T,v))return T;throw new Error(`Expected valid scalar < ${v}, got ${typeof T} ${T}`)}function b(T){return T===Mr?T:w(T,n)}let E=new Map;function S(T){if(!(T instanceof _))throw new Error("ExtendedPoint expected")}class _{constructor(v,U,V,H){if(this.ex=v,this.ey=U,this.ez=V,this.et=H,!y(v))throw new Error("x required");if(!y(U))throw new Error("y required");if(!y(V))throw new Error("z required");if(!y(H))throw new Error("t required")}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof _)throw new Error("extended point not allowed");let{x:U,y:V}=v||{};if(!y(U)||!y(V))throw new Error("invalid affine point");return new _(U,V,rr,d(U*V))}static normalizeZ(v){let U=t.invertBatch(v.map(V=>V.ez));return v.map((V,H)=>V.toAffine(U[H])).map(_.fromAffine)}_setWindowSize(v){this._WINDOW_SIZE=v,E.delete(this)}assertValidity(){let{a:v,d:U}=e;if(this.is0())throw new Error("bad point: ZERO");let{ex:V,ey:H,ez:se,et:ie}=this,de=d(V*V),ae=d(H*H),le=d(se*se),Be=d(le*le),ke=d(de*v),mt=d(le*d(ke+ae)),gt=d(Be+d(U*d(de*ae)));if(mt!==gt)throw new Error("bad point: equation left != right (1)");let at=d(V*H),Tt=d(se*ie);if(at!==Tt)throw new Error("bad point: equation left != right (2)")}equals(v){S(v);let{ex:U,ey:V,ez:H}=this,{ex:se,ey:ie,ez:de}=v,ae=d(U*de),le=d(se*H),Be=d(V*de),ke=d(ie*H);return ae===le&&Be===ke}is0(){return this.equals(_.ZERO)}negate(){return new _(d(-this.ex),this.ey,this.ez,d(-this.et))}double(){let{a:v}=e,{ex:U,ey:V,ez:H}=this,se=d(U*U),ie=d(V*V),de=d(Dl*d(H*H)),ae=d(v*se),le=U+V,Be=d(d(le*le)-se-ie),ke=ae+ie,mt=ke-de,gt=ae-ie,at=d(Be*mt),Tt=d(ke*gt),hn=d(Be*gt),Vo=d(mt*ke);return new _(at,Tt,Vo,hn)}add(v){S(v);let{a:U,d:V}=e,{ex:H,ey:se,ez:ie,et:de}=this,{ex:ae,ey:le,ez:Be,et:ke}=v;if(U===BigInt(-1)){let P3=d((se-H)*(le+ae)),O3=d((se+H)*(le-ae)),df=d(O3-P3);if(df===Mr)return this.double();let L3=d(ie*Dl*ke),B3=d(de*Dl*Be),U3=B3+L3,M3=O3+P3,F3=B3-L3,UE=d(U3*df),ME=d(M3*F3),FE=d(U3*F3),VE=d(df*M3);return new _(UE,ME,VE,FE)}let mt=d(H*ae),gt=d(se*le),at=d(de*V*ke),Tt=d(ie*Be),hn=d((H+se)*(ae+le)-mt-gt),Vo=Tt-at,Ji=Tt+at,N3=d(gt-U*mt),PE=d(hn*Vo),OE=d(Ji*N3),LE=d(hn*N3),BE=d(Vo*Ji);return new _(PE,OE,BE,LE)}subtract(v){return this.add(v.negate())}wNAF(v){return R.wNAFCached(this,E,v,_.normalizeZ)}multiply(v){let{p:U,f:V}=this.wNAF(w(v,n));return _.normalizeZ([U,V])[0]}multiplyUnsafe(v){let U=b(v);return U===Mr?D:this.equals(D)||U===rr?this:this.equals(A)?this.wNAF(U).p:R.unsafeLadder(this,U)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return R.unsafeLadder(this,n).is0()}toAffine(v){let{ex:U,ey:V,ez:H}=this,se=this.is0();v==null&&(v=se?RR:t.inv(H));let ie=d(U*v),de=d(V*v),ae=d(H*v);if(se)return{x:Mr,y:rr};if(ae!==rr)throw new Error("invZ was invalid");return{x:ie,y:de}}clearCofactor(){let{h:v}=e;return v===rr?this:this.multiplyUnsafe(v)}static fromHex(v,U=!1){let{d:V,a:H}=e,se=t.BYTES;v=Ue("pointHex",v,se);let ie=v.slice(),de=v[se-1];ie[se-1]=de&-129;let ae=Ur(ie);ae===Mr||(U?w(ae,l):w(ae,t.ORDER));let le=d(ae*ae),Be=d(le-rr),ke=d(V*le-H),{isValid:mt,value:gt}=u(Be,ke);if(!mt)throw new Error("Point.fromHex: invalid y coordinate");let at=(gt&rr)===rr,Tt=(de&128)!==0;if(!U&&gt===Mr&&Tt)throw new Error("Point.fromHex: x=0 and x_0=1");return Tt!==at&&(gt=d(-gt)),_.fromAffine({x:gt,y:ae})}static fromPrivateKey(v){return N(v).point}toRawBytes(){let{x:v,y:U}=this.toAffine(),V=vn(U,t.BYTES);return V[V.length-1]|=v&rr?128:0,V}toHex(){return bn(this.toRawBytes())}}_.BASE=new _(e.Gx,e.Gy,rr,d(e.Gx*e.Gy)),_.ZERO=new _(Mr,rr,rr,Mr);let{BASE:A,ZERO:D}=_,R=Il(_,a*8);function k(T){return _e(T,n)}function O(T){return k(Ur(T))}function N(T){let v=a;T=Ue("private key",T,v);let U=Ue("hashed private key",s(T),2*v),V=f(U.slice(0,v)),H=U.slice(v,2*v),se=O(V),ie=A.multiply(se),de=ie.toRawBytes();return{head:V,prefix:H,scalar:se,point:ie,pointBytes:de}}function L(T){return N(T).pointBytes}function F(T=new Uint8Array,...v){let U=Rn(...v);return O(s(g(U,Ue("context",T),!!o)))}function Y(T,v,U={}){T=Ue("message",T),o&&(T=o(T));let{prefix:V,scalar:H,pointBytes:se}=N(v),ie=F(U.context,V,T),de=A.multiply(ie).toRawBytes(),ae=F(U.context,de,se,T),le=k(ie+ae*H);b(le);let Be=Rn(de,vn(le,t.BYTES));return Ue("result",Be,a*2)}let I=SR;function C(T,v,U,V=I){let{context:H,zip215:se}=V,ie=t.BYTES;T=Ue("signature",T,2*ie),v=Ue("message",v),o&&(v=o(v));let de=Ur(T.slice(ie,2*ie)),ae,le,Be;try{ae=_.fromHex(U,se),le=_.fromHex(T.slice(0,ie),se),Be=A.multiplyUnsafe(de)}catch{return!1}if(!se&&ae.isSmallOrder())return!1;let ke=F(H,le.toRawBytes(),ae.toRawBytes(),v);return le.add(ae.multiplyUnsafe(ke)).subtract(Be).clearCofactor().equals(_.ZERO)}return A._setWindowSize(8),{CURVE:e,getPublicKey:L,sign:Y,verify:C,ExtendedPoint:_,utils:{getExtendedPublicKey:N,randomPrivateKey:()=>i(t.BYTES),precompute(T=8,v=_.BASE){return v._setWindowSize(T),v.multiply(BigInt(3)),v}}}}var ga=BigInt(0),Zh=BigInt(1);function AR(r){return br(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function O8(r){let e=AR(r),{P:t}=e,n=E=>_e(E,t),o=e.montgomeryBits,s=Math.ceil(o/8),i=e.nByteLength,a=e.adjustScalarBytes||(E=>E),c=e.powPminus2||(E=>zh(E,t-BigInt(2),t));function l(E,S,_){let A=n(E*(S-_));return S=n(S-A),_=n(_+A),[S,_]}function d(E){if(typeof E=="bigint"&&ga<=E&&E<t)return E;throw new Error("Expected valid scalar 0 < scalar < CURVE.P")}let u=(e.a-BigInt(2))/BigInt(4);function f(E,S){let _=d(E),A=d(S),D=_,R=Zh,k=ga,O=_,N=Zh,L=ga,F;for(let I=BigInt(o-1);I>=ga;I--){let C=A>>I&Zh;L^=C,F=l(L,R,O),R=F[0],O=F[1],F=l(L,k,N),k=F[0],N=F[1],L=C;let $=R+k,T=n($*$),v=R-k,U=n(v*v),V=T-U,H=O+N,se=O-N,ie=n(se*$),de=n(H*v),ae=ie+de,le=ie-de;O=n(ae*ae),N=n(D*n(le*le)),R=n(T*U),k=n(V*(T+n(u*V)))}F=l(L,R,O),R=F[0],O=F[1],F=l(L,k,N),k=F[0],N=F[1];let Y=c(k);return n(R*Y)}function g(E){return vn(n(E),s)}function h(E){let S=Ue("u coordinate",E,s);return i===32&&(S[31]&=127),Ur(S)}function p(E){let S=Ue("scalar",E),_=S.length;if(_!==s&&_!==i)throw new Error(`Expected ${s} or ${i} bytes, got ${_}`);return Ur(a(S))}function y(E,S){let _=h(S),A=p(E),D=f(_,A);if(D===ga)throw new Error("Invalid private or public key received");return g(D)}let w=g(e.Gu);function b(E){return y(E,w)}return{scalarMult:y,scalarMultBase:b,getSharedSecret:(E,S)=>y(E,S),getPublicKey:E=>b(E),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:w}}var ya=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),L8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),qM=BigInt(0),IR=BigInt(1),Jh=BigInt(2),DR=BigInt(5),B8=BigInt(10),TR=BigInt(20),kR=BigInt(40),U8=BigInt(80);function M8(r){let e=ya,n=r*r%e*r%e,o=Me(n,Jh,e)*n%e,s=Me(o,IR,e)*r%e,i=Me(s,DR,e)*s%e,a=Me(i,B8,e)*i%e,c=Me(a,TR,e)*a%e,l=Me(c,kR,e)*c%e,d=Me(l,U8,e)*l%e,u=Me(d,U8,e)*l%e,f=Me(u,B8,e)*i%e;return{pow_p_5_8:Me(f,Jh,e)*r%e,b2:n}}function F8(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function CR(r,e){let t=ya,n=_e(e*e*e,t),o=_e(n*n*e,t),s=M8(r*o).pow_p_5_8,i=_e(r*n*s,t),a=_e(e*i*i,t),c=i,l=_e(i*L8,t),d=a===r,u=a===_e(-r,t),f=a===_e(-r*L8,t);return d&&(i=c),(u||f)&&(i=l),k8(i,t)&&(i=_e(-i,t)),{isValid:d||u,value:i}}var Sn=Al(ya,void 0,!0),e0={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Sn,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:BigInt(8),Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:co,randomBytes:es,adjustScalarBytes:F8,uvRatio:CR},Js=Tl(e0);function V8(r,e,t){if(e.length>255)throw new Error("Context is too big");return El(Vh("SigEd25519 no Ed25519 collisions"),new Uint8Array([t?1:0,e.length]),e,r)}var WM=Tl({...e0,domain:V8}),GM=Tl({...e0,domain:V8,prehash:co}),wa=O8({P:ya,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ya,{pow_p_5_8:t,b2:n}=M8(r);return _e(Me(t,BigInt(3),e)*n,e)},adjustScalarBytes:F8,randomBytes:es});var NR=(Sn.ORDER+BigInt(3))/BigInt(8),zM=Sn.pow(Jh,NR),YM=Sn.sqrt(Sn.neg(Sn.ONE)),QM=(Sn.ORDER-BigInt(5))/BigInt(8),XM=BigInt(486662);var jM=C8(Sn,Sn.neg(BigInt(486664)));var ZM=BigInt("25063068953384623474111414158702152701244531502492656460079210482610430750235"),JM=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),eF=BigInt("1159843021668779879193775521855586647937357759715417654439879720876111806838"),tF=BigInt("40440834346308536858101042469323190826248399146238708352240133220865137265952");var rF=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");var ei=32,_n=64,kl=32;function K8(){let r=Js.utils.randomPrivateKey(),e=Js.getPublicKey(r);return{privateKey:W8(r,e),publicKey:e}}function $8(r){if(r.length!==kl)throw new TypeError('"seed" must be 32 bytes in length.');if(!(r instanceof Uint8Array))throw new TypeError('"seed" must be a node.js Buffer, or Uint8Array.');let e=r,t=Js.getPublicKey(e);return{privateKey:W8(e,t),publicKey:t}}function H8(r,e){let t=r.subarray(0,kl);return Js.sign(e instanceof Uint8Array?e:e.subarray(),t)}function q8(r,e,t){return Js.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function W8(r,e){let t=new Uint8Array(_n);for(let n=0;n<kl;n++)t[n]=r[n],t[kl+n]=e[n];return t}var qe={get(r=globalThis){let e=r.crypto;if(e==null||e.subtle==null)throw Object.assign(new Error("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"),{code:"ERR_MISSING_WEB_CRYPTO"});return e}};var t0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Cl(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",s=r?.saltLength??16,i=r?.iterations??32767,a=qe.get();t*=8;async function c(u,f){let g=a.getRandomValues(new Uint8Array(s)),h=a.getRandomValues(new Uint8Array(n)),p={name:e,iv:h};typeof f=="string"&&(f=B(f));let y;if(f.length===0){y=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["encrypt"]);try{let b={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["encrypt"])}}else{let b={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},E=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(b,E,{name:e,length:t},!0,["encrypt"])}let w=await a.subtle.encrypt(p,y,u);return ve([g,p.iv,new Uint8Array(w)])}async function l(u,f){let g=u.subarray(0,s),h=u.subarray(s,s+n),p=u.subarray(s+n),y={name:e,iv:h};typeof f=="string"&&(f=B(f));let w;if(f.length===0)try{let E={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,S,{name:e,length:t},!0,["decrypt"])}catch{w=await a.subtle.importKey("jwk",t0,{name:"AES-GCM"},!0,["decrypt"])}else{let E={name:"PBKDF2",salt:g,iterations:i,hash:{name:o}},S=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);w=await a.subtle.deriveKey(E,S,{name:e,length:t},!0,["decrypt"])}let b=await a.subtle.decrypt(y,w,p);return new Uint8Array(b)}return{encrypt:c,decrypt:l}}async function ti(r,e){let n=await Cl().encrypt(r,e);return lt.encode(n)}var ri={};pe(ri,{KeyType:()=>Fe,PrivateKey:()=>Vr,PublicKey:()=>Fr});var Fe;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.Secp256k1="Secp256k1"})(Fe||(Fe={}));var r0;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.Secp256k1=2]="Secp256k1"})(r0||(r0={}));(function(r){r.codec=()=>$e(r0)})(Fe||(Fe={}));var Fr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Fr||(Fr={}));var Vr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Fe.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.Type=Fe.codec().decode(t);break;case 2:o.Data=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Vr||(Vr={}));var ns=class{_key;constructor(e){this._key=ni(e,ei)}verify(e,t){return q8(this._key,t,e)}marshal(){return this._key}get bytes(){return Fr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}},An=class{_key;_publicKey;constructor(e,t){this._key=ni(e,_n),this._publicKey=ni(t,ei)}sign(e){return H8(this._key,e)}get public(){return new ns(this._publicKey)}marshal(){return this._key}get bytes(){return Vr.encode({Type:Fe.Ed25519,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return Er(e)?{bytes:t}=await e:t=e.bytes,t}async id(){let e=hr.digest(this.public.bytes);return Ge.encode(e.bytes).substring(1)}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ti(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function OR(r){if(r.length>_n){r=ni(r,_n+ei);let n=r.subarray(0,_n),o=r.subarray(_n,r.length);return new An(n,o)}r=ni(r,_n);let e=r.subarray(0,_n),t=r.subarray(ei);return new An(e,t)}function LR(r){return r=ni(r,ei),new ns(r)}async function BR(){let{privateKey:r,publicKey:e}=K8();return new An(r,e)}async function n0(r){let{privateKey:e,publicKey:t}=$8(r);return new An(e,t)}function ni(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new m(`Key must be a Uint8Array of length ${e}, got ${r.length}`,"ERR_INVALID_KEY_TYPE");return r}var z8={"P-256":256,"P-384":384,"P-521":521},UR=Object.keys(z8),s0=UR.join(" / ");async function Y8(r){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${s0}`,"ERR_INVALID_CURVE");let e=await qe.get().subtle.generateKey({name:"ECDH",namedCurve:r},!0,["deriveBits"]),t=async(s,i)=>{let a;i!=null?a=await qe.get().subtle.importKey("jwk",FR(r,i),{name:"ECDH",namedCurve:r},!1,["deriveBits"]):a=e.privateKey;let c=await qe.get().subtle.importKey("jwk",X8(r,s),{name:"ECDH",namedCurve:r},!1,[]),l=await qe.get().subtle.deriveBits({name:"ECDH",namedCurve:r,public:c},a,z8[r]);return new Uint8Array(l,0,l.byteLength)},n=await qe.get().subtle.exportKey("jwk",e.publicKey);return{key:MR(n),genSharedKey:t}}var Q8={"P-256":32,"P-384":48,"P-521":66};function MR(r){if(r.crv==null||r.x==null||r.y==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");if(r.crv!=="P-256"&&r.crv!=="P-384"&&r.crv!=="P-521")throw new m(`Unknown curve: ${r.crv}. Must be ${s0}`,"ERR_INVALID_CURVE");let e=Q8[r.crv];return ve([Uint8Array.from([4]),Fh(r.x,e),Fh(r.y,e)],1+e*2)}function X8(r,e){if(r!=="P-256"&&r!=="P-384"&&r!=="P-521")throw new m(`Unknown curve: ${r}. Must be ${s0}`,"ERR_INVALID_CURVE");let t=Q8[r];if(!j(e.subarray(0,1),Uint8Array.from([4])))throw new m("Cannot unmarshal public key - invalid key format","ERR_INVALID_KEY_FORMAT");return{kty:"EC",crv:r,x:P(e.subarray(1,t+1),"base64url"),y:P(e.subarray(1+t),"base64url"),ext:!0}}var FR=(r,e)=>({...X8(r,e.public),d:P(e.private,"base64url")});var j8=Y8;async function Z8(r,e){let t=lt.decode(r);return Cl().decrypt(t,e)}var J8={SHA1:20,SHA256:32,SHA512:64};var VR={SHA1:"SHA-1",SHA256:"SHA-256",SHA512:"SHA-512"},KR=async(r,e)=>{let t=await qe.get().subtle.sign({name:"HMAC"},r,e);return new Uint8Array(t,0,t.byteLength)};async function e6(r,e){let t=VR[r],n=await qe.get().subtle.importKey("raw",e,{name:"HMAC",hash:{name:t}},!1,["sign"]);return{async digest(o){return KR(n,o)},length:J8[r]}}var t6={"AES-128":{ivSize:16,keySize:16},"AES-256":{ivSize:16,keySize:32},Blowfish:{ivSize:8,keySize:32}};async function r6(r,e,t){let n=t6[r];if(n==null){let b=Object.keys(t6).join(" / ");throw new m(`unknown cipher type '${r}'. Must be ${b}`,"ERR_INVALID_CIPHER_TYPE")}if(e==null)throw new m("missing hash type","ERR_MISSING_HASH_TYPE");let o=n.keySize,s=n.ivSize,i=20,a=B("key expansion"),c=2*(s+o+i),l=await e6(e,t),d=await l.digest(a),u=[],f=0;for(;f<c;){let b=await l.digest(ve([d,a])),E=b.length;f+E>c&&(E=c-f),u.push(b),f+=E,d=await l.digest(d)}let g=c/2,h=ve(u),p=h.subarray(0,g),y=h.subarray(g,c),w=b=>({iv:b.subarray(0,s),cipherKey:b.subarray(s,s+o),macKey:b.subarray(s+o)});return{k1:w(p),k2:w(y)}}var g0={};pe(g0,{MAX_RSA_KEY_SIZE:()=>is,RsaPrivateKey:()=>yo,RsaPublicKey:()=>ss,fromJwk:()=>fS,generateKeyPair:()=>hS,unmarshalRsaPrivateKey:()=>p0,unmarshalRsaPublicKey:()=>dS});function Ht(r){if(isNaN(r)||r<=0)throw new m("random bytes length must be a Number bigger than 0","ERR_INVALID_LENGTH");return es(r)}var go={};pe(go,{exportToPem:()=>aS,importFromPem:()=>h0,jwkToPkcs1:()=>nS,jwkToPkix:()=>sS,pkcs1ToJwk:()=>rS,pkixToJwk:()=>oS});var Nl=class extends Xs{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Zo(e);let n=Br(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,s=new Uint8Array(o);s.set(n.length>o?e.create().update(n).digest():n);for(let i=0;i<s.length;i++)s[i]^=54;this.iHash.update(s),this.oHash=e.create();for(let i=0;i<s.length;i++)s[i]^=106;this.oHash.update(s),s.fill(0)}update(e){return Qs(this),this.iHash.update(e),this}digestInto(e){Qs(this),Ys(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:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,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()}},fo=(r,e,t)=>new Nl(r,e).update(t).digest();fo.create=(r,e)=>new Nl(r,e);function n6(r,e,t,n){Zo(r);let o=v8({dkLen:32,asyncTick:10},n),{c:s,dkLen:i,asyncTick:a}=o;if(oo(s),oo(i),oo(a),s<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Br(e),l=Br(t),d=new Uint8Array(i),u=fo.create(r,c),f=u._cloneInto().update(l);return{c:s,dkLen:i,asyncTick:a,DK:d,PRF:u,PRFSalt:f}}function o6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function s6(r,e,t,n){let{c:o,dkLen:s,DK:i,PRF:a,PRFSalt:c}=n6(r,e,t,n),l,d=new Uint8Array(4),u=Jo(d),f=new Uint8Array(a.outputLen);for(let g=1,h=0;h<s;g++,h+=a.outputLen){let p=i.subarray(h,h+a.outputLen);u.setInt32(0,g,!1),(l=c._cloneInto(l)).update(d).digestInto(f),p.set(f.subarray(0,p.length));for(let y=1;y<o;y++){a._cloneInto(l).update(f).digestInto(f);for(let w=0;w<p.length;w++)p[w]^=f[w]}}return o6(a,c,i,l,f)}async function i0(r,e,t,n){let{c:o,dkLen:s,asyncTick:i,DK:a,PRF:c,PRFSalt:l}=n6(r,e,t,n),d,u=new Uint8Array(4),f=Jo(u),g=new Uint8Array(c.outputLen);for(let h=1,p=0;p<s;h++,p+=c.outputLen){let y=a.subarray(p,p+c.outputLen);f.setInt32(0,h,!1),(d=l._cloneInto(d)).update(u).digestInto(g),y.set(g.subarray(0,y.length)),await x8(o-1,i,()=>{c._cloneInto(d).update(g).digestInto(g);for(let w=0;w<y.length;w++)y[w]^=g[w]})}return o6(c,l,a,d,g)}var ye=Ye(i6());function os(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 ho(r,e,t=-1){let n=t,o=r,s=0,i=Math.pow(2,e);for(let a=1;a<8;a++){if(r<i){let c;if(n<0)c=new ArrayBuffer(a),s=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),s=n}let l=new Uint8Array(c);for(let d=a-1;d>=0;d--){let u=Math.pow(2,d*e);l[s-d-1]=Math.floor(o/u),o-=l[s-d-1]*u}return c}i*=Math.pow(2,e)}return new ArrayBuffer(0)}function Ll(...r){let e=0,t=0;for(let s of r)e+=s.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let s of r)o.set(s,t),t+=s.length;return o}function c0(){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=os(t,8),o=new ArrayBuffer(this.valueHex.byteLength),s=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)s[a]=r[a];return s[0]&=127,os(s,8)-n}function a6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let i=t-e,a=ho(i,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=ho(e,8,n),s=new Uint8Array(o);if(s[0]&128){let i=o.slice(0),a=new Uint8Array(i);o=new ArrayBuffer(o.byteLength+1),s=new Uint8Array(o);for(let c=0;c<i.byteLength;c++)s[c+1]=a[c];s[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function c6(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 qt(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let i=0;i<n;i++)o[i]="0";return o.join("").concat(t)}var YF=Math.log(2);function Bl(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function l0(r){let e=0,t=0;for(let o=0;o<r.length;o++){let s=r[o];e+=s.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let s=r[o];n.set(new Uint8Array(s),t),t+=s.byteLength}return n.buffer}function Cn(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 ba=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return l0(this.items)}},Ea=[new Uint8Array([1])],l6="0123456789";var ii="",$r=new ArrayBuffer(0),u0=new Uint8Array(0),xa="EndOfContent",d6="OCTET STRING",f6="BIT STRING";function Nn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let s=n[0]||{};this.isHexOnly=(o=s.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=s.valueHex?ye.BufferSourceConverter.toUint8Array(s.valueHex):u0}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,s){let i=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Cn(this,i,o,s))return-1;let a=o+s;return this.valueHexView=i.subarray(o,a),this.valueHexView.length?(this.blockLength=s,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",$r)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Dn=class{constructor({blockLength:e=0,error:t=ii,warnings:n=[],valueBeforeDecode:o=u0}={}){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)}}};Dn.NAME="baseBlock";var Nt=class extends Dn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Nt.NAME="valueBlock";var Ul=class extends Nn(Dn){constructor({idBlock:e={}}={}){var t,n,o,s;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):u0,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(s=e.isConstructed)!==null&&s!==void 0?s:!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",$r}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let s=this.tagNumber;s&=31,t|=s,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=ho(this.tagNumber,7),s=new Uint8Array(o),i=o.byteLength,a=new Uint8Array(i+1);if(a[0]=t|31,!e){for(let c=0;c<i-1;c++)a[c+1]=s[c]|128;a[i]=s[i-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let s=0;s<o.length-1;s++)n[s+1]=o[s]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;switch(s[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=(s[0]&32)===32,this.isHexOnly=!1;let a=s[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),d=255;for(;s[c]&128;){if(l[c-1]=s[c]&127,c++,c>=s.length)return this.error="End of input reached before message was fully decoded",-1;if(c===d){d+=255;let f=new Uint8Array(d);for(let g=0;g<l.length;g++)f[g]=l[g];l=this.valueHexView=new Uint8Array(d)}}this.blockLength=c+1,l[c-1]=s[c]&127;let u=new Uint8Array(c);for(let f=0;f<c;f++)u[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(u),this.blockLength<=9?this.tagNumber=os(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}}};Ul.NAME="identificationBlock";var Ml=class extends Dn{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(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);if(s.length===0)return this.error="Zero buffer length",-1;if(s[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=s[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(s[0]&128),this.longFormUsed===!1)return this.length=s[0],this.blockLength=1,t+this.blockLength;let i=s[0]&127;if(i>8)return this.error="Too big integer",-1;if(i+1>s.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+i);return c[i-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=os(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=i+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=ho(this.length,8);if(o.byteLength>127)return this.error="Too big length",$r;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let s=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let i=0;i<o.byteLength;i++)n[i+1]=s[i];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}}};Ml.NAME="lengthBlock";var W={},xt=class extends Dn{constructor({name:e=ii,optional:t=!1,primitiveSchema:n,...o}={},s){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new Ul(o),this.lenBlock=new Ml(o),this.valueBlock=s?new s(o):new Nt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new ba;t||h6(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 s=this.valueBlock.toBER(e);this.lenBlock.length=s.byteLength;let i=this.lenBlock.toBER(e);n.write(i),n.write(s)}return t?$r: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 c6(t,n)}};xt.NAME="BaseBlock";function h6(r){if(r instanceof W.Constructed)for(let e of r.valueBlock.value)h6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var Fl=class extends xt{constructor({value:e=ii,...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}'`}};Fl.NAME="BaseStringBlock";var Vl=class extends Nn(Nt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Vl.NAME="PrimitiveValueBlock";var p6,Kl=class extends xt{constructor(e={}){super(e,Vl),this.idBlock.isConstructed=!1}};p6=Kl;W.Primitive=p6;Kl.NAME="PRIMITIVE";function jR(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 bu(r,e=0,t=r.length){let n=e,o=new xt({},Nt),s=new Dn;if(!Cn(s,r,e,t))return o.error=s.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=xt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=W.EndOfContent;break;case 1:c=W.Boolean;break;case 2:c=W.Integer;break;case 3:c=W.BitString;break;case 4:c=W.OctetString;break;case 5:c=W.Null;break;case 6:c=W.ObjectIdentifier;break;case 10:c=W.Enumerated;break;case 12:c=W.Utf8String;break;case 13:c=W.RelativeObjectIdentifier;break;case 14:c=W.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=W.Sequence;break;case 17:c=W.Set;break;case 18:c=W.NumericString;break;case 19:c=W.PrintableString;break;case 20:c=W.TeletexString;break;case 21:c=W.VideotexString;break;case 22:c=W.IA5String;break;case 23:c=W.UTCTime;break;case 24:c=W.GeneralizedTime;break;case 25:c=W.GraphicString;break;case 26:c=W.VisibleString;break;case 27:c=W.GeneralString;break;case 28:c=W.UniversalString;break;case 29:c=W.CharacterString;break;case 30:c=W.BmpString;break;case 31:c=W.DATE;break;case 32:c=W.TimeOfDay;break;case 33:c=W.DateTime;break;case 34:c=W.Duration;break;default:{let l=o.idBlock.isConstructed?new W.Constructed:new W.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?W.Constructed:W.Primitive}return o=jR(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 ai(r){if(!r.byteLength){let e=new xt({},Nt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return bu(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function ZR(r,e){return r?1:e}var on=class extends Nt{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(!Cn(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 s=t;for(;ZR(this.isIndefiniteForm,n)>0;){let i=bu(o,s,n);if(i.offset===-1)return this.error=i.result.error,this.warnings.concat(i.result.warnings),-1;if(s=i.offset,this.blockLength+=i.result.blockLength,n-=i.result.blockLength,this.value.push(i.result),this.isIndefiniteForm&&i.result.constructor.NAME===xa)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===xa?this.value.pop():this.warnings.push("No EndOfContent block encoded")),s}toBER(e,t){let n=t||new ba;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?$r:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};on.NAME="ConstructedValueBlock";var m6,po=class extends xt{constructor(e={}){super(e,on),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(`
18
18
  `).map(o=>` ${o}`).join(`
19
19
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
20
20
  ${e.join(`
21
- `)}`:`${t} :`}};g6=fo;W.Constructed=g6;fo.NAME="CONSTRUCTED";var $l=class extends Pt{fromBER(e,t,n){return t}toBER(e){return $r}};$l.override="EndOfContentValueBlock";var y6,Hl=class extends xt{constructor(e={}){super(e,$l),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};y6=Hl;W.EndOfContent=y6;Hl.NAME=va;var w6,ho=class extends xt{constructor(e={}){super(e,Pt),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}`}};w6=ho;W.Null=w6;ho.NAME="NULL";var ql=class extends Cn(Pt){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 kn(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,c0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};ql.NAME="BooleanValueBlock";var E6,Wl=class extends xt{constructor(e={}){super(e,ql),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}`}};E6=Wl;W.Boolean=E6;Wl.NAME="BOOLEAN";var Gl=class extends Cn(nn){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=nn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===va){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==f6)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?nn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Gl.NAME="OctetStringValueBlock";var b6,Dn=class r extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Gl),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 s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=bu(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?fo.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)}};b6=Dn;W.OctetString=b6;Dn.NAME=f6;var zl=class extends Cn(nn){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=nn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===va){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==h6)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 s=ye.BufferSourceConverter.toUint8Array(e);if(!kn(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=bu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return nn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return $r;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}}};zl.NAME="BitStringValueBlock";var x6,ai=class extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},zl),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 fo.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)}`}}};x6=ai;W.BitString=x6;ai.NAME=h6;var v6;function jR(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=Ll(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Ll(t,s)),s}function d6(r){if(r>=ba.length)for(let e=ba.length;e<=r;e++){let t=new Uint8Array([0]),n=ba[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=Ll(t,n)),ba.push(n)}return ba[r]}function ZR(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var Ra=class extends Cn(Pt){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=c0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(c6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&i[1]&128?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}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,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=ZR(d6(n),t),i="-";break;default:t=jR(t,d6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=u6.charAt(t[c]));return a===!1&&(i+=u6.charAt(0)),i}};v6=Ra;Ra.NAME="IntegerValueBlock";Object.defineProperty(v6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var R6,at=class r extends xt{constructor(e={}){super(e,Ra),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Bl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Bl();let t=BigInt(e),n=new xa,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);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()}`}};R6=at;W.Integer=R6;at.NAME="INTEGER";var S6,Yl=class extends at{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};S6=Yl;W.Enumerated=S6;Yl.NAME="ENUMERATED";var Sa=class extends Cn(Pt){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(!kn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Bl();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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=uo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",$r;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Sa.NAME="sidBlock";var Ql=class extends Pt{constructor({value:e=ci,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Sa;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}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,$r;t.push(o)}return l0(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.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;i.valueDec=c+a,s=!1}else{let i=new Sa;if(o>Number.MAX_SAFE_INTEGER){Bl();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}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}};Ql.NAME="ObjectIdentifierValueBlock";var _6,Kr=class extends xt{constructor(e={}){super(e,Ql),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()}}};_6=Kr;W.ObjectIdentifier=_6;Kr.NAME="OBJECT IDENTIFIER";var _a=class extends Cn(In){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(!kn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=uo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",$r;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};_a.NAME="relativeSidBlock";var Xl=class extends Pt{constructor({value:e=ci,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new _a;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,$r;n.push(s)}return l0(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 s=new _a;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}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}};Xl.NAME="RelativeObjectIdentifierValueBlock";var A6,jl=class extends xt{constructor(e={}){super(e,Xl),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()}}};A6=jl;W.RelativeObjectIdentifier=A6;jl.NAME="RelativeObjectIdentifier";var I6,pt=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};I6=pt;W.Sequence=I6;pt.NAME="SEQUENCE";var D6,Zl=class extends fo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};D6=Zl;W.Set=D6;Zl.NAME="SET";var Jl=class extends Cn(Pt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ci}toJSON(){return{...super.toJSON(),value:this.value}}};Jl.NAME="StringValueBlock";var eu=class extends Jl{};eu.NAME="SimpleStringValueBlock";var Mt=class extends Fl{constructor({...e}={}){super(e,eu)}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}};Mt.NAME="SIMPLE STRING";var tu=class extends Mt{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}};tu.NAME="Utf8StringValueBlock";var T6,Tn=class extends tu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};T6=Tn;W.Utf8String=T6;Tn.NAME="UTF8String";var ru=class extends Mt{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))}};ru.NAME="BmpStringValueBlock";var k6,nu=class extends ru{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};k6=nu;W.BmpString=k6;nu.NAME="BMPString";var ou=class extends Mt{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 s=uo(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};ou.NAME="UniversalStringValueBlock";var C6,su=class extends ou{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};C6=su;W.UniversalString=C6;su.NAME="UniversalString";var N6,iu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};N6=iu;W.NumericString=N6;iu.NAME="NumericString";var P6,au=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};P6=au;W.PrintableString=P6;au.NAME="PrintableString";var O6,cu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};O6=cu;W.TeletexString=O6;cu.NAME="TeletexString";var L6,lu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};L6=lu;W.VideotexString=L6;lu.NAME="VideotexString";var B6,uu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};B6=uu;W.IA5String=B6;uu.NAME="IA5String";var U6,du=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};U6=du;W.GraphicString=U6;du.NAME="GraphicString";var M6,Aa=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};M6=Aa;W.VisibleString=M6;Aa.NAME="VisibleString";var F6,fu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};F6=fu;W.GeneralString=F6;fu.NAME="GeneralString";var V6,hu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};V6=hu;W.CharacterString=V6;hu.NAME="CharacterString";var K6,Ia=class extends Aa{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]=Wt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=Wt(this.month,2),t[2]=Wt(this.day,2),t[3]=Wt(this.hour,2),t[4]=Wt(this.minute,2),t[5]=Wt(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}}};K6=Ia;W.UTCTime=K6;Ia.NAME="UTCTime";var $6,pu=class extends Ia{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="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),g="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(g=n.substring(f+1),n=n.substring(0,f),g.length!==2&&g.length!==4)throw new Error("Wrong input string for conversion");let h=parseInt(g.substring(0,2),10);if(isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*h,g.length===4){if(h=parseInt(g.substring(2,4),10),isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");c=u*h}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(Wt(this.year,4)),t.push(Wt(this.month,2)),t.push(Wt(this.day,2)),t.push(Wt(this.hour,2)),t.push(Wt(this.minute,2)),t.push(Wt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(Wt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};$6=pu;W.GeneralizedTime=$6;pu.NAME="GeneralizedTime";var H6,mu=class extends Tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};H6=mu;W.DATE=H6;mu.NAME="DATE";var q6,gu=class extends Tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};q6=gu;W.TimeOfDay=q6;gu.NAME="TimeOfDay";var W6,yu=class extends Tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};W6=yu;W.DateTime=W6;yu.NAME="DateTime";var G6,wu=class extends Tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};G6=wu;W.Duration=G6;wu.NAME="Duration";var z6,Eu=class extends Tn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};z6=Eu;W.TIME=z6;Eu.NAME="TIME";function eS(r){let{result:e}=li(r),t=e.valueBlock.value;return{n:P(on(t[1].toBigInt()),"base64url"),e:P(on(t[2].toBigInt()),"base64url"),d:P(on(t[3].toBigInt()),"base64url"),p:P(on(t[4].toBigInt()),"base64url"),q:P(on(t[5].toBigInt()),"base64url"),dp:P(on(t[6].toBigInt()),"base64url"),dq:P(on(t[7].toBigInt()),"base64url"),qi:P(on(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function tS(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 m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new pt({value:[new at({value:0}),at.fromBigInt(sn(B(r.n,"base64url"))),at.fromBigInt(sn(B(r.e,"base64url"))),at.fromBigInt(sn(B(r.d,"base64url"))),at.fromBigInt(sn(B(r.p,"base64url"))),at.fromBigInt(sn(B(r.q,"base64url"))),at.fromBigInt(sn(B(r.dp,"base64url"))),at.fromBigInt(sn(B(r.dq,"base64url"))),at.fromBigInt(sn(B(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function rS(r){let{result:e}=li(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:P(on(t[0].toBigInt()),"base64url"),e:P(on(t[1].toBigInt()),"base64url")}}function nS(r){if(r.n==null||r.e==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new pt({value:[new pt({value:[new Kr({value:"1.2.840.113549.1.1.1"}),new ho]}),new ai({valueHex:new pt({value:[at.fromBigInt(sn(B(r.n,"base64url"))),at.fromBigInt(sn(B(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function on(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,s=0;for(;o<t;)n[o]=parseInt(e.slice(s,s+2),16),o+=1,s+=2;return n}function sn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var oS=16,d0=32,f0=1e4;async function sS(r,e){let t=qe.get(),o=new pt({value:[new at({value:0}),new pt({value:[new Kr({value:"1.2.840.113549.1.1.1"}),new ho]}),new Dn({valueHex:r.marshal()})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=qt(oS),a=await i0(io,e,i,{c:f0,dkLen:d0}),c=qt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new pt({value:[new Dn({valueHex:i}),new at({value:f0}),new at({value:d0}),new pt({value:[new Kr({value:"1.2.840.113549.2.11"}),new ho]})]}),f=new pt({value:[new Kr({value:"1.2.840.113549.1.5.13"}),new pt({value:[new pt({value:[new Kr({value:"1.2.840.113549.1.5.12"}),u]}),new pt({value:[new Kr({value:"2.16.840.1.101.3.4.1.42"}),new Dn({valueHex:c})]})]})]}),h=new pt({value:[f,new Dn({valueHex:d})]}).toBER(),p=new Uint8Array(h,0,h.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...P(p,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
22
- `)}async function h0(r,e){let t=qe.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=li(o),{iv:i,salt:a,iterations:c,keySize:l,cipherText:d}=iS(s),u=await i0(io,e,a,{c,dkLen:l}),f=await t.subtle.importKey("raw",u,"AES-CBC",!1,["decrypt"]),g=Da(await t.subtle.decrypt({name:"AES-CBC",iv:i},f,d)),{result:h}=li(g);n=Y6(h)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=li(o);n=Y6(s)}else throw new m("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return p0(n)}function iS(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new m("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");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 m("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let s=n.valueBlock.value[1],i=Da(s.valueBlock.value[0].getValue()),a=f0,c=d0;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new m("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new m("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let u=Da(l.valueBlock.value[1].getValue());return{cipherText:Da(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function Y6(r){return Da(r.valueBlock.value[2].getValue())}function Da(r){return new Uint8Array(r,0,r.byteLength)}async function Q6(r){let e=await qe.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 Z6(e);return{privateKey:t[0],publicKey:t[1]}}async function m0(r){let t=[await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await aS(r)],n=await Z6({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function X6(r,e){let t=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await qe.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function j6(r,e,t){let n=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return qe.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function Z6(r){if(r.privateKey==null||r.publicKey==null)throw new m("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([qe.get().subtle.exportKey("jwk",r.privateKey),qe.get().subtle.exportKey("jwk",r.publicKey)])}async function aS(r){return qe.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function xu(r){if(r.kty!=="RSA")throw new m("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new m("invalid key modulus","ERR_INVALID_KEY_MODULUS");return B(r.n,"base64url").length*8}var is=8192,ss=class{_key;constructor(e){this._key=e}verify(e,t){return j6(this._key,t,e)}marshal(){return po.jwkToPkix(this._key)}get bytes(){return Fr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return br(e)?e.then(({bytes:t})=>t):e.bytes}},mo=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return qt(16)}sign(e){return X6(this._key,e)}get public(){if(this._publicKey==null)throw new m("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new ss(this._publicKey)}marshal(){return po.jwkToPkcs1(this._key)}get bytes(){return Vr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return br(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return P(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return po.exportToPem(this,e);if(t==="libp2p-key")return ni(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function p0(r){let e=po.pkcs1ToJwk(r);if(xu(e)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await m0(e);return new mo(t.privateKey,t.publicKey)}function lS(r){let e=po.pkixToJwk(r);if(xu(e)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new ss(e)}async function uS(r){if(xu(r)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await m0(r);return new mo(e.privateKey,e.publicKey)}async function dS(r){if(r>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await Q6(r);return new mo(e.privateKey,e.publicKey)}var x0={};pe(x0,{Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateKeyPair:()=>SS,unmarshalSecp256k1PrivateKey:()=>vS,unmarshalSecp256k1PublicKey:()=>RS});var fS=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]),go=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),yo=new Uint32Array(64),y0=class extends no{constructor(){super(64,32,8,!1),this.A=go[0]|0,this.B=go[1]|0,this.C=go[2]|0,this.D=go[3]|0,this.E=go[4]|0,this.F=go[5]|0,this.G=go[6]|0,this.H=go[7]|0}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)yo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=yo[u-15],g=yo[u-2],h=Lr(f,7)^Lr(f,18)^f>>>3,p=Lr(g,17)^Lr(g,19)^g>>>10;yo[u]=p+yo[u-7]+h+yo[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Lr(a,6)^Lr(a,11)^Lr(a,25),g=d+f+bl(a,c,l)+fS[u]+yo[u]|0,p=(Lr(n,2)^Lr(n,13)^Lr(n,22))+xl(n,o,s)|0;d=l,l=c,c=a,a=i+g|0,i=s,s=o,o=n,n=g+p|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){yo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var wo=Js(()=>new y0);function hS(r){let e=ga(r);xr(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:pS,hexToBytes:mS}=Sl,as={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(r){let{Err:e}=as;if(r.length<2||r[0]!==2)throw new e("Invalid signature integer tag");let t=r[1],n=r.subarray(2,t+2);if(!t||n.length!==t)throw new e("Invalid signature integer: wrong length");if(n[0]&128)throw new e("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:pS(n),l:r.subarray(t+2)}},toSig(r){let{Err:e}=as,t=typeof r=="string"?mS(r):r;ei(t);let n=t.length;if(n<2||t[0]!=48)throw new e("Invalid signature tag");if(t[1]!==n-2)throw new e("Invalid signature: incorrect length");let{d:o,l:s}=as._parseInt(t.subarray(2)),{d:i,l:a}=as._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(r){let e=l=>Number.parseInt(l[0],16)&8?"00"+l:l,t=l=>{let d=l.toString(16);return d.length&1?`0${d}`:d},n=e(t(r.s)),o=e(t(r.r)),s=n.length/2,i=o.length/2,a=t(s),c=t(i);return`30${t(i+s+4)}02${c}${o}02${a}${n}`}},Nn=BigInt(0),Rr=BigInt(1),yV=BigInt(2),J6=BigInt(3),wV=BigInt(4);function gS(r){let e=hS(r),{Fp:t}=e,n=e.toBytes||((h,p,y)=>{let w=p.toAffine();return vn(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(h=>{let p=h.subarray(1),y=t.fromBytes(p.subarray(0,t.BYTES)),w=t.fromBytes(p.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(h){let{a:p,b:y}=e,w=t.sqr(h),b=t.mul(w,h);return t.add(t.add(b,t.mul(h,p)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(h){return typeof h=="bigint"&&Nn<h&&h<e.n}function a(h){if(!i(h))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function c(h){let{allowedPrivateKeyLengths:p,nByteLength:y,wrapPrivateKey:w,n:b}=e;if(p&&typeof h!="bigint"){if(ao(h)&&(h=En(h)),typeof h!="string"||!p.includes(h.length))throw new Error("Invalid key");h=h.padStart(y*2,"0")}let E;try{E=typeof h=="bigint"?h:bn(Ue("private key",h,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof h}`)}return w&&(E=_e(E,b)),a(E),E}let l=new Map;function d(h){if(!(h instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(p,y,w){if(this.px=p,this.py=y,this.pz=w,p==null||!t.isValid(p))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required")}static fromAffine(p){let{x:y,y:w}=p||{};if(!p||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(p instanceof u)throw new Error("projective point not allowed");let b=E=>t.eql(E,t.ZERO);return b(y)&&b(w)?u.ZERO:new u(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let y=t.invertBatch(p.map(w=>w.pz));return p.map((w,b)=>w.toAffine(y[b])).map(u.fromAffine)}static fromHex(p){let y=u.fromAffine(o(Ue("pointHex",p)));return y.assertValidity(),y}static fromPrivateKey(p){return u.BASE.multiply(c(p))}_setWindowSize(p){this._WINDOW_SIZE=p,l.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!t.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:p,y}=this.toAffine();if(!t.isValid(p)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),b=s(p);if(!t.eql(w,b))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:p}=this.toAffine();if(t.isOdd)return!t.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){d(p);let{px:y,py:w,pz:b}=this,{px:E,py:S,pz:_}=p,A=t.eql(t.mul(y,_),t.mul(E,b)),D=t.eql(t.mul(w,_),t.mul(S,b));return A&&D}negate(){return new u(this.px,t.neg(this.py),this.pz)}double(){let{a:p,b:y}=e,w=t.mul(y,J6),{px:b,py:E,pz:S}=this,_=t.ZERO,A=t.ZERO,D=t.ZERO,R=t.mul(b,b),k=t.mul(E,E),O=t.mul(S,S),N=t.mul(b,E);return N=t.add(N,N),D=t.mul(b,S),D=t.add(D,D),_=t.mul(p,D),A=t.mul(w,O),A=t.add(_,A),_=t.sub(k,A),A=t.add(k,A),A=t.mul(_,A),_=t.mul(N,_),D=t.mul(w,D),O=t.mul(p,O),N=t.sub(R,O),N=t.mul(p,N),N=t.add(N,D),D=t.add(R,R),R=t.add(D,R),R=t.add(R,O),R=t.mul(R,N),A=t.add(A,R),O=t.mul(E,S),O=t.add(O,O),R=t.mul(O,N),_=t.sub(_,R),D=t.mul(O,k),D=t.add(D,D),D=t.add(D,D),new u(_,A,D)}add(p){d(p);let{px:y,py:w,pz:b}=this,{px:E,py:S,pz:_}=p,A=t.ZERO,D=t.ZERO,R=t.ZERO,k=e.a,O=t.mul(e.b,J6),N=t.mul(y,E),L=t.mul(w,S),F=t.mul(b,_),Y=t.add(y,w),I=t.add(E,S);Y=t.mul(Y,I),I=t.add(N,L),Y=t.sub(Y,I),I=t.add(y,b);let C=t.add(E,_);return I=t.mul(I,C),C=t.add(N,F),I=t.sub(I,C),C=t.add(w,b),A=t.add(S,_),C=t.mul(C,A),A=t.add(L,F),C=t.sub(C,A),R=t.mul(k,I),A=t.mul(O,F),R=t.add(A,R),A=t.sub(L,R),R=t.add(L,R),D=t.mul(A,R),L=t.add(N,N),L=t.add(L,N),F=t.mul(k,F),I=t.mul(O,I),L=t.add(L,F),F=t.sub(N,F),F=t.mul(k,F),I=t.add(I,F),N=t.mul(L,I),D=t.add(D,N),N=t.mul(C,I),A=t.mul(Y,A),A=t.sub(A,N),N=t.mul(Y,L),R=t.mul(C,R),R=t.add(R,N),new u(A,D,R)}subtract(p){return this.add(p.negate())}is0(){return this.equals(u.ZERO)}wNAF(p){return g.wNAFCached(this,l,p,y=>{let w=t.invertBatch(y.map(b=>b.pz));return y.map((b,E)=>b.toAffine(w[E])).map(u.fromAffine)})}multiplyUnsafe(p){let y=u.ZERO;if(p===Nn)return y;if(a(p),p===Rr)return this;let{endo:w}=e;if(!w)return g.unsafeLadder(this,p);let{k1neg:b,k1:E,k2neg:S,k2:_}=w.splitScalar(p),A=y,D=y,R=this;for(;E>Nn||_>Nn;)E&Rr&&(A=A.add(R)),_&Rr&&(D=D.add(R)),R=R.double(),E>>=Rr,_>>=Rr;return b&&(A=A.negate()),S&&(D=D.negate()),D=new u(t.mul(D.px,w.beta),D.py,D.pz),A.add(D)}multiply(p){a(p);let y=p,w,b,{endo:E}=e;if(E){let{k1neg:S,k1:_,k2neg:A,k2:D}=E.splitScalar(y),{p:R,f:k}=this.wNAF(_),{p:O,f:N}=this.wNAF(D);R=g.constTimeNegate(S,R),O=g.constTimeNegate(A,O),O=new u(t.mul(O.px,E.beta),O.py,O.pz),w=R.add(O),b=k.add(N)}else{let{p:S,f:_}=this.wNAF(y);w=S,b=_}return u.normalizeZ([w,b])[0]}multiplyAndAddUnsafe(p,y,w){let b=u.BASE,E=(_,A)=>A===Nn||A===Rr||!_.equals(b)?_.multiplyUnsafe(A):_.multiply(A),S=E(this,y).add(E(p,w));return S.is0()?void 0:S}toAffine(p){let{px:y,py:w,pz:b}=this,E=this.is0();p==null&&(p=E?t.ONE:t.inv(b));let S=t.mul(y,p),_=t.mul(w,p),A=t.mul(b,p);if(E)return{x:t.ZERO,y:t.ZERO};if(!t.eql(A,t.ONE))throw new Error("invZ was invalid");return{x:S,y:_}}isTorsionFree(){let{h:p,isTorsionFree:y}=e;if(p===Rr)return!0;if(y)return y(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:y}=e;return p===Rr?this:y?y(u,this):this.multiplyUnsafe(e.h)}toRawBytes(p=!0){return this.assertValidity(),n(u,this,p)}toHex(p=!0){return En(this.toRawBytes(p))}}u.BASE=new u(e.Gx,e.Gy,t.ONE),u.ZERO=new u(t.ZERO,t.ONE,t.ZERO);let f=e.nBitLength,g=Il(u,e.endo?Math.ceil(f/2):f);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:i}}function yS(r){let e=ga(r);return xr(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function em(r){let e=yS(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(I){return Nn<I&&I<t.ORDER}function a(I){return _e(I,n)}function c(I){return _l(I,n)}let{ProjectivePoint:l,normPrivateKeyToScalar:d,weierstrassEquation:u,isWithinCurveOrder:f}=gS({...e,toBytes(I,C,$){let T=C.toAffine(),v=t.toBytes(T.x),U=vn;return $?U(Uint8Array.from([C.hasEvenY()?2:3]),v):U(Uint8Array.from([4]),v,t.toBytes(T.y))},fromBytes(I){let C=I.length,$=I[0],T=I.subarray(1);if(C===o&&($===2||$===3)){let v=bn(T);if(!i(v))throw new Error("Point is not on curve");let U=u(v),V;try{V=t.sqrt(U)}catch(se){let de=se instanceof Error?": "+se.message:"";throw new Error("Point is not on curve"+de)}let H=(V&Rr)===Rr;return($&1)===1!==H&&(V=t.neg(V)),{x:v,y:V}}else if(C===s&&$===4){let v=t.fromBytes(T.subarray(0,t.BYTES)),U=t.fromBytes(T.subarray(t.BYTES,2*t.BYTES));return{x:v,y:U}}else throw new Error(`Point of length ${C} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),g=I=>En(co(I,e.nByteLength));function h(I){let C=n>>Rr;return I>C}function p(I){return h(I)?a(-I):I}let y=(I,C,$)=>bn(I.slice(C,$));class w{constructor(C,$,T){this.r=C,this.s=$,this.recovery=T,this.assertValidity()}static fromCompact(C){let $=e.nByteLength;return C=Ue("compactSignature",C,$*2),new w(y(C,0,$),y(C,$,2*$))}static fromDER(C){let{r:$,s:T}=as.toSig(Ue("DER",C));return new w($,T)}assertValidity(){if(!f(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!f(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(C){return new w(this.r,this.s,C)}recoverPublicKey(C){let{r:$,s:T,recovery:v}=this,U=D(Ue("msgHash",C));if(v==null||![0,1,2,3].includes(v))throw new Error("recovery id invalid");let V=v===2||v===3?$+e.n:$;if(V>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let H=v&1?"03":"02",oe=l.fromHex(H+g(V)),se=c(V),de=a(-U*se),ae=a(T*se),le=l.BASE.multiplyAndAddUnsafe(oe,de,ae);if(!le)throw new Error("point at infinify");return le.assertValidity(),le}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new w(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return ts(this.toDERHex())}toDERHex(){return as.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ts(this.toCompactHex())}toCompactHex(){return g(this.r)+g(this.s)}}let b={isValidPrivateKey(I){try{return d(I),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let I=Xh(e.n);return O8(e.randomBytes(I),e.n)},precompute(I=8,C=l.BASE){return C._setWindowSize(I),C.multiply(BigInt(3)),C}};function E(I,C=!0){return l.fromPrivateKey(I).toRawBytes(C)}function S(I){let C=ao(I),$=typeof I=="string",T=(C||$)&&I.length;return C?T===o||T===s:$?T===2*o||T===2*s:I instanceof l}function _(I,C,$=!0){if(S(I))throw new Error("first arg must be private key");if(!S(C))throw new Error("second arg must be public key");return l.fromHex(C).multiply(d(I)).toRawBytes($)}let A=e.bits2int||function(I){let C=bn(I),$=I.length*8-e.nBitLength;return $>0?C>>BigInt($):C},D=e.bits2int_modN||function(I){return a(A(I))},R=ma(e.nBitLength);function k(I){if(typeof I!="bigint")throw new Error("bigint expected");if(!(Nn<=I&&I<R))throw new Error(`bigint expected < 2^${e.nBitLength}`);return co(I,e.nByteLength)}function O(I,C,$=N){if(["recovered","canonical"].some(ke=>ke in $))throw new Error("sign() legacy options not supported");let{hash:T,randomBytes:v}=e,{lowS:U,prehash:V,extraEntropy:H}=$;U==null&&(U=!0),I=Ue("msgHash",I),V&&(I=Ue("prehashed msgHash",T(I)));let oe=D(I),se=d(C),de=[k(se),k(oe)];if(H!=null&&H!==!1){let ke=H===!0?v(t.BYTES):H;de.push(Ue("extraEntropy",ke))}let ae=vn(...de),le=oe;function Be(ke){let gt=A(ke);if(!f(gt))return;let yt=c(gt),ct=l.BASE.multiply(gt).toAffine(),Tt=a(ct.x);if(Tt===Nn)return;let hn=a(yt*a(le+Tt*se));if(hn===Nn)return;let Fo=(ct.x===Tt?0:2)|Number(ct.y&Rr),ea=hn;return U&&h(hn)&&(ea=p(hn),Fo^=1),new w(Tt,ea,Fo)}return{seed:ae,k2sig:Be}}let N={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function F(I,C,$=N){let{seed:T,k2sig:v}=O(I,C,$),U=e;return Wh(U.hash.outputLen,U.nByteLength,U.hmac)(T,v)}l.BASE._setWindowSize(8);function Y(I,C,$,T=L){let v=I;if(C=Ue("msgHash",C),$=Ue("publicKey",$),"strict"in T)throw new Error("options.strict was renamed to lowS");let{lowS:U,prehash:V}=T,H,oe;try{if(typeof v=="string"||ao(v))try{H=w.fromDER(v)}catch(ct){if(!(ct instanceof as.Err))throw ct;H=w.fromCompact(v)}else if(typeof v=="object"&&typeof v.r=="bigint"&&typeof v.s=="bigint"){let{r:ct,s:Tt}=v;H=new w(ct,Tt)}else throw new Error("PARSE");oe=l.fromHex($)}catch(ct){if(ct.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(U&&H.hasHighS())return!1;V&&(C=e.hash(C));let{r:se,s:de}=H,ae=D(C),le=c(de),Be=a(ae*le),ke=a(se*le),gt=l.BASE.multiplyAndAddUnsafe(oe,Be,ke)?.toAffine();return gt?a(gt.x)===se:!1}return{CURVE:e,getPublicKey:E,getSharedSecret:_,sign:F,verify:Y,ProjectivePoint:l,Signature:w,utils:b}}function wS(r){return{hash:r,hmac:(e,...t)=>lo(r,e,El(...t)),randomBytes:es}}function tm(r,e){let t=n=>em({...r,...wS(n)});return Object.freeze({...t(e),create:t})}var om=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),rm=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),ES=BigInt(1),w0=BigInt(2),nm=(r,e)=>(r+e/w0)/e;function bS(r){let e=om,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Me(d,t,e)*d%e,f=Me(u,t,e)*d%e,g=Me(f,w0,e)*l%e,h=Me(g,o,e)*g%e,p=Me(h,s,e)*h%e,y=Me(p,a,e)*p%e,w=Me(y,c,e)*y%e,b=Me(w,a,e)*p%e,E=Me(b,t,e)*d%e,S=Me(E,i,e)*h%e,_=Me(S,n,e)*l%e,A=Me(_,w0,e);if(!E0.eql(E0.sqr(A),r))throw new Error("Cannot find square root");return A}var E0=Al(om,void 0,void 0,{sqrt:bS}),Hr=tm({a:BigInt(0),b:BigInt(7),Fp:E0,n:rm,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=rm,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-ES*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=nm(s*r,e),c=nm(-n*r,e),l=_e(r-a*t-c*o,e),d=_e(-a*n-c*s,e),u=l>i,f=d>i;if(u&&(l=e-l),f&&(d=e-d),l>i||d>i)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},wo),IV=BigInt(0);var DV=Hr.ProjectivePoint;function sm(){return Hr.utils.randomPrivateKey()}function im(r,e){let t=De.digest(e instanceof Uint8Array?e:e.subarray());if(br(t))return t.then(({digest:n})=>Hr.sign(n,r).toDERRawBytes()).catch(n=>{throw new m(String(n),"ERR_INVALID_INPUT")});try{return Hr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new m(String(n),"ERR_INVALID_INPUT")}}function am(r,e,t){let n=De.digest(t instanceof Uint8Array?t:t.subarray());if(br(n))return n.then(({digest:o})=>Hr.verify(e,o,r)).catch(o=>{throw new m(String(o),"ERR_INVALID_INPUT")});try{return Hr.verify(e,n.digest,r)}catch(o){throw new m(String(o),"ERR_INVALID_INPUT")}}function cm(r){return Hr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function lm(r){try{Hr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}function b0(r){try{Hr.ProjectivePoint.fromHex(r)}catch(e){throw new m(String(e),"ERR_INVALID_PUBLIC_KEY")}}function um(r){try{return Hr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}var cs=class{_key;constructor(e){b0(e),this._key=e}verify(e,t){return am(this._key,t,e)}marshal(){return cm(this._key)}get bytes(){return Fr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return br(e)?{bytes:t}=await e:t=e.bytes,t}},ls=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??um(e),lm(this._key),b0(this._publicKey)}sign(e){return im(this._key,e)}get public(){return new cs(this._publicKey)}marshal(){return this._key}get bytes(){return Vr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return J(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return br(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return P(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ni(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function vS(r){return new ls(r)}function RS(r){return new cs(r)}async function SS(){let r=sm();return new ls(r)}var Pn={rsa:g0,ed25519:o0,secp256k1:x0};function v0(r){let e=Object.keys(Pn).join(" / ");return new m(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function R0(r){if(r=r.toLowerCase(),r==="rsa"||r==="ed25519"||r==="secp256k1")return Pn[r];throw v0(r)}async function Ta(r,e){return R0(r).generateKeyPair(e??2048)}async function _S(r,e,t){if(r.toLowerCase()!=="ed25519")throw new m("Seed key derivation is unimplemented for RSA or secp256k1","ERR_UNSUPPORTED_KEY_DERIVATION_TYPE");return n0(e)}function qr(r){let e=Fr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return Pn.rsa.unmarshalRsaPublicKey(t);case Fe.Ed25519:return Pn.ed25519.unmarshalEd25519PublicKey(t);case Fe.Secp256k1:return Pn.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw v0(e.Type??"unknown")}}function S0(r,e){return e=(e??"rsa").toLowerCase(),R0(e),r.bytes}async function Sr(r){let e=Vr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return Pn.rsa.unmarshalRsaPrivateKey(t);case Fe.Ed25519:return Pn.ed25519.unmarshalEd25519PrivateKey(t);case Fe.Secp256k1:return Pn.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw v0(e.Type??"RSA")}}function _0(r,e){return e=(e??"rsa").toLowerCase(),R0(e),r.bytes}async function ui(r,e){try{let t=await J8(r,e);return await Sr(t)}catch{}if(!r.includes("BEGIN"))throw new m("Encrypted key was not a libp2p-key or a PEM file","ERR_INVALID_IMPORT_FORMAT");return h0(r,e)}var s_=Ye(Wo(),1);var On="/",dm=new TextEncoder().encode(On),Ru=dm[0],Oe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=B(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]!==Ru)throw new Error("Invalid key")}toString(e="utf8"){return P(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(On))}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=dm),this._buf[0]!==Ru){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Ru,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Ru;)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 s=t[o],i=n[o];if(s<i)return!0;if(s>i)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(On).slice(1)}type(){return AS(this.baseNamespace())}name(){return IS(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(On)||(e+=On),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(On):new r(e.slice(0,-1).join(On))}child(e){return this.toString()===On?e:e.toString()===On?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(),...DS(e.map(t=>t.namespaces()))])}};function AS(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function IS(r){let e=r.split(":");return e[e.length-1]}function DS(r){return[].concat(...r)}var i_=Ye(Su(),1);var fm="ERR_IPNS_EXPIRED_RECORD",_u="ERR_UNRECOGNIZED_VALIDITY";var Ln="ERR_SIGNATURE_VERIFICATION";var I0="ERR_UNDEFINED_PARAMETER",hm="ERR_INVALID_RECORD_DATA",pm="ERR_INVALID_VALUE",mm="ERR_INVALID_EMBEDDED_KEY";var gm="ERR_RECORD_TOO_LARGE";var Gt;(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=()=>$e(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.value=o.bytes();break;case 2:i.signatureV1=o.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(o);break;case 4:i.validity=o.bytes();break;case 5:i.sequence=o.uint64();break;case 6:i.ttl=o.uint64();break;case 7:i.pubKey=o.bytes();break;case 8:i.signatureV2=o.bytes();break;case 9:i.data=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(Gt||(Gt={}));var TS=["string","number","bigint","symbol"],kS=["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 wm(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(TS.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(CS(r))return"Buffer";let t=NS(r);return t||"Object"}function CS(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function NS(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(kS.includes(e))return e}var x=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}};x.uint=new x(0,"uint",!0);x.negint=new x(1,"negint",!0);x.bytes=new x(2,"bytes",!0);x.string=new x(3,"string",!0);x.array=new x(4,"array",!1);x.map=new x(5,"map",!1);x.tag=new x(6,"tag",!1);x.float=new x(7,"float",!0);x.false=new x(7,"false",!0);x.true=new x(7,"true",!0);x.null=new x(7,"null",!0);x.undefined=new x(7,"undefined",!0);x.break=new x(7,"break",!0);var M=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 di=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",PS=new TextDecoder,OS=new TextEncoder;function Au(r){return di&&globalThis.Buffer.isBuffer(r)}function ka(r){return r instanceof Uint8Array?Au(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var vm=di?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):bm(r,e,t):(r,e,t)=>t-e>64?PS.decode(r.subarray(e,t)):bm(r,e,t),Iu=di?r=>r.length>64?globalThis.Buffer.from(r):Em(r):r=>r.length>64?OS.encode(r):Em(r),an=r=>Uint8Array.from(r),fi=di?(r,e,t)=>Au(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),Rm=di?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),ka(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},Sm=di?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function _m(r,e){if(Au(r)&&Au(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 Em(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 bm(r,e,t){let n=[];for(;e<t;){let o=r[e],s=null,i=o>239?4:o>223?3:o>191?2:1;if(e+i<=t){let a,c,l,d;switch(i){case 1:o<128&&(s=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(s=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,i=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),e+=i}return D0(n)}var xm=4096;function D0(r){let e=r.length;if(e<=xm)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=xm));return t}var LS=256,Ca=class{constructor(e=LS){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=Sm(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=fi(n,0,this.cursor)}else t=Rm(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",hi="CBOR encode error:",Na=[];Na[23]=1;Na[24]=2;Na[25]=3;Na[26]=5;Na[27]=9;function Bn(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var mt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function sr(r,e,t){Bn(r,e,1);let n=r[e];if(t.strict===!0&&n<mt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function ir(r,e,t){Bn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<mt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function ar(r,e,t){Bn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<mt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function cr(r,e,t){Bn(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],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<mt[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function Am(r,e,t,n){return new M(x.uint,sr(r,e+1,n),2)}function Im(r,e,t,n){return new M(x.uint,ir(r,e+1,n),3)}function Dm(r,e,t,n){return new M(x.uint,ar(r,e+1,n),5)}function Tm(r,e,t,n){return new M(x.uint,cr(r,e+1,n),9)}function _r(r,e){return vt(r,0,e.value)}function vt(r,e,t){if(t<mt[0]){let n=Number(t);r.push([e|n])}else if(t<mt[1]){let n=Number(t);r.push([e|24,n])}else if(t<mt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<mt[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<mt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}_r.encodedSize=function(e){return vt.encodedSize(e.value)};vt.encodedSize=function(e){return e<mt[0]?1:e<mt[1]?2:e<mt[2]?3:e<mt[3]?5:9};_r.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function km(r,e,t,n){return new M(x.negint,-1-sr(r,e+1,n),2)}function Cm(r,e,t,n){return new M(x.negint,-1-ir(r,e+1,n),3)}function Nm(r,e,t,n){return new M(x.negint,-1-ar(r,e+1,n),5)}var T0=BigInt(-1),Pm=BigInt(1);function Om(r,e,t,n){let o=cr(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new M(x.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new M(x.negint,T0-BigInt(o),9)}function Du(r,e){let t=e.value,n=typeof t=="bigint"?t*T0-Pm:t*-1-1;vt(r,e.type.majorEncoded,n)}Du.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*T0-Pm:t*-1-1;return n<mt[0]?1:n<mt[1]?2:n<mt[2]?3:n<mt[3]?5:9};Du.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Pa(r,e,t,n){Bn(r,e,t+n);let o=fi(r,e+t,e+t+n);return new M(x.bytes,o,t+n)}function Lm(r,e,t,n){return Pa(r,e,1,t)}function Bm(r,e,t,n){return Pa(r,e,2,sr(r,e+1,n))}function Um(r,e,t,n){return Pa(r,e,3,ir(r,e+1,n))}function Mm(r,e,t,n){return Pa(r,e,5,ar(r,e+1,n))}function Fm(r,e,t,n){let o=cr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Pa(r,e,9,o)}function Tu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===x.string?Iu(r.value):r.value),r.encodedBytes}function pi(r,e){let t=Tu(e);vt(r,e.type.majorEncoded,t.length),r.push(t)}pi.encodedSize=function(e){let t=Tu(e);return vt.encodedSize(t.length)+t.length};pi.compareTokens=function(e,t){return US(Tu(e),Tu(t))};function US(r,e){return r.length<e.length?-1:r.length>e.length?1:_m(r,e)}function Oa(r,e,t,n,o){let s=t+n;Bn(r,e,s);let i=new M(x.string,vm(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=fi(r,e+t,e+s)),i}function Vm(r,e,t,n){return Oa(r,e,1,t,n)}function Km(r,e,t,n){return Oa(r,e,2,sr(r,e+1,n),n)}function $m(r,e,t,n){return Oa(r,e,3,ir(r,e+1,n),n)}function Hm(r,e,t,n){return Oa(r,e,5,ar(r,e+1,n),n)}function qm(r,e,t,n){let o=cr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Oa(r,e,9,o,n)}var Wm=pi;function mi(r,e,t,n){return new M(x.array,n,t)}function Gm(r,e,t,n){return mi(r,e,1,t)}function zm(r,e,t,n){return mi(r,e,2,sr(r,e+1,n))}function Ym(r,e,t,n){return mi(r,e,3,ir(r,e+1,n))}function Qm(r,e,t,n){return mi(r,e,5,ar(r,e+1,n))}function Xm(r,e,t,n){let o=cr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return mi(r,e,9,o)}function jm(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return mi(r,e,1,1/0)}function ku(r,e){vt(r,x.array.majorEncoded,e.value)}ku.compareTokens=_r.compareTokens;ku.encodedSize=function(e){return vt.encodedSize(e.value)};function gi(r,e,t,n){return new M(x.map,n,t)}function Zm(r,e,t,n){return gi(r,e,1,t)}function Jm(r,e,t,n){return gi(r,e,2,sr(r,e+1,n))}function e5(r,e,t,n){return gi(r,e,3,ir(r,e+1,n))}function t5(r,e,t,n){return gi(r,e,5,ar(r,e+1,n))}function r5(r,e,t,n){let o=cr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return gi(r,e,9,o)}function n5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return gi(r,e,1,1/0)}function Cu(r,e){vt(r,x.map.majorEncoded,e.value)}Cu.compareTokens=_r.compareTokens;Cu.encodedSize=function(e){return vt.encodedSize(e.value)};function o5(r,e,t,n){return new M(x.tag,t,1)}function s5(r,e,t,n){return new M(x.tag,sr(r,e+1,n),2)}function i5(r,e,t,n){return new M(x.tag,ir(r,e+1,n),3)}function a5(r,e,t,n){return new M(x.tag,ar(r,e+1,n),5)}function c5(r,e,t,n){return new M(x.tag,cr(r,e+1,n),9)}function Nu(r,e){vt(r,x.tag.majorEncoded,e.value)}Nu.compareTokens=_r.compareTokens;Nu.encodedSize=function(e){return vt.encodedSize(e.value)};var HS=20,qS=21,WS=22,GS=23;function l5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new M(x.null,null,1):new M(x.undefined,void 0,1)}function u5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new M(x.break,void 0,1)}function k0(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new M(x.float,r,e)}function d5(r,e,t,n){return k0(C0(r,e+1),3,n)}function f5(r,e,t,n){return k0(N0(r,e+1),5,n)}function h5(r,e,t,n){return k0(y5(r,e+1),9,n)}function Pu(r,e,t){let n=e.value;if(n===!1)r.push([x.float.majorEncoded|HS]);else if(n===!0)r.push([x.float.majorEncoded|qS]);else if(n===null)r.push([x.float.majorEncoded|WS]);else if(n===void 0)r.push([x.float.majorEncoded|GS]);else{let o,s=!1;(!t||t.float64!==!0)&&(m5(n),o=C0(Wr,1),n===o||Number.isNaN(n)?(Wr[0]=249,r.push(Wr.slice(0,3)),s=!0):(g5(n),o=N0(Wr,1),n===o&&(Wr[0]=250,r.push(Wr.slice(0,5)),s=!0))),s||(zS(n),o=y5(Wr,1),Wr[0]=251,r.push(Wr.slice(0,9)))}}Pu.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){m5(n);let o=C0(Wr,1);if(n===o||Number.isNaN(n))return 3;if(g5(n),o=N0(Wr,1),n===o)return 5}return 9};var p5=new ArrayBuffer(9),Ar=new DataView(p5,1),Wr=new Uint8Array(p5,0);function m5(r){if(r===1/0)Ar.setUint16(0,31744,!1);else if(r===-1/0)Ar.setUint16(0,64512,!1);else if(Number.isNaN(r))Ar.setUint16(0,32256,!1);else{Ar.setFloat32(0,r);let e=Ar.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Ar.setUint16(0,31744,!1);else if(t===0)Ar.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Ar.setUint16(0,0):o<-14?Ar.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Ar.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function C0(r,e){if(r.length-e<2)throw new Error(`${Q} 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,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function g5(r){Ar.setFloat32(0,r,!1)}function N0(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function zS(r){Ar.setFloat64(0,r,!1)}function y5(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Pu.compareTokens=_r.compareTokens;function ve(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ou(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=ve;K[24]=Am;K[25]=Im;K[26]=Dm;K[27]=Tm;K[28]=ve;K[29]=ve;K[30]=ve;K[31]=ve;for(let r=32;r<=55;r++)K[r]=ve;K[56]=km;K[57]=Cm;K[58]=Nm;K[59]=Om;K[60]=ve;K[61]=ve;K[62]=ve;K[63]=ve;for(let r=64;r<=87;r++)K[r]=Lm;K[88]=Bm;K[89]=Um;K[90]=Mm;K[91]=Fm;K[92]=ve;K[93]=ve;K[94]=ve;K[95]=Ou("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=Vm;K[120]=Km;K[121]=$m;K[122]=Hm;K[123]=qm;K[124]=ve;K[125]=ve;K[126]=ve;K[127]=Ou("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=Gm;K[152]=zm;K[153]=Ym;K[154]=Qm;K[155]=Xm;K[156]=ve;K[157]=ve;K[158]=ve;K[159]=jm;for(let r=160;r<=183;r++)K[r]=Zm;K[184]=Jm;K[185]=e5;K[186]=t5;K[187]=r5;K[188]=ve;K[189]=ve;K[190]=ve;K[191]=n5;for(let r=192;r<=215;r++)K[r]=o5;K[216]=s5;K[217]=i5;K[218]=a5;K[219]=c5;K[220]=ve;K[221]=ve;K[222]=ve;K[223]=ve;for(let r=224;r<=243;r++)K[r]=Ou("simple values are not supported");K[244]=ve;K[245]=ve;K[246]=ve;K[247]=l5;K[248]=Ou("simple values are not supported");K[249]=d5;K[250]=f5;K[251]=h5;K[252]=ve;K[253]=ve;K[254]=ve;K[255]=u5;var Gr=[];for(let r=0;r<24;r++)Gr[r]=new M(x.uint,r,1);for(let r=-1;r>=-24;r--)Gr[31-r]=new M(x.negint,r,1);Gr[64]=new M(x.bytes,new Uint8Array(0),1);Gr[96]=new M(x.string,"",1);Gr[128]=new M(x.array,0,1);Gr[160]=new M(x.map,0,1);Gr[244]=new M(x.false,!1,1);Gr[245]=new M(x.true,!0,1);Gr[246]=new M(x.null,null,1);function w5(r){switch(r.type){case x.false:return an([244]);case x.true:return an([245]);case x.null:return an([246]);case x.bytes:return r.value.length?void 0:an([64]);case x.string:return r.value===""?an([96]):void 0;case x.array:return r.value===0?an([128]):void 0;case x.map:return r.value===0?an([160]):void 0;case x.uint:return r.value<24?an([Number(r.value)]):void 0;case x.negint:if(r.value>=-24)return an([31-Number(r.value)])}}var QS={float64:!1,mapSorter:ZS,quickEncodeToken:w5};function XS(){let r=[];return r[x.uint.major]=_r,r[x.negint.major]=Du,r[x.bytes.major]=pi,r[x.string.major]=Wm,r[x.array.major]=ku,r[x.map.major]=Cu,r[x.tag.major]=Nu,r[x.float.major]=Pu,r}var E5=XS(),P0=new Ca,Bu=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(`${hi} object contains circular references`);return new r(t,e)}},Eo={null:new M(x.null,null),undefined:new M(x.undefined,void 0),true:new M(x.true,!0),false:new M(x.false,!1),emptyArray:new M(x.array,0),emptyMap:new M(x.map,0)},bo={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new M(x.float,r):r>=0?new M(x.uint,r):new M(x.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new M(x.uint,r):new M(x.negint,r)},Uint8Array(r,e,t,n){return new M(x.bytes,r)},string(r,e,t,n){return new M(x.string,r)},boolean(r,e,t,n){return r?Eo.true:Eo.false},null(r,e,t,n){return Eo.null},undefined(r,e,t,n){return Eo.undefined},ArrayBuffer(r,e,t,n){return new M(x.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new M(x.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Eo.emptyArray,new M(x.break)]:Eo.emptyArray;n=Bu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=Lu(i,t,n);return t.addBreakTokens?[new M(x.array,r.length),o,new M(x.break)]:[new M(x.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length;if(!i)return t.addBreakTokens===!0?[Eo.emptyMap,new M(x.break)]:Eo.emptyMap;n=Bu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[Lu(l,t,n),Lu(o?r.get(l):r[l],t,n)];return jS(a,t),t.addBreakTokens?[new M(x.map,i),a,new M(x.break)]:[new M(x.map,i),a]}};bo.Map=bo.Object;bo.Buffer=bo.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))bo[`${r}Array`]=bo.DataView;function Lu(r,e={},t){let n=wm(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||bo[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=bo[n];if(!s)throw new Error(`${hi} unsupported type: ${n}`);return s(r,n,e,t)}function jS(r,e){e.mapSorter&&r.sort(e.mapSorter)}function ZS(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,s=E5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function b5(r,e,t,n){if(Array.isArray(e))for(let o of e)b5(r,o,t,n);else t[e.type.major](r,e,n)}function x5(r,e,t){let n=Lu(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let s=e[n.type.major];if(s.encodedSize){let i=s.encodedSize(n,t),a=new Ca(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return ka(a.chunks[0])}}return P0.reset(),b5(P0,n,e,t),P0.toBytes(!0)}function yi(r,e){return e=Object.assign({},QS,e),x5(r,E5,e)}var JS={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Uu=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=Gr[e];if(t===void 0){let n=K[e];if(!n)throw new Error(`${Q} 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}},La=Symbol.for("DONE"),Mu=Symbol.for("BREAK");function e_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=wi(e,t);if(s===Mu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===La)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function t_(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=wi(e,t);if(a===Mu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===La)throw new Error(`${Q} found map but not enough entries (got ${i} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&s.has(a)||!n&&a in o))throw new Error(`${Q} found repeat map key "${a}"`);let c=wi(e,t);if(c===La)throw new Error(`${Q} found map but not enough entries (got ${i} [no value], expected ${r.value})`);n?s.set(a,c):o[a]=c}return n?s:o}function wi(r,e){if(r.done())return La;let t=r.next();if(t.type===x.break)return Mu;if(t.type.terminal)return t.value;if(t.type===x.array)return e_(t,r,e);if(t.type===x.map)return t_(t,r,e);if(t.type===x.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=wi(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function O0(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},JS,e);let t=e.tokenizer||new Uu(r,e),n=wi(t,e);if(n===La)throw new Error(`${Q} did not find any content to decode`);if(n===Mu)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Ir(r,e){let[t,n]=O0(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var lr=Ye(Wo(),1);var v5=nr("ipns:utils"),R5=B("/ipns/"),r_=114,S5=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw v5.error(n),(0,lr.default)(n,I0)}let t;if(e.pubKey!=null){try{t=qr(e.pubKey)}catch(o){throw v5.error(o),o}if(!(await ht(e.pubKey)).equals(r))throw(0,lr.default)(new Error("Embedded public key did not match PeerID"),mm)}else r.publicKey!=null&&(t=qr(r.publicKey));if(t!=null)return t;throw(0,lr.default)(new Error("no public key is available"),I0)};var _5=r=>{let e=B("ipns-signature:");return xe([e,r])},Ba=r=>"signatureV1"in r?Gt.encode({value:B(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:B(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Gt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data});function cn(r){let e=Gt.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(0,lr.default)(new Error("missing data or signatureV2"),Ln);let t=I5(e.data),n=n_(t.Value),o=P(t.Validity);if(e.value!=null&&e.signatureV1!=null)return o_(e),{value:n,validityType:Gt.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:Gt.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")}var L0=r=>xe([R5,r.toBytes()]),A5=r=>je(r.slice(R5.length));var I5=r=>{let e=Ir(r);if(e.ValidityType===0)e.ValidityType=Gt.ValidityType.EOL;else throw(0,lr.default)(new Error("Unknown validity type"),_u);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},n_=r=>{if(r!=null){if(Ns(r))return`/ipns/${r.toCID().toString(Xn)}`;if(r instanceof Uint8Array){let n=P(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=ce.asCID(r);if(t!=null)return t.code===r_?`/ipns/${t.toString(Xn)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${ce.decode(r).toV1().toString()}`:`/ipfs/${ce.parse(e).toV1().toString()}`}catch{}}throw(0,lr.default)(new Error("Value must be a valid content path starting with /"),pm)},o_=r=>{if(r.data==null)throw(0,lr.default)(new Error("Record data is missing"),hm);let e=I5(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw(0,lr.default)(new Error('Field "value" did not match between protobuf and CBOR'),Ln);if(!J(e.Validity,r.validity??new Uint8Array(0)))throw(0,lr.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Ln);if(e.ValidityType!==r.validityType)throw(0,lr.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Ln);if(e.Sequence!==r.sequence)throw(0,lr.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Ln);if(e.TTL!==r.ttl)throw(0,lr.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Ln)};var g$=nr("ipns"),y$=mr.code,w$=60*60*1e9,a_="/ipns/",E$=a_.length;var Ua=Ye(Wo(),1),D5=Ye(Su(),1);var Vu=nr("ipns:validator"),c_=1024*10,l_=async(r,e)=>{let t=cn(e),n;try{let o=_5(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Vu.error("record signature verification failed"),(0,Ua.default)(new Error("record signature verification failed"),Ln);if(t.validityType===Gt.ValidityType.EOL){if(D5.default.fromString(t.validity).toDate().getTime()<Date.now())throw Vu.error("record has expired"),(0,Ua.default)(new Error("record has expired"),fm)}else if(t.validityType!=null)throw Vu.error("unrecognized validity type"),(0,Ua.default)(new Error("unrecognized validity type"),_u);Vu("ipns record for %s is valid",t.value)};async function Ku(r,e){if(e.byteLength>c_)throw(0,Ua.default)(new Error("record too large"),gm);let t=A5(r),n=cn(e),o=await S5(t,n);await l_(o,e)}async function*Ma(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let s=n.split(e);n=s.pop()??"";for(let i=0;i<s.length;i++)yield JSON.parse(s[i])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}var U0=Ye(k5(),1);var xo=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},M0=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},C5=r=>globalThis.DOMException===void 0?new M0(r):new DOMException(r),N5=r=>{let e=r.reason===void 0?C5("This operation was aborted."):r.reason;return e instanceof Error?e:C5(e)};function zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout}}=e,i,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(N5(f)),f.addEventListener("abort",()=>{d(N5(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new xo;i=s.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{s.clearTimeout.call(void 0,i),i=void 0},c}function F0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Va=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=F0(this.#e,n,(s,i)=>i.priority-s.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var zt=class extends U0.default{#e;#t;#r=0;#i;#c;#p=0;#o;#l;#n;#m;#s=0;#u;#a;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Va,...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.#i=e.intervalCap,this.#c=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.#a=e.autoStart===!1}get#E(){return this.#t||this.#r<this.#i}get#b(){return this.#s<this.#u}#x(){this.#s--,this.#d(),this.emit("next")}#v(){this.#w(),this.#y(),this.#l=void 0}get#R(){let e=Date.now();if(this.#o===void 0){let t=this.#p-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#l===void 0&&(this.#l=setTimeout(()=>{this.#v()},t)),!0}return!1}#d(){if(this.#n.size===0)return this.#o&&clearInterval(this.#o),this.#o=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#a){let e=!this.#R;if(this.#E&&this.#b){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#o!==void 0||(this.#o=setInterval(()=>{this.#w()},this.#c),this.#p=Date.now()+this.#c)}#w(){this.#r===0&&this.#s===0&&this.#o&&(clearInterval(this.#o),this.#o=void 0),this.#r=this.#e?this.#s:0,this.#f()}#f(){for(;this.#d(););}get concurrency(){return this.#u}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.#u=e,this.#f()}async#S(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let s=e({signal:t.signal});t.timeout&&(s=zr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#S(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof xo&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#x()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#a?(this.#a=!1,this.#f(),this):this}pause(){this.#a=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#h("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#h("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#h("idle")}async#h(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.#a}};function f_(r){return r[Symbol.asyncIterator]!=null}function h_(r){if(f_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var ds=h_;var V0=B("/ipns/");function P5(r){return J(r.subarray(0,V0.byteLength),V0)}var O5=r=>je(r.slice(V0.length)),Hu=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*bt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!P5(e))return;let o=O5(e),s=cn(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!P5(e))throw new m("Not found","ERR_NOT_FOUND");let n=O5(e);try{let o=await this.client.getIPNS(n,t);return Ba(o)}catch(o){throw o.code==="ERR_BAD_RESPONSE"?new m("Not found","ERR_NOT_FOUND"):o}}},qu=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await ds(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){}};var Yt=nr("delegated-routing-v1-http-api-client"),L5={concurrentRequests:4,timeout:3e4},Wu=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,ie(1/0,this.shutDownController.signal),this.httpQueue=new zt({concurrency:t.concurrentRequests??L5.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??L5.timeout,this.contentRouting=new Hu(this),this.peerRouting=new qu(this)}get[Jr](){return this.contentRouting}get[en](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){Yt("getProviders starts: %c",e);let n=ot([this.shutDownController.signal,t.signal,AbortSignal.timeout(this.timeout)]),o=j(),s=j();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let i=`${this.clientUrl}routing/v1/providers/${e.toString()}`,c=await fetch(i,{headers:{Accept:"application/x-ndjson"},signal:n});if(c.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(c.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(c.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(c.headers.get("Content-Type")==="application/json"){let d=await c.json();for(let u of d.Providers){let f=this.#e(u);f!=null&&(yield f)}}else for await(let d of Ma(gl(c.body))){let u=this.#e(d);u!=null&&(yield u)}}catch(i){Yt.error("getProviders errored:",i)}finally{n.clear(),s.resolve(),Yt("getProviders finished: %c",e)}}async*getPeers(e,t={}){Yt("getPeers starts: %c",e);let n=ot([this.shutDownController.signal,t.signal,AbortSignal.timeout(this.timeout)]),o=j(),s=j();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let i=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,c=await fetch(i,{headers:{Accept:"application/x-ndjson"},signal:n});if(c.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(c.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(c.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(c.headers.get("Content-Type")==="application/json"){let d=await c.json();for(let u of d.Peers){let f=this.#e(u);f!=null&&(yield f)}}else for await(let d of Ma(gl(c.body))){let u=this.#e(d);u!=null&&(yield u)}}catch(i){Yt.error("getPeers errored:",i)}finally{n.clear(),s.resolve(),Yt("getPeers finished: %c",e)}}async getIPNS(e,t={}){Yt("getIPNS starts: %c",e);let n=ot([this.shutDownController.signal,t.signal,AbortSignal.timeout(this.timeout)]),o=j(),s=j();this.httpQueue.add(async()=>(o.resolve(),s.promise));let i=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await o.promise;let c=await fetch(i,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:n});if(Yt("getIPNS GET %s %d",i,c.status),c.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(c.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(c.body==null)throw new m("GET ipns response had no body","ERR_BAD_RESPONSE");let l=await c.arrayBuffer(),d=new Uint8Array(l,0,l.byteLength);return t.validate!==!1&&await Ku(L0(e),d),cn(d)}catch(a){throw Yt.error("getIPNS GET %s error:",i,a),a}finally{n.clear(),s.resolve(),Yt("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){Yt("putIPNS starts: %c",e);let o=ot([this.shutDownController.signal,n.signal,AbortSignal.timeout(this.timeout)]),s=j(),i=j();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await s.promise;let c=Ba(t),d=await fetch(a,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:c,signal:o});if(Yt("putIPNS PUT %s %d",a,d.status),d.status!==200)throw new m("PUT ipns response had status other than 200","ERR_BAD_RESPONSE")}catch(c){throw Yt.error("putIPNS PUT %s error:",a,c.stack),c}finally{o.clear(),i.resolve(),Yt("putIPNS finished: %c",e)}}#e(e){let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:ge(e.ID),Addrs:n,Protocols:t}}};function B5(r,e={}){return new Wu(new URL(r),e)}var K0=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function $0(r){return new K0(r)}var fs={};pe(fs,{abortedError:()=>w_,closeFailedError:()=>m_,deleteFailedError:()=>q0,getFailedError:()=>g_,hasFailedError:()=>y_,notFoundError:()=>vo,openFailedError:()=>p_,putFailedError:()=>H0});var Un=Ye(Wo(),1);function p_(r){return r=r??new Error("Open failed"),(0,Un.default)(r,"ERR_OPEN_FAILED")}function m_(r){return r=r??new Error("Close failed"),(0,Un.default)(r,"ERR_CLOSE_FAILED")}function H0(r){return r=r??new Error("Put failed"),(0,Un.default)(r,"ERR_PUT_FAILED")}function g_(r){return r=r??new Error("Get failed"),(0,Un.default)(r,"ERR_GET_FAILED")}function q0(r){return r=r??new Error("Delete failed"),(0,Un.default)(r,"ERR_DELETE_FAILED")}function y_(r){return r=r??new Error("Has failed"),(0,Un.default)(r,"ERR_HAS_FAILED")}function vo(r){return r=r??new Error("Not Found"),(0,Un.default)(r,"ERR_NOT_FOUND")}function w_(r){return r=r??new Error("Aborted"),(0,Un.default)(r,"ERR_ABORTED")}var ln=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 Ka=class extends ln{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(lt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(lt.encode(e.multihash.bytes));if(t==null)throw vo();return t}has(e){return this.data.has(lt.encode(e.multihash.bytes))}async delete(e){this.data.delete(lt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:ce.createV1(Oc,Pr(lt.decode(e))),block:t}}};var E_=nr("blockstore:core:tiered"),$a=class extends ln{stores;constructor(e){super(),this.stores=e.slice()}async put(e,t,n){try{return await Promise.all(this.stores.map(async o=>{await o.put(e,t,n)})),e}catch(o){throw H0(o)}}async get(e,t){for(let n of this.stores)try{let o=await n.get(e,t);if(o!=null)return o}catch(o){E_.error(o)}throw vo()}async has(e,t){for(let n of this.stores)if(await n.has(e,t))return!0;return!1}async delete(e,t){try{await Promise.all(this.stores.map(async n=>{await n.delete(e,t)}))}catch(n){throw q0(n)}}async*putMany(e,t={}){let n,o=this.stores.map(s=>{let i=st({objectMode:!0});return Kt(s.putMany(i,t)).catch(a=>{n=a}),i});try{for await(let s of e){if(n!=null)throw n;o.forEach(i=>i.push(s)),yield s.cid}}finally{o.forEach(s=>s.end())}}async*deleteMany(e,t={}){let n,o=this.stores.map(s=>{let i=st({objectMode:!0});return Kt(s.deleteMany(i,t)).catch(a=>{n=a}),i});try{for await(let s of e){if(n!=null)throw n;o.forEach(i=>i.push(s)),yield s}}finally{o.forEach(s=>s.end())}}async*getAll(e){let t=new Set;yield*Nt(ft(...this.stores.map(n=>n.getAll(e))),n=>{let o=n.cid.toString();return t.has(o)?!1:(t.add(o),!0)})}};var NH={...fs};var U5=Ye(Wo(),1);function Gu(r){return r=r??new Error("Not Found"),(0,U5.default)(r,"ERR_NOT_FOUND")}var M5="SHARDING";function x_(r){return r[Symbol.asyncIterator]!=null}function v_(r,e){return x_(r)?async function*(){yield*(await eo(r)).sort(e)}():function*(){yield*eo(r).sort(e)}()}var zu=v_;var Mn=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 Kt(this.putMany(e,n)),e=[],await Kt(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=Nt(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Nt(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>zu(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Nt(n,()=>o++>=s)}return e.limit!=null&&(n=Zn(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Nt(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Nt(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>zu(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Nt(n,()=>s++>=o)}return e.limit!=null&&(n=Zn(n,e.limit)),n}};var hs=class extends Mn{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 Gu();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 Oe(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Oe(e)}};var aq=new Oe(M5);var Eq=nr("datastore:core:tiered");function Yu(r){let e=[ur.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var W0=60;function Qu(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:ur[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:ur[e.type],TTL:e.TTL??e.ttl??W0,data:e.data instanceof Uint8Array?P(e.data):e.data}))}}var __=4;function G0(r,e={}){let t=new zt({concurrency:e.queryConcurrency??__});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Yu(o.types).forEach(a=>{s.append("type",ur[a])}),o.onProgress?.(new me("dns:query",{detail:n}));let i=await t.add(async()=>{let a=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Qu(await a.json());return o.onProgress?.(new me("dns:response",{detail:c})),c},{signal:o.signal});if(i==null)throw new Error("No DNS response received");return i}}function V5(){return[G0("https://cloudflare-dns.com/dns-query"),G0("https://dns.google/resolve")]}var $5=Ye(z0(),1);var Y0=class{lru;constructor(e){this.lru=(0,$5.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Qu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:ur[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??W0)*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 H5(r){return new Y0(r)}var A_=1e3,Xu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=H5(e.cacheSize??A_),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["."]=V5())}async query(e,t={}){let n=Yu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new me("dns:cache",{detail:o})),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new me("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var ur;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(ur||(ur={}));function ju(r={}){return new Xu(r)}var z5="/pin/",q5="/pinned-block/",Q0=Xn,W5=1;function G5(r){return r.version===0&&(r=r.toV1()),new Oe(`${z5}${r.toString(Q0)}`)}var Zu=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=G5(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 s=new mn({concurrency:W5});for await(let a of this.#e(e,s,{...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 i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,yi(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=this.dagWalkers[e.code];if(o==null)throw new Error(`No dag walker found for cid codec ${e.code}`);let s=await this.blockstore.get(e,n);yield e;for await(let i of o.walk(s))yield*await t.add(async()=>this.#e(i,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Oe(`${q5}${Q0.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Ir(await this.datastore.get(o,n))}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,yi(s),n),n.onProgress?.(new me("helia:pin:add",e))}}async*rm(e,t={}){let n=G5(e),o=await this.datastore.get(n,t),s=Ir(o);await this.datastore.delete(n,t);let i=new mn({concurrency:W5});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:z5+(e.cid!=null?`${e.cid.toString(Xn)}`:"")},e)){let o=ce.parse(t.toString().substring(5),Xn),s=Ir(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Oe(`${q5}${Q0.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var Ju=class{log;routers;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[]}async start(){await zn(...this.routers)}async stop(){await Yn(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of ft(...Ei(this.routers,"findProviders").map(o=>o.findProviders(e,t))))n!=null&&(yield n)}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");await Promise.all(Ei(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(Ei(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(Ei(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=this,o=ft(...Ei(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new m("Could not find peer in routing","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of ft(...Ei(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function Ei(r,e){return r.filter(t=>t[e]!=null)}var Ro={},bi=r=>{r.addEventListener("message",e=>{bi.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{bi.dispatchEvent("message",r,e)})};bi.addEventListener=(r,e)=>{Ro[r]==null&&(Ro[r]=[]),Ro[r].push(e)};bi.removeEventListener=(r,e)=>{Ro[r]!=null&&(Ro[r]=Ro[r].filter(t=>t===e))};bi.dispatchEvent=function(r,e,t){Ro[r]!=null&&Ro[r].forEach(n=>n(e,t))};var X0=bi;var j0="lock:worker:request-read",Z0="lock:worker:release-read",J0="lock:master:grant-read",e2="lock:worker:request-write",t2="lock:worker:release-write",r2="lock:master:grant-write";var Y5=(r=21)=>Math.random().toString().substring(2);var Q5=(r,e,t,n,o)=>(s,i)=>{if(i.data.type!==t)return;let a={type:i.data.type,name:i.data.name,identifier:i.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{s.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(s.removeEventListener("message",l),c())};s.addEventListener("message",l)})}}}))},X5=(r,e,t,n)=>async()=>{let o=Y5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(s=>{let i=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",i),s(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",i)})},I_={singleProcess:!1},j5=r=>{if(r=Object.assign({},I_,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return X0.addEventListener("message",Q5(t,"requestReadLock",j0,Z0,J0)),X0.addEventListener("message",Q5(t,"requestWriteLock",e2,t2,r2)),t}return{isWorker:!0,readLock:t=>X5(t,j0,J0,Z0),writeLock:t=>X5(t,e2,r2,t2)}};var ps={},So;async function n2(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var D_=(r,e)=>{if(So.isWorker===!0)return{readLock:So.readLock(r,e),writeLock:So.writeLock(r,e)};let t=new zt({concurrency:1}),n;return{async readLock(){if(n!=null)return n2(n,e);n=new zt({concurrency:e.concurrency,autoStart:!1});let o=n,s=n2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,n2(t,e)}}},T_={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function qa(r){let e=Object.assign({},T_,r);return So==null&&(So=j5(e),So.isWorker!==!0&&(So.addEventListener("requestReadLock",t=>{ps[t.data.name]!=null&&ps[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),So.addEventListener("requestWriteLock",async t=>{ps[t.data.name]!=null&&ps[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),ps[e.name]==null&&(ps[e.name]=D_(e.name,e)),ps[e.name]}var e1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=qa({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await zn(this.child),this.started=!0}async stop(){await Yn(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){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={}){let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let s of e){if(await o.pins.isPinned(s))throw new Error("CID was pinned");yield s}}(),t)}finally{n()}}async has(e,t={}){let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}async createSession(e,t){let n=await this.lock.readLock();try{let o=await this.child.createSession(e,t);if(o==null)throw new m("Sessions not supported","ERR_UNSUPPORTED");return o}finally{n()}}};var J5=42;function k_(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=ce.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new M(x.tag,J5),new M(x.bytes,t)]}function C_(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function N_(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 Z5={float64:!0,typeEncoders:{Object:k_,undefined:C_,number:N_}},NW={...Z5,typeEncoders:{...Z5.typeEncoders}};function P_(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return ce.decode(r.subarray(1))}var o2={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};o2.tags[J5]=P_;var PW={...o2,tags:o2.tags.slice()};var e7=113;var t7=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===x.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===x.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[x.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[x.negint.major](e,t){this[x.uint.major](e,t)}[x.bytes.major](e,t){throw new Error(`${hi} unsupported type: Uint8Array`)}[x.string.major](e,t){this.prefix(e);let n=Iu(JSON.stringify(t.value));e.push(n.length>32?ka(n):n)}[x.array.major](e,t){this.prefix(e),this.inRecursive.push({type:x.array,elements:0}),e.push([91])}[x.map.major](e,t){this.prefix(e),this.inRecursive.push({type:x.map,elements:0}),e.push([123])}[x.tag.major](e,t){}[x.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===x.array)e.push([93]);else if(i.type===x.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(`${hi} 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=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};var ms=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(`${Q} 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(`${Q} 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 M(x.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(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} 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 s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new M(x.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new M(i>=0?x.uint:x.negint,i,this._pos-e):new M(i>=0?x.uint:x.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new M(x.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let s=0;for(let i=0;i<4;i++){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(`${Q} unexpected unicode escape character at position ${this._pos}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${Q} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);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(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new M(x.string,D0(t),this._pos-e);default:if(s<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new M(x.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new M(x.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new M(x.null,null,4);case 102:return this.expect([102,97,108,115,101]),new M(x.false,!1,5);case 116:return this.expect([116,114,117,101]),new M(x.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(`${Q} 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 M(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} 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 M(x.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 M(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} 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 M(x.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} 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(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function t1(r,e){return e=Object.assign({tokenizer:new ms(r,e)},e),Ir(r,e)}var B_={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};B_.tags[42]=ce.parse;var n7=297;var XW=new TextDecoder;var jW=new TextEncoder;var M_=new TextDecoder;function s2(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 r1(r,e){let t;[t,e]=s2(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 o7(r,e){let t;return[t,e]=s2(r,e),[t&7,t>>3,e]}function F_(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=o7(r,n),s===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]=r1(r,n)}else if(s===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 i;[i,n]=r1(r,n),e.Name=M_.decode(i)}else if(s===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]=s2(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function s7(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=o7(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=r1(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]=r1(r,t),n.push(F_(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 i={};return s&&(i.Data=s),i.Links=n||[],i}var JW=new TextEncoder,eG=2**32,tG=2**31;var oG=new TextEncoder;function i7(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var a7=112;function c7(r){let e=i7(r),t=s7(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=ce.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}var K_={codec:a7,*walk(r){yield*c7(r).Links.map(t=>t.Hash)}},$_={codec:Oc,*walk(){}},l7=42,H_={codec:e7,*walk(r){let e=[],t=[];t[l7]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=ce.decode(n.subarray(1));return e.push(o),o},Ir(r,{tags:t}),yield*e}},i2=class extends ms{tokenBuffer;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===x.map){let t=this._next();if(t.type===x.string&&t.value==="/"){let n=this._next();if(n.type===x.string){if(this._next().type!==x.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new M(x.tag,42,0)}if(n.type===x.map){let o=this._next();if(o.type===x.string&&o.value==="bytes"){let s=this._next();if(s.type===x.string){for(let a=0;a<2;a++)if(this._next().type!==x.break)throw new Error("Invalid encoded Bytes form");let i=ut.decode(`m${s.value}`);return new M(x.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},q_={codec:n7,*walk(r){let e=[],t=[];t[l7]=n=>{let o=ce.parse(n);return e.push(o),o},t1(r,{tags:t,tokenizer:new i2(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},W_={codec:a4,*walk(){}};function u7(r=[]){let e={};return[K_,$_,H_,q_,W_,...r].forEach(t=>{e[t.codec]=t}),e}var a2=new Oe("/version"),d7=1;async function f7(r){if(!await r.has(a2)){await r.put(a2,B(`${d7}`));return}let e=await r.get(a2),t=P(e);if(parseInt(t,10)!==d7)throw new Error("Unknown datastore version, a datastore migration may be required")}function h7(r=[]){let e={};return[De,Hf,mr,...r].forEach(t=>{e[t.code]=t}),e}var p7=0,n1=class extends ln{put(e){return e}get(e){if(e.code===p7)return e.multihash.digest;throw vo()}has(e){return e.code===p7}delete(){}*getAll(){}};function G_(r){return r[Symbol.asyncIterator]!=null}function m7(r){return r?.then!=null}function z_(r,e){if(G_(r))return async function*(){for await(let a of r){let c=e(a);m7(c)&&await c,yield a}}();let t=zs(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();if(typeof e(n)?.then=="function")return async function*(){yield n;for await(let a of t){let c=e(a);m7(c)&&await c,yield a}}();let i=e;return function*(){yield n;for(let a of t)i(a),yield a}()}var Wa=z_;var o1=class r{child;hashers;started;log;logger;components;constructor(e,t={}){this.log=e.logger.forComponent(`helia:networked-storage${t.root==null?"":`:${t.root}`}`),this.logger=e.logger,this.components=e,this.child=new $a([new n1,e.blockstore]),this.hashers=e.hashers??{},this.started=!1}isStarted(){return this.started}async start(){await zn(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Yn(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){return await this.child.has(e)?(n.onProgress?.(new me("blocks:put:duplicate",e)),e):(n.onProgress?.(new me("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new me("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Nt(e,async({cid:s})=>{let i=await this.child.has(s);return i&&t.onProgress?.(new me("blocks:put-many:duplicate",s)),!i}),o=Wa(n,async({cid:s,block:i})=>{t.onProgress?.(new me("blocks:put-many:providers:notify",s)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(s,i,t)))});t.onProgress?.(new me("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.onProgress?.(new me("blocks:get:providers:get",e));let n=await g7(e,this.components.blockBrokers,this.hashers[e.multihash.code],{...t,log:this.log});return t.onProgress?.(new me("blocks:get:blockstore:put",e)),await this.child.put(e,n,t),t.onProgress?.(new me("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,n,t))),n}return t.onProgress?.(new me("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new me("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Wa(e,async n=>{if(t.offline!==!0&&!await this.child.has(n)){t.onProgress?.(new me("blocks:get-many:providers:get",n));let o=await g7(n,this.components.blockBrokers,this.hashers[n.multihash.code],{...t,log:this.log});t.onProgress?.(new me("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new me("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new me("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new me("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 me("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}async createSession(e,t){let n=await Promise.all(this.components.blockBrokers.map(async o=>o.createSession==null?o:o.createSession(e,t)));return new r({blockstore:this.child,blockBrokers:n,hashers:this.hashers,logger:this.logger},{root:e})}};function Y_(r){return typeof r.retrieve=="function"}var Q_=(r,e)=>{if(e==null)throw new m(`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`,"ERR_UNKNOWN_HASH_ALG");return async t=>{let n=await e.digest(t);if(!J(n.digest,r.multihash.digest))throw new m("Hash of downloaded block did not match multihash from passed CID","ERR_HASH_MISMATCH")}};async function g7(r,e,t,n){let o=Q_(r,t),s=new AbortController,i=ot([s.signal,n.signal]);ie(1/0,s.signal,i);let a=[];for(let c of e)Y_(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.clear()}}var s1=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;log;constructor(e){this.logger=e.logger??to(),this.log=this.logger.forComponent("helia"),this.hashers=h7(e.hashers),this.dagWalkers=u7(e.dagWalkers),this.dns=e.dns??ju();let t={blockstore:e.blockstore,datastore:e.datastore,hashers:this.hashers,dagWalkers:this.dagWalkers,logger:this.logger,blockBrokers:[],dns:this.dns,...e.components??{}};this.routing=t.routing=new Ju(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[Jr]!=null&&s.push(o[Jr]),o[en]!=null&&s.push(o[en]),s})});let n=new o1(t);this.pins=new Zu(e.datastore,n,this.dagWalkers),this.blockstore=new e1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await f7(this.datastore),await zn(this.blockstore,this.datastore,this.routing)}async stop(){await Yn(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 Kt(o.deleteMany(async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new me("helia:gc:deleted",s))}catch(i){n.log.error("Error during gc",i),e.onProgress?.(new me("helia:gc:error",i))}}()))}finally{t()}this.log("gc finished")}};var i1=class extends s1{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 c2(){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 y7(){let r=c2(),e=c2();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var xi=!!globalThis.process?.env?.DUMP_SESSION_KEYS;var Fn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4));function w7(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}var E7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),X_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!X_)throw new Error("Non little-endian hardware is not supported");function a1(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function c1(r){if(typeof r=="string")r=a1(r);else if(w7(r))r=r.slice();else throw new Error(`expected Uint8Array, got ${typeof r}`);return r}var j_=r=>Object.prototype.toString.call(r)==="[object Object]"&&r.constructor===Object;function b7(r,e){if(e!==void 0&&(typeof e!="object"||!j_(e)))throw new Error("options must be object or undefined");return Object.assign(r,e)}function gs(r,e){if(!w7(r))throw new Error("Uint8Array expected");if(typeof e=="number"&&r.length!==e)throw new Error(`Uint8Array length ${e} expected`)}function x7(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 l2=(r,e)=>(Object.assign(e,r),e);function u2(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}function l1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`wrong positive integer: ${r}`)}function d2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function Z_(r){return r!=null&&typeof r=="object"&&(r instanceof Uint8Array||r.constructor.name==="Uint8Array")}function vi(r,...e){if(!Z_(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function f2(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 v7(r,e){vi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Rt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,h2=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=c1(e),gs(e,32);let t=Rt(e,0),n=Rt(e,2),o=Rt(e,4),s=Rt(e,6),i=Rt(e,8),a=Rt(e,10),c=Rt(e,12),l=Rt(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|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=Rt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],g=i[6],h=i[7],p=i[8],y=i[9],w=Rt(e,t+0),b=Rt(e,t+2),E=Rt(e,t+4),S=Rt(e,t+6),_=Rt(e,t+8),A=Rt(e,t+10),D=Rt(e,t+12),R=Rt(e,t+14),k=s[0]+(w&8191),O=s[1]+((w>>>13|b<<3)&8191),N=s[2]+((b>>>10|E<<6)&8191),L=s[3]+((E>>>7|S<<9)&8191),F=s[4]+((S>>>4|_<<12)&8191),Y=s[5]+(_>>>1&8191),I=s[6]+((_>>>14|A<<2)&8191),C=s[7]+((A>>>11|D<<5)&8191),$=s[8]+((D>>>8|R<<8)&8191),T=s[9]+(R>>>5|o),v=0,U=v+k*a+O*(5*y)+N*(5*p)+L*(5*h)+F*(5*g);v=U>>>13,U&=8191,U+=Y*(5*f)+I*(5*u)+C*(5*d)+$*(5*l)+T*(5*c),v+=U>>>13,U&=8191;let V=v+k*c+O*a+N*(5*y)+L*(5*p)+F*(5*h);v=V>>>13,V&=8191,V+=Y*(5*g)+I*(5*f)+C*(5*u)+$*(5*d)+T*(5*l),v+=V>>>13,V&=8191;let H=v+k*l+O*c+N*a+L*(5*y)+F*(5*p);v=H>>>13,H&=8191,H+=Y*(5*h)+I*(5*g)+C*(5*f)+$*(5*u)+T*(5*d),v+=H>>>13,H&=8191;let oe=v+k*d+O*l+N*c+L*a+F*(5*y);v=oe>>>13,oe&=8191,oe+=Y*(5*p)+I*(5*h)+C*(5*g)+$*(5*f)+T*(5*u),v+=oe>>>13,oe&=8191;let se=v+k*u+O*d+N*l+L*c+F*a;v=se>>>13,se&=8191,se+=Y*(5*y)+I*(5*p)+C*(5*h)+$*(5*g)+T*(5*f),v+=se>>>13,se&=8191;let de=v+k*f+O*u+N*d+L*l+F*c;v=de>>>13,de&=8191,de+=Y*a+I*(5*y)+C*(5*p)+$*(5*h)+T*(5*g),v+=de>>>13,de&=8191;let ae=v+k*g+O*f+N*u+L*d+F*l;v=ae>>>13,ae&=8191,ae+=Y*c+I*a+C*(5*y)+$*(5*p)+T*(5*h),v+=ae>>>13,ae&=8191;let le=v+k*h+O*g+N*f+L*u+F*d;v=le>>>13,le&=8191,le+=Y*l+I*c+C*a+$*(5*y)+T*(5*p),v+=le>>>13,le&=8191;let Be=v+k*p+O*h+N*g+L*f+F*u;v=Be>>>13,Be&=8191,Be+=Y*d+I*l+C*c+$*a+T*(5*y),v+=Be>>>13,Be&=8191;let ke=v+k*y+O*p+N*h+L*g+F*f;v=ke>>>13,ke&=8191,ke+=Y*u+I*d+C*l+$*c+T*a,v+=ke>>>13,ke&=8191,v=(v<<2)+v|0,v=v+U|0,U=v&8191,v=v>>>13,V+=v,s[0]=U,s[1]=V,s[2]=H,s[3]=oe,s[4]=se,s[5]=de,s[6]=ae,s[7]=le,s[8]=Be,s[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 s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|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 i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535}update(e){f2(this);let{buffer:t,blockLen:n}=this;e=c1(e);let o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){this.h.fill(0),this.r.fill(0),this.buffer.fill(0),this.pad.fill(0)}digestInto(e){f2(this),v7(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 s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function J_(r){let e=(n,o)=>r(o).update(c1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var R7=J_(r=>new h2(r));var eA=a1("expand 16-byte k"),tA=a1("expand 32-byte k"),rA=Fn(eA),nA=Fn(tA);function z(r,e){return r<<e|r>>>32-e}function p2(r){return r.byteOffset%4===0}var u1=64,oA=16,_7=2**32-1,S7=new Uint32Array;function sA(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(u1),d=Fn(l),u=p2(o)&&p2(s),f=u?Fn(o):S7,g=u?Fn(s):S7;for(let h=0;h<c;i++){if(r(e,t,n,d,i,a),i>=_7)throw new Error("arx: counter overflow");let p=Math.min(u1,c-h);if(u&&p===u1){let y=h/4;if(h%4!==0)throw new Error("arx: invalid block position");for(let w=0,b;w<oA;w++)b=y+w,g[b]=f[b]^d[w];h+=u1;continue}for(let y=0,w;y<p;y++)w=h+y,s[w]=o[w]^l[y];h+=p}}function m2(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=b7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return l1(o),l1(i),d2(s),d2(t),(a,c,l,d,u=0)=>{vi(a),vi(c),vi(l);let f=l.length;if(d||(d=new Uint8Array(f)),vi(d),l1(u),u<0||u>=_7)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let g=[],h=a.length,p,y;if(h===32)p=a.slice(),g.push(p),y=nA;else if(h===16&&t)p=new Uint8Array(32),p.set(a),p.set(a,16),y=rA,g.push(p);else throw new Error(`arx: invalid 32-byte key, got length=${h}`);p2(c)||(c=c.slice(),g.push(c));let w=Fn(p);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,w,Fn(c.subarray(0,16)),w),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let S=new Uint8Array(12);S.set(c,s?0:12-c.length),c=S,g.push(c)}let E=Fn(c);for(sA(r,y,w,E,l,d,u,i);g.length>0;)g.pop().fill(0);return d}}function D7(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],g=e[3],h=e[4],p=e[5],y=e[6],w=e[7],b=o,E=t[0],S=t[1],_=t[2],A=i,D=a,R=c,k=l,O=d,N=u,L=f,F=g,Y=h,I=p,C=y,$=w,T=b,v=E,U=S,V=_;for(let oe=0;oe<s;oe+=2)A=A+O|0,T=z(T^A,16),Y=Y+T|0,O=z(O^Y,12),A=A+O|0,T=z(T^A,8),Y=Y+T|0,O=z(O^Y,7),D=D+N|0,v=z(v^D,16),I=I+v|0,N=z(N^I,12),D=D+N|0,v=z(v^D,8),I=I+v|0,N=z(N^I,7),R=R+L|0,U=z(U^R,16),C=C+U|0,L=z(L^C,12),R=R+L|0,U=z(U^R,8),C=C+U|0,L=z(L^C,7),k=k+F|0,V=z(V^k,16),$=$+V|0,F=z(F^$,12),k=k+F|0,V=z(V^k,8),$=$+V|0,F=z(F^$,7),A=A+N|0,V=z(V^A,16),C=C+V|0,N=z(N^C,12),A=A+N|0,V=z(V^A,8),C=C+V|0,N=z(N^C,7),D=D+L|0,T=z(T^D,16),$=$+T|0,L=z(L^$,12),D=D+L|0,T=z(T^D,8),$=$+T|0,L=z(L^$,7),R=R+F|0,v=z(v^R,16),Y=Y+v|0,F=z(F^Y,12),R=R+F|0,v=z(v^R,8),Y=Y+v|0,F=z(F^Y,7),k=k+O|0,U=z(U^k,16),I=I+U|0,O=z(O^I,12),k=k+O|0,U=z(U^k,8),I=I+U|0,O=z(O^I,7);let H=0;n[H++]=i+A|0,n[H++]=a+D|0,n[H++]=c+R|0,n[H++]=l+k|0,n[H++]=d+O|0,n[H++]=u+N|0,n[H++]=f+L|0,n[H++]=g+F|0,n[H++]=h+Y|0,n[H++]=p+I|0,n[H++]=y+C|0,n[H++]=w+$|0,n[H++]=b+T|0,n[H++]=E+v|0,n[H++]=S+U|0,n[H++]=_+V|0}function iA(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],g=e[5],h=e[6],p=e[7],y=t[0],w=t[1],b=t[2],E=t[3];for(let _=0;_<20;_+=2)o=o+c|0,y=z(y^o,16),f=f+y|0,c=z(c^f,12),o=o+c|0,y=z(y^o,8),f=f+y|0,c=z(c^f,7),s=s+l|0,w=z(w^s,16),g=g+w|0,l=z(l^g,12),s=s+l|0,w=z(w^s,8),g=g+w|0,l=z(l^g,7),i=i+d|0,b=z(b^i,16),h=h+b|0,d=z(d^h,12),i=i+d|0,b=z(b^i,8),h=h+b|0,d=z(d^h,7),a=a+u|0,E=z(E^a,16),p=p+E|0,u=z(u^p,12),a=a+u|0,E=z(E^a,8),p=p+E|0,u=z(u^p,7),o=o+l|0,E=z(E^o,16),h=h+E|0,l=z(l^h,12),o=o+l|0,E=z(E^o,8),h=h+E|0,l=z(l^h,7),s=s+d|0,y=z(y^s,16),p=p+y|0,d=z(d^p,12),s=s+d|0,y=z(y^s,8),p=p+y|0,d=z(d^p,7),i=i+u|0,w=z(w^i,16),f=f+w|0,u=z(u^f,12),i=i+u|0,w=z(w^i,8),f=f+w|0,u=z(u^f,7),a=a+c|0,b=z(b^a,16),g=g+b|0,c=z(c^g,12),a=a+c|0,b=z(b^a,8),g=g+b|0,c=z(c^g,7);let S=0;n[S++]=o,n[S++]=s,n[S++]=i,n[S++]=a,n[S++]=y,n[S++]=w,n[S++]=b,n[S++]=E}var aA=m2(D7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),cA=m2(D7,{counterRight:!1,counterLength:8,extendNonceFn:iA,allowShortKeys:!1});var lA=new Uint8Array(16),A7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(lA.subarray(t))},uA=new Uint8Array(32);function I7(r,e,t,n,o){let s=r(e,t,uA),i=R7.create(s);o&&A7(i,o),A7(i,n);let a=new Uint8Array(16),c=E7(a);u2(c,0,BigInt(o?o.length:0),!0),u2(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return s.fill(0),l}var T7=r=>(e,t,n)=>(gs(e,32),gs(t),{encrypt:(s,i)=>{let a=s.length,c=a+16;i?gs(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=I7(r,e,t,i.subarray(0,-16),n);return i.set(l,a),i},decrypt:(s,i)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");i?gs(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=I7(r,e,t,l,n);if(!x7(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),i}}),g2=l2({blockSize:64,nonceLength:12,tagLength:16},T7(aA)),gz=l2({blockSize:64,nonceLength:24,tagLength:16},T7(cA));function C7(r,e,t){return Zo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),lo(r,Br(t),Br(e))}var y2=new Uint8Array([0]),k7=new Uint8Array;function N7(r,e,t,n=32){if(Zo(r),ro(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=k7);let s=new Uint8Array(o*r.outputLen),i=lo.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)y2[0]=l+1,a.update(l===0?k7:c).update(t).update(y2).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),y2.fill(0),s.slice(0,n)}var w2={hashSHA256(r){return wo(r.subarray())},getHKDF(r,e){let t=C7(wo,e,r),o=N7(wo,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=Ea.utils.randomPrivateKey();return{publicKey:Ea.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ea.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ea.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return g2(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return g2(n,e,t).decrypt(r.subarray(),o)}};var P7=w2;function O7(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 Ri=r=>{let e=ze(2);return e[0]=r>>8,e[1]=r,e};Ri.bytes=2;var Ga=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)};Ga.bytes=2;function L7(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 E2(r,e){!e.enabled||!xi||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${P(r.privateKey,"hex")}`)):e("Missing local static keys."))}function b2(r,e){!e.enabled||!xi||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${P(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function B7(r,e){!e.enabled||!xi||e(r?`REMOTE_STATIC_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote static public key.")}function x2(r,e){!e.enabled||!xi||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function v2(r,e,t){!t.enabled||!xi||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&P(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&P(e.k,"hex")}`))}function Vn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=ze(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function d1(r,e){for(let t=0;t<r.byteLength;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return r.byteLength>e.byteLength?1:r.byteLength<e.byteLength?-1:0}var f1=class r extends Error{code;constructor(e="Unexpected Peer"){super(e),this.code=r.code}static code="ERR_UNEXPECTED_PEER"},Si=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var dA=0,fA=4294967295,hA="Cipherstate has reached maximum n, a new handshake must be performed",h1=class{n;bytes;view;constructor(e=dA){this.n=e,this.bytes=Ce(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>fA)throw new Error(hA)}};var ys=Ce(0),_i=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new h1(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}},R2=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=B(t,"utf-8");this.h=pA(e,n),this.ck=this.h,this.cs=new _i(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new _i(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ue(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,ys);return[new _i(this.crypto,e),new _i(this.crypto,t)]}},S2=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new R2(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,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()}},za=class extends S2{writeMessageA(e){return new ue(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ue(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ue(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Si(`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 Si(`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 Si(`handshake stage 2 validation fail: ${t.message}`)}}};function pA(r,e){if(e.length<=32){let t=Ce(32);return t.set(e),t}else return r.hash(e)}var p1;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(p1||(p1={}));var Ya;(function(r){let e;r.codec=()=>(e==null&&(e=re((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),p1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:Ce(0),identitySig:Ce(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=p1.codec().decode(t,t.uint32());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Ya||(Ya={}));async function _2(r,e,t){let n=await r.sign(U7(e));return Ya.encode({identityKey:r.public.bytes,identitySig:n,extensions:t})}async function A2(r,e,t){try{let n=Ya.decode(r);if(t){let i=t.subarray();if(!J(i,n.identityKey))throw new Error(`Payload identity key ${P(n.identityKey,"hex")} does not match expected remote identity key ${P(i,"hex")}`)}if(!e)throw new Error("Remote static does not exist");let o=U7(e);if(!await qr(n.identityKey).verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new f1(n.message)}}function U7(r){let e=B("noise-libp2p-static-key:");return r instanceof Uint8Array?xe([e,r],e.length+r.length):(r.prepend(e),r)}async function M7(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await _2(o,i.publicKey,c),d=new za({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:i});E2(d.s,e),e.trace("Stage 0 - Initiator starting to send first message."),await t.write(d.writeMessageA(ys)),e.trace("Stage 0 - Initiator finished sending first message."),b2(d.e,e),e.trace("Stage 1 - Initiator waiting to receive first message from responder...");let u=d.readMessageB(await t.read());e.trace("Stage 1 - Initiator received the message."),x2(d.re,e),B7(d.rs,e),e.trace("Initiator going to check remote's signature...");let f=await A2(u,d.rs,a);e.trace("All good with the signature!"),e.trace("Stage 2 - Initiator sending third handshake message."),await t.write(d.writeMessageC(l)),e.trace("Stage 2 - Initiator sent message with signed payload.");let[g,h]=d.ss.split();return v2(g,h,e),{payload:f,encrypt:p=>g.encryptWithAd(ys,p),decrypt:(p,y)=>h.decryptWithAd(ys,p,y)}}async function F7(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await _2(o,i.publicKey,c),d=new za({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:i});E2(d.s,e),e.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await t.read()),e.trace("Stage 0 - Responder received first message."),x2(d.re,e),e.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await t.write(d.writeMessageB(l)),e.trace("Stage 1 - Responder sent the second handshake message with signed payload."),b2(d.e,e),e.trace("Stage 2 - Responder waiting for third handshake message...");let u=d.readMessageC(await t.read());e.trace("Stage 2 - Responder received the message, finished handshake.");let f=await A2(u,d.rs,a),[g,h]=d.ss.split();return v2(g,h,e),{payload:f,encrypt:p=>h.encryptWithAd(ys,p),decrypt:(p,y)=>g.decryptWithAd(ys,p,y)}}var K7=16;function $7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let s=o+65519;s>n.length&&(s=n.length);let i;n instanceof Uint8Array?i=r.encrypt(n.subarray(o,s)):i=r.encrypt(n.sublist(o,s)),e?.encryptedPackets.increment(),yield new ue(Ri(i.byteLength),i)}}}function H7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let s=o+65535;if(s>n.length&&(s=n.length),s-K7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-K7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var m1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e;let c=s??P7;this.crypto=O7(c),this.extensions=o,this.metrics=a?L7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??Ce(0)}async secureOutbound(e,t,n){let o=wr(t,{lengthEncoder:Ri,lengthDecoder:Ga,maxDataLength:65535});if(!e.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Sr(e.privateKey),i=n?.publicKey,a=await this.performHandshakeInitiator(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ht(a.payload.identityKey)}}async secureInbound(e,t,n){let o=wr(t,{lengthEncoder:Ri,lengthDecoder:Ga,maxDataLength:65535});if(!e.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Sr(e.privateKey),i=n?.publicKey,a=await this.performHandshakeResponder(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ht(a.payload.identityKey)}}async performHandshakeInitiator(e,t,n){let o;try{o=await M7({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}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n){let o;try{o=await F7({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}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,o]=y7(),s=e.unwrap();return await Ke(n,$7(t,this.metrics),s,i=>$t(i,{lengthDecoder:Ga}),H7(t,this.metrics),n),o}};function Ai(r={}){return e=>new m1(e,r)}function g1(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 Ii="ERR_INVALID_FRAME",I2="ERR_UNREQUESTED_PING",D2="ERR_NOT_MATCHING_PING",T2="ERR_STREAM_ALREADY_EXISTS",k2="ERR_DECODE_INVALID_VERSION",C2="ERR_BOTH_CLIENTS",N2="ERR_RECV_WINDOW_EXCEEDED",q7=new Set([Ii,I2,D2,T2,k2,C2,N2]),_o="ERR_INVALID_CONFIG",y1="ERR_MUXER_LOCAL_CLOSED",P2="ERR_MUXER_REMOTE_CLOSED";var W7="ERR_STREAM_ABORT",G7="ERROR_MAX_OUTBOUND_STREAMS_EXCEEDED",z7="ERR_DECODE_IN_PROGRESS",Xa=256*1024,Y7=16*1024*1024;var Q7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Xa,maxStreamWindowSize:Y7,maxMessageSize:64*1024};function X7(r){if(r.keepAliveInterval<=0)throw new m("keep-alive interval must be positive",_o);if(r.maxInboundStreams<0)throw new m("max inbound streams must be larger or equal 0",_o);if(r.maxOutboundStreams<0)throw new m("max outbound streams must be larger or equal 0",_o);if(r.initialStreamWindowSize<Xa)throw new m("InitialStreamWindowSize must be larger or equal 256 kB",_o);if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new m("MaxStreamWindowSize must be larger than the InitialStreamWindowSize",_o);if(r.maxStreamWindowSize>2**32-1)throw new m("MaxStreamWindowSize must be less than equal MAX_UINT32",_o);if(r.maxMessageSize<1024)throw new m("MaxMessageSize must be greater than a kilobyte",_o)}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 GY=Object.values(We).filter(r=>typeof r!="string"),j7=0,Dr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Dr||(Dr={}));var Ao=12;var Z7=2**24;function mA(r){if(r[0]!==j7)throw new m("Invalid frame version",k2);return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*Z7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*Z7+(r[9]<<16)+(r[10]<<8)+r[11]}}var w1=class{source;buffer;frameInProgress;constructor(e){this.source=gA(e),this.buffer=new ue,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 m("decoding frame already in progress",z7);if(this.buffer.length<Ao)return;let e=mA(this.buffer.subarray(0,Ao));return this.buffer.consume(Ao),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 gA(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 O2(r){let e=new Uint8Array(Ao);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 J7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function E1(r,e){let t=g1(r).return?.();J7(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var yA="ERR_STREAM_RESET",wA="ERR_SINK_INVALID_STATE",EA=5e3;function L2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Io=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??EA,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=st({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 m(`writable end state is "${this.writeStatus}" not "ready"`,wA);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);L2(o)&&await o}let n=()=>{E1(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 ue(o):o;let s=this.sendData(o,t);L2(s)&&(this.sendingData=j(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await Lt(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 Lt(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Lt(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Lt(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();L2(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 m("stream reset",yA);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 Tr;(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"})(Tr||(Tr={}));var b1=class extends Io{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Tr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Xa,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-Ao,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 m("stream aborted",W7)):t()};e.signal?.addEventListener("abort",o);try{await new Promise((s,i)=>{this.sendWindowCapacityUpdate=()=>{s()},n=i,t=s})}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 m("receive window exceeded",N2,{available:this.recvWindowCapacity,recv:e.length});let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&We.ACK)===We.ACK&&this.state===Tr.SYNSent&&(this.state=Tr.Established),(e&We.FIN)===We.FIN&&this.remoteCloseWrite(),(e&We.RST)===We.RST&&this.reset()}getSendFlags(){switch(this.state){case Tr.Init:return this.state=Tr.SYNSent,We.SYN;case Tr.SYNReceived:return this.state=Tr.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 eg="/yamux/1.0.0",bA=500,x1=class{protocol=eg;_components;_init;constructor(e,t={}){this._components=e,this._init=t}createStreamMuxer(e){return new B2(this._components,{...this._init,...e})}},B2=class{protocol=eg;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={...Q7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),X7(this.config),this.closeController=new AbortController,ie(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=st({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=g1(n);if(a.return!=null){let c=a.return();xA(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new w1(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)}s=Dr.NormalTermination}catch(a){let c=a.code;q7.has(c)?(this.log?.error("protocol error in sink",a),s=Dr.ProtocolError):(this.log?.error("internal error in sink",a),s=Dr.InternalError),i=a}this.log?.trace("muxer sink ended"),i!=null?this.abort(i,s):await this.close({reason:s})},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 m("muxer closed remotely",P2);if(this.localGoAway!==void 0)throw new m("muxer closed locally",y1);let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new m("max outbound streams exceeded",G7);this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Tr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new m("muxer closed remotely",P2);if(this.localGoAway!==void 0)throw new m("muxer closed locally",y1);if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new m("muxer closed locally",y1))};this.closeController.signal.addEventListener("abort",i,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",i),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??Dr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(bA);ie(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Dr.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 m("Stream already exists",T2,{id:e});let s=new b1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}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:s}=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(s);return}default:throw new m("Invalid frame type",Ii,{header:e})}else switch(e.type){case Je.Data:case Je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new m("Invalid frame type",Ii,{header:e})}}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 m("Invalid frame flag",Ii,{header:e})}handlePingResponse(e){if(this.activePing===void 0)throw new m("ping not requested",I2);if(this.activePing.id!==e)throw new m("ping doesn't match our id",D2);this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Dr[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:s}=e;(o&We.SYN)===We.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===Je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case Je.WindowUpdate:{i.handleWindowUpdate(e);return}case Je.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new m("both endpoints are clients",C2);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,Tr.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 m("invalid frame",Ii);this.source.push(new ue(O2(e),t))}else this.source.push(O2(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=Dr.NormalTermination){this.log?.("sending GoAway reason=%s",Dr[e]),this.localGoAway=e,this.sendFrame({type:Je.GoAway,flag:0,streamID:0,length:e})}};function xA(r){return r!=null&&typeof r.then=="function"}function tg(r={}){return e=>new x1(e,r)}var v1=async()=>{let r=await Ta("Ed25519"),e=await vA(r);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function vA(r){return ht(S0(r.public),_0(r))}var R1=globalThis.CustomEvent??Event;async function*Kn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=j(),a=j(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let h of r){if(s.length===t&&(i=j(),await i.promise),d)break;let p={done:!1};s.push(p),h().then(y=>{p.done=!0,p.ok=!0,p.value=y,o.dispatchEvent(new R1("task-complete"))},y=>{p.done=!0,p.err=y,o.dispatchEvent(new R1("task-complete"))})}c=!0,o.dispatchEvent(new R1("task-complete"))}catch(h){l=h,o.dispatchEvent(new R1("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(h=>h.done)}function*f(){for(;s.length>0&&s[0].done;){let h=s[0];if(s.shift(),h.ok)yield h.value;else throw d=!0,i.resolve(),h.err;i.resolve()}}function*g(){for(;u();)for(let h=0;h<s.length;h++)if(s[h].done){let p=s[h];if(s.splice(h,1),h--,p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}for(;;){if(u()||(a=j(),await a.promise),l!=null)throw l;if(n?yield*f():yield*g(),c&&s.length===0)break}}var rg="libp2p",ng="autonat",og="1.0.0";var he;(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=()=>$e(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=()=>$e(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=re((u,f,g={})=>{if(g.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let h of u.addrs)f.uint32(18),f.bytes(h);g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={addrs:[]},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.id=u.bytes();break;case 2:g.addrs.push(u.bytes());break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>te(u,l.codec()),l.decode=u=>ee(u,l.codec())})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=re((u,f,g={})=>{g.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.peer=r.PeerInfo.codec().decode(u,u.uint32());break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>te(u,l.codec()),l.decode=u=>ee(u,l.codec())})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=re((u,f,g={})=>{g.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.status=r.ResponseStatus.codec().decode(u);break;case 2:g.statusText=u.string();break;case 3:g.addr=u.bytes();break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>te(u,l.codec()),l.decode=u=>ee(u,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=re((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let g=l.uint32();switch(g>>>3){case 1:u.type=r.MessageType.codec().decode(l);break;case 2:u.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:u.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(g&7);break}}return u})),c),r.encode=l=>te(l,r.codec()),r.decode=l=>ee(l,r.codec())})(he||(he={}));var U2=4,S1=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??rg}/${ng}/${og}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new m("handleIncomingAutonatStream timeout",pn))};t.addEventListener("abort",n,{once:!0}),ie(1/0,t);let o=this.components.addressManager.getAddresses().map(s=>s.toOptions().host);try{let s=this;await Ke(e.stream,i=>$t(i),async function*(i){let a=await ds(i);if(a==null){s.log("no message received"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=he.decode(a)}catch(p){s.log.error("could not decode message",p),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){s.log.error("dial was missing from message"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let d,u=l.peer;if(u==null||u.id==null){s.log.error("PeerId missing from message"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{d=je(u.id)}catch(p){s.log.error("invalid PeerId",p),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(s.log("incoming request from %p",d),!e.connection.remotePeer.equals(d)){s.log("target peer %p did not equal sending peer %p",d,e.connection.remotePeer),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let f=u.addrs.map(p=>X(p)).filter(p=>{let y=p.toOptions().host===e.connection.remoteAddr.toOptions().host;return s.log.trace("request to dial %a was sent from %a is same host %s",p,e.connection.remoteAddr,y),y}).filter(p=>{let y=p.toOptions().host,w=!(Ht(y)??!1);return s.log.trace("host %s was public %s",y,w),w}).filter(p=>{let y=p.toOptions().host,w=!o.includes(y);return s.log.trace("host %s was not our host %s",y,w),w}).filter(p=>{let y=!!s.components.transportManager.transportForMultiaddr(p);return s.log.trace("transport for %a is supported %s",p,y),y}).map(p=>(p.getPeerId()==null&&(p=p.encapsulate(`/p2p/${d.toString()}`)),p));if(f.length===0){s.log("no valid multiaddrs for %p in message",d),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}s.log("dial multiaddrs %s for peer %p",f.map(p=>p.toString()).join(", "),d);let g="",h=f[0];for await(let p of f){let y;h=p;try{if(y=await s.components.connectionManager.openConnection(p,{signal:t}),!y.remoteAddr.equals(p))throw s.log.error("tried to dial %a but dialed %a",p,y.remoteAddr),new Error("Unexpected remote address");s.log("Success %p",d),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.OK,addr:y.remoteAddr.decapsulateCode(Z("p2p").code).bytes}});return}catch(w){s.log("could not dial %p",d,w),g=w.message}finally{y!=null&&await y.close()}}yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_DIAL_ERROR,statusText:g,addr:h.bytes}})},i=>yr(i),e.stream)}catch(s){this.log.error("error handling incoming autonat stream",s)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(s=>{let i=s.toOptions();return!(Ht(i.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);ie(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(u=>u.toString()).join(", "));let s=he.encode({type:he.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(u=>u.bytes)}}}),a=(await v1()).toBytes(),c={},l=[],d=async u=>{let f=()=>{};try{this.log("asking %p to verify multiaddr",u.id);let g=await o.components.connectionManager.openConnection(u.id,{signal:n}),h=await g.newStream(this.protocol,{signal:n});f=()=>{h.abort(new m("verifyAddress timeout",pn))},n.addEventListener("abort",f,{once:!0});let p=await Ke([s],w=>yr(w),h,w=>$t(w),async w=>ds(w));if(p==null){this.log("no response received from %p",g.remotePeer);return}let y=he.decode(p);if(y.type!==he.MessageType.DIAL_RESPONSE||y.dialResponse==null){this.log("invalid autonat response from %p",g.remotePeer);return}if(y.dialResponse.status===he.ResponseStatus.OK){let w=g.remoteAddr.toOptions(),b;if(w.family===4)b=w.host.split(".")[0];else if(w.family===6)b=w.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',w.host);return}if(l.includes(b)){this.log("already have response from network segment %d - %s",b,w.host);return}l.push(b)}return y.dialResponse}catch(g){this.log.error("error asking remote to verify multiaddr",g)}finally{n.removeEventListener("abort",f)}};for await(let u of Kn(bt(this.components.peerRouting.getClosestPeers(a,{signal:n}),f=>async()=>d(f)),{concurrency:U2}))try{if(u==null)continue;let f=u.addr==null?t[0]:X(u.addr);if(this.log("autonat response for %a is %s",f,u.status),u.status===he.ResponseStatus.E_BAD_REQUEST||u.status===he.ResponseStatus.E_DIAL_REFUSED||u.addr==null&&t.length>1)continue;if(!t.some(h=>h.equals(f))){this.log("peer reported %a as %s but it was not in our observed address list",f,u.status);continue}let g=f.toString();if(c[g]==null&&(c[g]={success:0,failure:0}),u.status===he.ResponseStatus.OK?c[g].success++:u.status===he.ResponseStatus.E_DIAL_ERROR&&c[g].failure++,c[g].success===U2){this.log("%a is externally dialable",f),e.confirmObservedAddr(f);return}if(c[g].failure===U2){this.log("%a is not externally dialable",f),e.removeObservedAddr(f);return}}catch(f){this.log.error("could not verify external address",f)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function sg(r={}){return e=>new S1(e,r)}var DA=q("dns4"),TA=q("dns6"),kA=q("dnsaddr"),To=nt(q("dns"),kA,DA,TA),_1=nt(q("ip4"),q("ip6")),Di=nt(ne(_1,q("tcp")),ne(To,q("tcp"))),A1=ne(_1,q("udp")),CA=ne(A1,q("utp")),NA=ne(A1,q("quic")),PA=ne(A1,q("quic-v1")),M2=nt(ne(Di,q("ws")),ne(To,q("ws"))),Ti=nt(ne(M2,q("p2p")),M2),F2=nt(ne(Di,q("wss")),ne(To,q("wss")),ne(Di,q("tls"),q("ws")),ne(To,q("tls"),q("ws"))),ws=nt(ne(F2,q("p2p")),F2),V2=nt(ne(Di,q("http")),ne(_1,q("http")),ne(To,q("http"))),K2=nt(ne(Di,q("https")),ne(_1,q("https")),ne(To,q("https"))),ig=ne(A1,q("webrtc-direct"),q("certhash")),lg=nt(ne(ig,q("p2p")),ig),ag=ne(PA,q("webtransport"),q("certhash"),q("certhash")),ug=nt(ne(ag,q("p2p")),ag),dg=nt(ne(Ti,q("p2p-webrtc-star"),q("p2p")),ne(ws,q("p2p-webrtc-star"),q("p2p")),ne(Ti,q("p2p-webrtc-star")),ne(ws,q("p2p-webrtc-star"))),nX=nt(ne(Ti,q("p2p-websocket-star"),q("p2p")),ne(ws,q("p2p-websocket-star"),q("p2p")),ne(Ti,q("p2p-websocket-star")),ne(ws,q("p2p-websocket-star"))),fg=nt(ne(V2,q("p2p-webrtc-direct"),q("p2p")),ne(K2,q("p2p-webrtc-direct"),q("p2p")),ne(V2,q("p2p-webrtc-direct")),ne(K2,q("p2p-webrtc-direct"))),Es=nt(M2,F2,V2,K2,dg,fg,Di,CA,NA,To,lg,ug),oX=nt(ne(Es,q("p2p-stardust"),q("p2p")),ne(Es,q("p2p-stardust"))),Do=nt(ne(Es,q("p2p")),dg,fg,lg,ug,q("p2p")),cg=nt(ne(Do,q("p2p-circuit"),Do),ne(Do,q("p2p-circuit")),ne(q("p2p-circuit"),Do),ne(Es,q("p2p-circuit")),ne(q("p2p-circuit"),Es),q("p2p-circuit")),hg=()=>nt(ne(cg,hg),cg),Yr=hg(),pg=nt(ne(Yr,Do,Yr),ne(Do,Yr),ne(Yr,Do),Yr,Do);var sX=nt(ne(Yr,q("webrtc"),q("p2p")),ne(Yr,q("webrtc")),ne(Es,q("webrtc"),q("p2p")),ne(Es,q("webrtc")),q("webrtc"));function mg(r){function e(t){let n;try{n=X(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function ne(...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:mg(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:mg(e),partialMatch:e}}function q(r){let e=r;function t(o){let s;try{s=X(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[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 OA="bootstrap",LA=50,BA=12e4,UA=1e3,$2=class extends Re{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??UA,this.list=[];for(let n of t.list){if(!pg.matches(n)){this.log.error("Invalid multiaddr");continue}let o=X(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:ge(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[Vo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";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??OA]:{value:this._init.tagValue??LA,ttl:this._init.tagTTL??BA}}}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function yg(r){return e=>new $2(e,r)}var wg={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var ja;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>{let o={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.publicKey=t.bytes();break;case 2:o.payloadType=t.bytes();break;case 3:o.payload=t.bytes();break;case 5:o.signature=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(ja||(ja={}));var Qr=class r{static createFromProtobuf=async e=>{let t=ja.decode(e),n=await ht(t.publicKey);return new r({peerId:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t.privateKey==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=Eg(n,o,s),c=await(await Sr(t.privateKey)).sign(i.subarray());return new r({peerId:t,payloadType:o,payload:s,signature:c})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new m("envelope signature is not valid for the given domain",wg.ERR_SIGNATURE_NOT_VALID);return n};peerId;payloadType;payload;signature;marshaled;constructor(e){let{peerId:t,payloadType:n,payload:o,signature:s}=e;this.peerId=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=ja.encode({publicKey:this.peerId.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=Eg(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return qr(this.peerId.publicKey).verify(t.subarray(),this.signature)}},Eg=(r,e,t)=>{let n=B(r),o=Ve(n.byteLength),s=Ve(e.length),i=Ve(t.length);return new ue(o,n,s,e,i,t)};function bg(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 xg="libp2p-peer-record",vg=Uint8Array.from([3,1]);var Za;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=re((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let a={multiaddr:new Uint8Array(0)},c=i==null?s.len:s.pos+i;for(;s.pos<c;){let l=s.uint32();switch(l>>>3){case 1:a.multiaddr=s.bytes();break;default:s.skipType(l&7);break}}return a})),o),n.encode=s=>te(s,n.codec()),n.decode=s=>ee(s,n.codec())})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=re((n,o,s={})=>{if(s.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 i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o)=>{let s={peerId:new Uint8Array(0),seq:0n,addresses:[]},i=o==null?n.len:n.pos+o;for(;n.pos<i;){let a=n.uint32();switch(a>>>3){case 1:s.peerId=n.bytes();break;case 2:s.seq=n.uint64();break;case 3:s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return s})),t),r.encode=n=>te(n,r.codec()),r.decode=n=>ee(n,r.codec())})(Za||(Za={}));var dr=class r{static createFromProtobuf=e=>{let t=Za.decode(e),n=je(t.peerId),o=(t.addresses??[]).map(i=>X(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=xg;static CODEC=vg;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=Za.encode({peerId:this.peerId.toBytes(),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||!bg(this.multiaddrs,e.multiaddrs))}};function et(r,e){let t=wr(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Rg="/libp2p/relay";var Sg="circuit-relay-relay";var MX=BigInt(131072),bs="/libp2p/circuit/relay/0.2.0/hop",H2="/libp2p/circuit/relay/0.2.0/stop",FX=30*1e3,VX=30*1e3,q2=300;var W2="ERR_RELAYED_DIAL",_g="ERR_HOP_REQUEST_FAILED";var ko;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),ki.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),I1.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),Ci.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),St.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=ki.codec().decode(o,o.uint32());break;case 3:i.reservation=I1.codec().decode(o,o.uint32());break;case 4:i.limit=Ci.codec().decode(o,o.uint32());break;case 5:i.status=St.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(ko||(ko={}));var un;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),ki.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),Ci.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),St.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=ki.codec().decode(o,o.uint32());break;case 3:i.limit=Ci.codec().decode(o,o.uint32());break;case 4:i.status=St.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(un||(un={}));var ki;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:new Uint8Array(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.id=t.bytes();break;case 2:o.addrs.push(t.bytes());break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(ki||(ki={}));var I1;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.expire=t.uint64();break;case 2:o.addrs.push(t.bytes());break;case 3:o.voucher=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(I1||(I1={}));var Ci;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.duration=t.uint32();break;case 2:o.data=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Ci||(Ci={}));var St;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(St||(St={}));var G2;(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"})(G2||(G2={}));(function(r){r.codec=()=>$e(G2)})(St||(St={}));var Ag;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>{let o={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.relay=t.bytes();break;case 2:o.peer=t.bytes();break;case 3:o.expiration=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Ag||(Ag={}));async function Ig(r){let e=new TextEncoder().encode(r),t=await De.digest(e);return ce.createV0(t)}function z2(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var D1=class extends Re{peerId;peerStore;contentRouting;registrar;started;topologyId;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(bs,{notifyOnTransient:!0,onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}afterStart(){this.discover().catch(e=>{this.log.error("error discovering relays",e)})}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(bs)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)this.log("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});this.log("found %d relay peers in peer store",e.length);try{this.log("searching content routing for relays");let t=await Ig(Rg),n=0;for await(let o of this.contentRouting.findProviders(t))if(o.multiaddrs.length>0&&!o.id.equals(this.peerId)){let s=o.id;n++,await this.peerStore.merge(s,{multiaddrs:o.multiaddrs}),this.log("found relay peer %p in content routing",s),this.safeDispatchEvent("relay:discover",{detail:s})}this.log("found %d relay peers in content routing",n)}catch(t){this.log.error("failed when finding relays on the network",t)}}};var FA=60*1e3*10,VA=60*1e3*5,KA=30*1e3,T1=class extends Re{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new it,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e4,this.started=!1,this.reserveQueue=new Vt({concurrency:t?.reservationConcurrency??1,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}start(){this.started=!0}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log("not adding relay as the queue is full");return}if(this.reserveQueue.has(e)){this.log("relay peer is already in the reservation queue");return}this.log("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(z2(n.reservation.expire)>FA){this.log("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((d,u)=>(u.type==="discovered"&&d++,d),0)>=this.maxDiscoveredRelays){this.log("already have enough discovered relays");return}let o=AbortSignal.timeout(this.reservationCompletionTimeout),s=await this.connectionManager.openConnection(e,{signal:o});if(s.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let i=await this.#e(s,{signal:o});this.log("created reservation on relay peer %p",e);let a=z2(i.expire),c=Math.min(Math.max(a-VA,KA),Math.pow(2,31)-1),l=setTimeout(()=>{this.addRelay(e,t).catch(d=>{this.log.error("could not refresh reservation to relay %p",e,d)})},c);this.reservations.set(e,{timeout:l,reservation:i,type:t}),await this.peerStore.merge(e,{tags:{[Sg]:{value:1,ttl:a}}}),await this.transportManager.listen([X(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){this.log.error("could not reserve slot on %p",e,n);let o=this.reservations.get(e);o!=null&&clearTimeout(o.timeout),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(bs,t),s=et(n).pb(ko);await s.write({type:ko.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw this.log.error("error parsing reserve message response from %p because",e.remotePeer,c),n.abort(c),c}finally{await n.close()}if(i.status===St.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(J(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};function Y2(r){let{stream:e,remoteAddr:t,logger:n}=r,o=n.forComponent("libp2p:stream:converter"),s=!1,i=!1,a=e.close.bind(e);e.close=async f=>{await a(f),u(!0)};let c=e.abort.bind(e);e.abort=f=>{c(f),u(!0)};let l=e.sink.bind(e);e.sink=async f=>{try{await l(f)}catch(g){g.type!=="aborted"&&o.error("%s error in sink",t,g)}finally{i=!0,u()}};let d={log:o,sink:e.sink,source:async function*(){try{for await(let f of e.source)f instanceof Uint8Array?yield f:yield*f}finally{s=!0,u()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function u(f){f===!0&&(s=!0,i=!0),s&&i&&d.timeline.close==null&&(d.timeline.close=Date.now())}return d}var Q2=class extends Re{connectionManager;relayStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new it,this.relayStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{this.#e(e.detail)};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.relayStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.relayStore.addRelay(n.remotePeer,"configured");return}let o=this.relayStore.getReservation(n.remotePeer);if(o==null)throw new m("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(s=>X(s).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.log("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&(this.log.trace("removing relay event listener for peer %p",e),this.relayStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close",{}))}};function Dg(r){return new Q2(r)}var HA=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},X2={maxInboundStopStreams:q2,maxOutboundStopStreams:q2,stopTimeout:3e4},k1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??X2.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??X2.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??X2.stopTimeout,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new D1(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{this.log.error("could not add discovered relay %p",n.detail,o)})})),this.reservationStore=new T1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{this.log.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){this.reservationStore.start(),await this.registrar.handle(H2,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),await this.discovery?.start(),this.started=!0}afterStart(){this.discovery?.afterStart()}async stop(){this.discovery?.stop(),this.reservationStore.stop(),await this.registrar.unhandle(H2),this.started=!1}[tn]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(h=>h===290).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new m(h,W2)}let n=e.toString().split("/p2p-circuit"),o=X(n[0]),s=X(n[n.length-1]),i=o.getPeerId(),a=s.getPeerId();if(i==null||a==null){let h=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw this.log.error(h),new m(h,W2)}let c=ge(i),l=ge(a),d=!1,f=this.connectionManager.getConnections(c)[0];f==null&&(await this.peerStore.merge(c,{multiaddrs:[o]}),f=await this.connectionManager.openConnection(c,t),d=!0);let g;try{return g=await f.newStream(bs),await this.connectV2({stream:g,connection:f,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),g?.abort(h),d&&await f.close(),h}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a}){try{let c=et(e),l=c.pb(ko);await l.write({type:ko.Type.CONNECT,peer:{id:n.toBytes(),addrs:[X(o).bytes]}});let d=await l.read();if(d.status!==St.OK)throw new m(`failed to connect via relay with status ${d?.status?.toString()??"undefined"}`,_g);let u=Y2({stream:c.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger});return this.log("new outbound transient connection %a",u.remoteAddr),await this.upgrader.upgradeOutbound(u,{transient:!0})}catch(c){throw this.log.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return Dg({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Yr.matches(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=et(t).pb(un),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==un.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!HA(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=je(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),c=this.addressManager.getAddresses()[0],l=Y2({stream:o.unwrap().unwrap(),remoteAddr:a,localAddr:c,logger:this.logger});this.log("new inbound transient connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:!0}),this.log("%s connection %a upgraded","inbound",l.remoteAddr)}};function j2(r={}){return e=>new k1(e,r)}var Tg=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},qA=new WeakMap;function WA({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(Tg());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(Tg())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,g)=>{i=()=>{d(),f(n)},a=g,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),qA.set(u,()=>{c(s),s=null,i()}),u}}var GA=WA(),C1=GA;var Xr;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={observedAddresses:[]},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.observedAddresses.push(o.bytes());break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(Xr||(Xr={}));function Z2(r,e){return Ho.matches(r)||e.transportForMultiaddr(r)==null?!1:Kc.matches(r)?!0:N4.matches(r)?Ht(r.toOptions().host)===!1:!1}var kg=1024*4,Cg=100,N1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},P1=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??N1.timeout,this.retries=t.retries??N1.retries,this.maxInboundStreams=t.maxInboundStreams??N1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??N1.maxOutboundStreams}isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Ja,{notifyOnTransient:!0,onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Ja,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,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Ja),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([Ja],{signal:o.signal,runOnTransientConnection:!0});let s=et(t,{maxDataLength:kg}).pb(Xr);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==Xr.Type.CONNECT)throw this.log("A sent wrong message type"),new m("DCUtR message type was incorrect",Ko);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new m("DCUtR connect message had no multiaddrs",Ko);let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:Xr.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await C1(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:Cg});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getPeerId()==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>Z2(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(s.transient)throw new Error("Could not open a new, non-transient, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,s)}}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=et(e,{maxDataLength:kg}).pb(Xr);this.log("A receiving connect");let s=await o.read(n);if(s.type!==Xr.Type.CONNECT)throw this.log("B sent wrong message type"),new m("DCUtR message type was incorrect",Ko);if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new m("DCUtR connect message had no multiaddrs",Ko);let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new m("DCUtR connect message had no dialable multiaddrs",Ko);if(this.log("A sending connect"),await o.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Xr.Type.SYNC)throw new m("DCUtR message type was incorrect",Ko);this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:Cg,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=X(n);if(!Z2(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Ja="/libp2p/dcutr";function Ng(r={}){return e=>new P1(e,r)}var Pg="0.1.0",Og="id",Lg="id/push",Bg="1.0.0",Ug="1.0.0";var Vg=Ye(Fg(),1),J2=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,O1=(0,Vg.default)(),L1=J2&&!O1,Kg=O1&&!J2,$g=O1&&J2,Hg=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!O1,B1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Yj=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",qg=typeof navigator<"u"&&navigator.product==="ReactNative";var xs;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 5:o.protocolVersion=t.string();break;case 6:o.agentVersion=t.string();break;case 1:o.publicKey=t.bytes();break;case 2:o.listenAddrs.push(t.bytes());break;case 4:o.observedAddr=t.bytes();break;case 3:o.protocols.push(t.string());break;case 8:o.signedPeerRecord=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(xs||(xs={}));var ep=1024*8,kr={protocolPrefix:"ipfs",timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192,runOnConnectionOpen:!0,runOnTransientConnection:!0},U1=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;runOnTransientConnection;log;constructor(e,t={}){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.log=e.logger.forComponent("libp2p:identify"),this.identifyProtocolStr=`/${t.protocolPrefix??kr.protocolPrefix}/${Og}/${Bg}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??kr.protocolPrefix}/${Lg}/${Ug}`,this.timeout=t.timeout??kr.timeout,this.maxInboundStreams=t.maxInboundStreams??kr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??kr.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??kr.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??kr.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??kr.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??kr.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??kr.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??kr.protocolPrefix}/${Pg}`,agentVersion:t.agentVersion??`${e.nodeInfo.name}/${e.nodeInfo.version}`},(t.runOnConnectionOpen??kr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{this.log.error("error during identify trigged by connection:open",s)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})}),this.host.agentVersion===`${e.nodeInfo.name}/${e.nodeInfo.version}`&&(Hg||Kg?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(L1||B1||$g||qg)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:B(this.host.agentVersion),ProtocolVersion:B(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(d=>d.decapsulateCode(Z("p2p").code)),n=new dr({peerId:this.peerId,multiaddrs:t}),o=await Qr.seal(n,this.peerId),s=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),a=P(i.metadata.get("AgentVersion")??B(this.host.agentVersion)),c=P(i.metadata.get("ProtocolVersion")??B(this.host.protocolVersion)),l=e.map(async d=>{let u,f=AbortSignal.timeout(this.timeout);ie(1/0,f);try{u=await d.newStream(this.identifyPushProtocolStr,{signal:f,runOnTransientConnection:this.runOnTransientConnection}),await et(u,{maxDataLength:this.maxIdentifyMessageSize??ep}).pb(xs).write({listenAddrs:t.map(h=>h.bytes),signedPeerRecord:o.marshal(),protocols:s,agentVersion:a,protocolVersion:c},{signal:f}),await u.close({signal:f})}catch(g){this.log.error("could not push identify update to peer",g),u?.abort(g)}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==W3)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);ie(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.identifyProtocolStr,{...t,runOnTransientConnection:this.runOnTransientConnection});let s=await et(n,{maxDataLength:this.maxIdentifyMessageSize??ep}).pb(xs).read(t);return await n.close(t),s}catch(o){throw this.log.error("error while reading identify message",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new m("public key was missing from identify message","ERR_MISSING_PUBLIC_KEY");let a=await ht(o);if(!e.remotePeer.equals(a))throw new m("identified peer does not match the expected peer","ERR_INVALID_PEER");if(this.peerId.equals(a))throw new m("identified peer is our own peer id?","ERR_INVALID_PEER");let c=YA(i);return this.log("identify completed for peer %p and protocols %o",a,s),this.log("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",c),this.addressManager.addObservedAddr(c)),this.#e(e,n)}async _handleIdentify(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);ie(1/0,o);try{let s=this.peerId.publicKey??new Uint8Array(0),i=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Z("p2p").code)),c=i.peerRecordEnvelope;if(a.length>0&&c==null){let u=new dr({peerId:this.peerId,multiaddrs:a});c=(await Qr.seal(u,this.peerId)).marshal().subarray()}let l=t.remoteAddr.bytes;C4.matches(t.remoteAddr)||(l=void 0),await et(n).pb(xs).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:s,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:l,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}async _handlePush(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)},i=await et(n,{maxDataLength:this.maxIdentifyMessageSize??ep}).pb(xs).read(o);await n.close(o),await this.#e(t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log("handled push from %p",t.remotePeer)}async#e(e,t){if(this.log("received identify from %p",e.remotePeer),t==null)throw new m("message was null or undefined","ERR_INVALID_MESSAGE");let n={};if(t.listenAddrs.length>0&&(n.addresses=t.listenAddrs.map(i=>({isCertified:!1,multiaddr:X(i)}))),t.protocols.length>0&&(n.protocols=t.protocols),t.publicKey!=null&&(n.publicKey=t.publicKey,!(await ht(t.publicKey)).equals(e.remotePeer)))throw new m("public key did not match remote PeerId","ERR_INVALID_PUBLIC_KEY");let o;if(t.signedPeerRecord!=null){this.log("received signedPeerRecord from %p",e.remotePeer);let i=t.signedPeerRecord,a=await Qr.openAndCertify(i,dr.DOMAIN),c=dr.createFromProtobuf(a.payload);if(!c.peerId.equals(a.peerId))throw new m("signing key does not match PeerId in the PeerRecord","ERR_INVALID_SIGNING_KEY");if(!e.remotePeer.equals(c.peerId))throw new m("signing key does not match remote PeerId","ERR_INVALID_PEER_RECORD_KEY");let l;try{l=await this.peerStore.get(c.peerId)}catch(d){if(d.code!=="ERR_NOT_FOUND")throw d}if(l!=null&&(n.metadata=l.metadata,l.peerRecordEnvelope!=null)){let d=await Qr.createFromProtobuf(l.peerRecordEnvelope),u=dr.createFromProtobuf(d.payload);u.seqNumber>=c.seqNumber&&(this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),c=u,i=l.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d})),o={seq:c.seqNumber,addresses:c.multiaddrs}}else this.log("%p did not send a signed peer record",e.remotePeer);if(this.log("patching %p with",e.remotePeer,n),await this.peerStore.patch(e.remotePeer,n),t.agentVersion!=null||t.protocolVersion!=null){let i={};t.agentVersion!=null&&(i.AgentVersion=B(t.agentVersion)),t.protocolVersion!=null&&(i.ProtocolVersion=B(t.protocolVersion)),this.log("merging %p metadata",e.remotePeer,i),await this.peerStore.merge(e.remotePeer,{metadata:i})}let s={peerId:e.remotePeer,protocolVersion:t.protocolVersion,agentVersion:t.agentVersion,publicKey:t.publicKey,listenAddrs:t.listenAddrs.map(i=>X(i)),observedAddr:t.observedAddr==null?void 0:X(t.observedAddr),protocols:t.protocols,signedPeerRecord:o,connection:e};return this.events.safeDispatchEvent("peer:identify",{detail:s}),s}};function YA(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function Wg(r={}){return e=>new U1(e,r)}var Gg="/ipfs/kad/1.0.0",zg="/dht/record",tp="/dht/provider";var ec;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 s={key:Ce(0),value:Ce(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ec||(ec={}));function Yg(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"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Qg(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,s=parseInt(t[3],10),i=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,s,i,a,c,l))}var _t=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return ec.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Yg(this.timeReceived)}}static deserialize(e){let t=ec.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Qg(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 Xg;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Xg||(Xg={}));var Ee;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(Ee||(Ee={}));var 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=()=>$e(M1)})(Ee||(Ee={}));var Pi;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Pi||(Pi={}));var rp;(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"})(rp||(rp={}));(function(r){r.codec=()=>$e(rp)})(Pi||(Pi={}));var Ni;(function(r){let e;r.codec=()=>(e==null&&(e=re((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 s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Pi.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:Ce(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.id=t.bytes();break}case 2:{o.multiaddrs.push(t.bytes());break}case 3:{o.connection=Pi.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Ni||(Ni={}));var Cr;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&M1[t.type]!==0&&(n.uint32(8),Ee.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let s of t.closer)n.uint32(66),Ni.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ni.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={type:Ee.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.type=Ee.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{o.closer.push(Ni.codec().decode(t,t.uint32()));break}case 9:{o.providers.push(Ni.codec().decode(t,t.uint32()));break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Cr||(Cr={}));function np(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new wt("kad-dht:query:send-query",{detail:t})),t}function tc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer!=null?r.closer:[],providers:r.providers!=null?r.providers:[]};return e.onProgress?.(new wt("kad-dht:query:peer-response",{detail:t})),t}function F1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new wt("kad-dht:query:final-peer",{detail:t})),t}function fr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new wt("kad-dht:query:query-error",{detail:t})),t}function op(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new wt("kad-dht:query:provider",{detail:t})),t}function rc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new wt("kad-dht:query:value",{detail:t})),t}function sp(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new wt("kad-dht:query:dial-peer",{detail:t})),t}function jg(r,e,t){if(t.length===0){let i="No records given";throw new m(i,"ERR_NO_RECORDS_RECEIVED")}let o=P(e).split("/");if(o.length<3){let i="Record key does not have a selector function";throw new m(i,"ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")}let s=r[o[1].toString()];if(s==null){let i=`No selector function configured for key type "${o[1]}"`;throw new m(i,"ERR_UNRECOGNIZED_KEY_PREFIX")}return t.length===1?0:s(e,t)}function XA(r,e){return 0}var Zg={pk:XA};async function Oi(r,e){let t=e.key,o=P(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null){let i=`No validator available for key type "${o[1]}"`;throw new m(i,"ERR_INVALID_RECORD_KEY_TYPE")}await s(t,e.value)}var jA=async(r,e)=>{if(!(r instanceof Uint8Array))throw new m('"key" must be a Uint8Array',"ERR_INVALID_RECORD_KEY_NOT_BUFFER");if(r.byteLength<5)throw new m("invalid public key record","ERR_INVALID_RECORD_KEY_TOO_SHORT");if(P(r.subarray(0,4))!=="/pk/")throw new m("key was not prefixed with /pk/","ERR_INVALID_RECORD_KEY_BAD_PREFIX");let n=r.slice(4),o=await De.digest(e);if(!J(n,o.bytes))throw new m("public key does not match passed in key","ERR_INVALID_RECORD_HASH_MISMATCH")},Jg={pk:jA};var ZA=B("/pk/");function e9(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=Ht(n);return o==null?!0:!o})}}async function Co(r){return(await De.digest(r)).digest}async function jr(r){return Co(r.toBytes())}function No(r){return new Oe(`${zg}/${P(r,"base32")}`,!1)}function t9(r){return xe([ZA,r.toBytes()])}function r9(r){return P(r.subarray(0,4))==="/pk/"}function n9(r){return je(r.subarray(4))}function ip(r,e){let t=new Date;return new _t(r,e,t).serialize()}function o9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var JA=290,eI=54,tI=55,rI=56,nI=4,oI=41;function s9(r){let e=r.stringTuples();for(let t of e)if(t[0]===JA)return!1;if(e[0][0]===eI||e[0][0]===tI||e[0][0]===rI)return!0;if(e[0][0]===nI||e[0][0]===oI){let t=Ht(`${e[0][1]}`);return t==null||!t}return!1}var V1=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=No(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=_t.deserialize(n);return await Oi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=ip(e,n);for(let{value:i,from:a}of t){if(J(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=No(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:Ee.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&J(d.record.value,_t.deserialize(s).value)&&(c=!0),yield d;c||(yield fr({from:a,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=ip(e,t),s=No(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Ke(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>bt(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ee.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&J(d.record.value,_t.deserialize(o).value)||c.push(fr({from:a.peer.id,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},n)));return c}),i=>Kn(i,{ordered:!1,concurrency:3}),async function*(i){for await(let a of i)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),s=0;try{s=jg(this.selectors,e,o)}catch(a){if(a.code!=="ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new m("best value was not found","ERR_NOT_FOUND");yield*this.sendCorrectionRecord(e,n,i,t),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e);yield rc({value:s.value,from:this.components.peerId},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i}){for await(let a of n.peerRouting.getValueOrPeers(s,e,{signal:i}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield rc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function i9(r,e){return{id:r.id.toBytes(),multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function nc(r){if(r.id==null)throw new Error("Invalid peer in message");return{id:je(r.id),multiaddrs:(r.multiaddrs??[]).map(e=>X(e))}}var K1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e),await this.providers.addProvider(e,this.components.peerId);let o={type:Ee.ADD_PROVIDER,key:e.multihash.bytes,providers:[i9({id:this.components.peerId,multiaddrs:t})]},s=0,i=a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[];this.log("putProvider %s to %p",e,a.peer.id);try{this.log("sending provider record for %s to %p",e,a.peer.id);for await(let l of this.network.sendMessage(a.peer.id,o,n))l.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,a.peer.id),s++),c.push(l)}catch(l){this.log.error("error sending provide record to peer %p",a.peer.id,l),c.push(fr({from:a.peer.id,error:l},n))}return c};yield*Ke(this.peerRouting.getClosestPeers(e.multihash.bytes,n),a=>bt(a,c=>i(c)),a=>Kn(a,{ordered:!1,concurrency:3}),async function*(a){for await(let c of a)yield*c}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:g})=>g)})}catch(f){if(f.code!=="ERR_NOT_FOUND")throw f;this.log("no peer store entry for %p",u)}if(yield tc({from:this.components.peerId,messageType:Ee.GET_PROVIDERS,providers:d},t),yield op({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:Ee.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,f,{...t,signal:u})},l=new Ze(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield op({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var $1=class extends Re{log;protocol;running;components;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n}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 la("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield sp({peer:e},n),yield np({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),c=await this._writeReadMessage(a,t,n);yield tc({from:e,messageType:c.type,closer:c.closer.map(nc),providers:c.providers.map(nc),record:c.record==null?void 0:_t.deserialize(c.record)},n)}catch(i){this.log.error("could not send %s to %p",t.type,e,i),yield fr({from:e,error:i},n)}finally{s!=null&&await s.close()}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new la("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield sp({peer:e},n),yield np({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);await this._writeMessage(a,t,n),yield tc({from:e,messageType:o},n)}catch(i){yield fr({from:e,error:i},n)}finally{s!=null&&await s.close()}}async _writeMessage(e,t,n){let o=et(e);await o.write(t,Cr,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=et(e);await o.write(t,Cr,n);let s=await o.read(Cr,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:nc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:nc(i)})}),s}};var oc=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Po=new Uint32Array(80),lp=class extends no{constructor(){super(64,20,8,!1),this.A=oc[0]|0,this.B=oc[1]|0,this.C=oc[2]|0,this.D=oc[3]|0,this.E=oc[4]|0}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Po[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Po[c]=wl(Po[c-3]^Po[c-8]^Po[c-14]^Po[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=bl(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=xl(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=wl(n,5)+l+a+d+Po[c]|0;a=i,i=s,s=wl(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Po.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},a9=Js(()=>new lp);var c9={sha1:a9,"sha2-256":wo,"sha2-512":io};function sc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(c9).join(" / ");throw new m(`Hash '${o}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let s=c9[o],i=i6(s,r,e,{c:t,dkLen:n});return ut.encode(i).substring(1)}var H1=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.peerId)}async add(e){if(this.peerDistances.find(o=>o.peerId.equals(e))!=null)return;let t=await jr(e),n={peerId:e,distance:Vn(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>d1(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async anyCloser(e){if(e.length===0)return!1;if(this.length===0)return!0;let t=await Promise.all(e.map(jr)),n=this.peerDistances[this.peerDistances.length-1].distance;for(let o of t){let s=Vn(this.originDhtKey,o);if(d1(s,n)<0)return!0}return!1}};var q1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:s,queryManager:i,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=s,this.queryManager=i,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:Ee.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=t9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=await ht(vu.marshalPublicKey({bytes:o.record.value}));if(!s.equals(e))throw new m("public key does not match id","ERR_PUBLIC_KEY_DOES_NOT_MATCH_ID");if(s.publicKey==null)throw new m("public key missing","ERR_PUBLIC_KEY_MISSING");yield rc({from:e,value:s.publicKey},t)}throw new m(`Node not responding with its public key: ${e.toString()}`,"ERR_INVALID_RECORD")}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 F1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a}){let c={type:Ee.FIND_NODE,key:e.toBytes()};for await(let l of o.network.sendRequest(i,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield F1({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toBytes(),s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield fr({from:this.peerId,error:new m("Not found","ERR_NOT_FOUND")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Co(e),o=this.routingTable.closestPeers(n),s=this,i=new H1(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add(c)}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",P(e,"base32"),c);let d={type:Ee.FIND_NODE,key:e};yield*s.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))yield c,c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await i.add(l.id)}));this.log("found %d peers close to %b",i.length,e);for(let c of i.peers)try{let l=await this.peerStore.get(c);yield F1({from:this.peerId,peer:{id:c,multiaddrs:l.addresses.map(({multiaddr:d})=>d)}},t)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}}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 i="invalid record received, discarded";this.log(i),yield fr({from:o.from,error:new m(i,"ERR_INVALID_RECORD")},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new m("invalid record received","ERR_INVALID_RECORD");await Oi(this.validators,new _t(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await Co(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}return s.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",s.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p",e,t),s}};var l9=Ye(z0(),1);var W1=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:s}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??36e5,this.provideValidity=s??864e5,this.cache=(0,l9.default)(n??256),this.syncQueue=new zt({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,s=this.datastore.batch(),i=this.datastore.query({prefix:tp});for await(let a of i)try{let{cid:c,peerId:l}=u9(a.key),d=d9(a.value).getTime(),u=Date.now(),f=u-d,g=f>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,f,this.provideValidity,g?"(expired)":""),g){n++,s.delete(a.key);let h=o.get(c)??new Set;h.add(l),o.set(c,h)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await s.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=ic(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=ic(e),n=this.cache.get(t);return n==null&&(n=await lI(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let s=ic(e);this.cache.set(s,n),await cI(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>ge(n))),{throwOnTimeout:!0})}};function ic(r){let e=typeof r=="string"?r:P(r.multihash.bytes,"base32");return`${tp}/${e}`}async function cI(r,e,t,n){let o=[ic(e),"/",t.toString()].join(""),s=new Oe(o),i=Ve(n.getTime());await r.put(s,i)}function u9(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function lI(r,e){let t=new Map,n=r.query({prefix:ic(e)});for await(let o of n){let{peerId:s}=u9(o.key);t.set(s,d9(o.value))}return t}function d9(r){return new Date(Bt(r))}async function*f9(r,e,t,n){let o=st({objectMode:!0}),s=u=>{n("clean up queue, results %d, queue size %d, pending tasks %d",o.readableLength,r.size,r.pending),r.clear(),o.end(u)},i=u=>{u!=null&&o.push(u)},a=u=>{n("queue error",u),s(u)},c=()=>{n("queue idle"),s()},l=()=>{n("abort queue"),s(new m("Query aborted","ERR_QUERY_ABORTED"))},d=()=>{s()};r.on("completed",i),r.on("error",a),r.on("idle",c),e.addEventListener("abort",l),t.addEventListener("cleanup",d);try{yield*o}finally{r.removeListener("completed",i),r.removeListener("error",a),r.removeListener("idle",c),e.removeEventListener("abort",l),t.removeEventListener("cleanup",d)}}var uI=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");async function*h9(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:s,alpha:i,pathIndex:a,numPaths:c,cleanUp:l,queryFuncTimeout:d,log:u,peersSeen:f}=r,g=new zt({concurrency:i}),h=await Co(e);function p(y,w){if(y==null)return;f.add(y);let b=BigInt("0x"+P(Vn(w,h),"base16"));g.add(async()=>{let E=[o];d!=null&&E.push(AbortSignal.timeout(d));let S=ot(E);ie(1/0,S);try{for await(let _ of s({key:e,peer:y,signal:S,pathIndex:a,numPaths:c})){if(S.aborted)return;if(_.name==="PEER_RESPONSE")for(let A of _.closer){if(f.has(A.id)){u("already seen %p in query",A.id);continue}if(n.equals(A.id)){u("not querying ourselves");continue}let D=await jr(A.id);if(BigInt("0x"+P(Vn(D,h),"base16"))>b){u("skipping %p as they are not closer to %b than %p",A.id,e,y);continue}u("querying closer peer %p",A.id),p(A.id,D)}g.emit("completed",_)}}catch(_){if(!o.aborted)return fr({from:y,error:_},r)}finally{S.clear()}},{priority:uI-b}).catch(E=>{u.error(E)})}p(t,await jr(t)),yield*f9(g,o,l,u)}var G1=class{disjointPaths;alpha;shutDownController;running;queries;logger;peerId;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=20,alpha:o=3,logPrefix:s}=t;this.logPrefix=s,this.disjointPaths=n??20,this.running=!1,this.alpha=o??3,this.queries=0,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,e.metrics!=null&&(this.metrics={runningQueries:e.metrics.registerMetric(`${s.replaceAll(":","_")}_running_queries`),queryTime:e.metrics.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)}),this.shutDownController=new AbortController,ie(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,ie(1/0,this.shutDownController.signal)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics?.queryTime.timer();if(n.signal==null){let u=AbortSignal.timeout(3e4);ie(1/0,u),n={...n,signal:u}}let s=new AbortController,i=ot([this.shutDownController.signal,s.signal,n.signal]);ie(1/0,i,s.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+P(e,"base58btc")),c=Date.now(),l=new Re,d=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await Lt(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let u=await Co(e),f=this.routingTable.closestPeers(u),g=f.slice(0,Math.min(this.disjointPaths,f.length));if(f.length===0){a.error("Running query with no peers");return}let h=new Ze,p=g.map((y,w)=>h9({key:e,startingPeer:y,ourPeerId:this.peerId,signal:i,query:t,pathIndex:w,numPaths:g.length,alpha:this.alpha,cleanUp:l,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress}));for await(let y of ft(...p))y.name==="QUERY_ERROR"&&a.error("query error",y.error),yield y;d=!0}catch(u){if(!(!this.running&&u.code==="ERR_QUERY_ABORTED"))throw u}finally{d||(a("query exited early"),s.abort()),i.clear(),this.queries--,this.metrics?.runningQueries.update(this.queries),o?.(),l.dispatchEvent(new wt("cleanup")),a("query:done in %dms",Date.now()-c)}}};function dI(r){return r[Symbol.asyncIterator]!=null}function fI(r){if(dI(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 z1=fI;var hI=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 pI(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=hI(r),u=(...g)=>{let h=t.multiArgs?g:g[0];t.filter&&!t.filter(h)||(c.push(h),t.count===c.length&&(n(),s(c)))},f=g=>{n(),i(g)};n=()=>{for(let g of a)d(g,u);for(let g of t.rejectionEvents)d(g,f)};for(let g of a)l(g,u);for(let g of t.rejectionEvents)l(g,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=zr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function ac(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=pI(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var Y1=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=j(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=ot([this.controller.signal,e]);ie(1/0,t,this.controller.signal,e);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await ac(this.routingTable,"peer:add",{signal:t})),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Ke(this.peerRouting.getClosestPeers(this.peerId.toBytes(),{signal:t,isSelfQuery:!0}),s=>Zn(s,this.count),async s=>z1(s));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};function m9(r,e){if(r===e)return!0;if(r.length!==e.length)return!1;for(let t=0,n=r.length;t<n;++t)if(r[t]!==e[t])return!1;return!0}function up(){return{contacts:[],dontSplit:!1,left:null,right:null}}function cc(r,e){if(!(e instanceof Uint8Array))throw new TypeError(r+" is not a Uint8Array")}var Q1=class r extends Re{localNodeId;root;numberOfNodesPerKBucket;numberOfNodesToPing;distance;arbiter;constructor(e){super(),this.localNodeId=e.localNodeId,this.numberOfNodesPerKBucket=e.numberOfNodesPerKBucket??20,this.numberOfNodesToPing=e.numberOfNodesToPing??3,this.distance=e.distance??r.distance,this.arbiter=e.arbiter??r.arbiter,cc("option.localNodeId as parameter 1",this.localNodeId),this.root=up()}static arbiter(e,t){return(e.vectorClock??0)>(t.vectorClock??0)?e:t}static distance(e,t){let n=0,o=0,s=Math.min(e.length,t.length),i=Math.max(e.length,t.length);for(;o<s;++o)n=n*256+(e[o]^t[o]);for(;o<i;++o)n=n*256+255;return n}add(e){cc("contact.id",e?.id);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e.id,t++);let o=this._indexOf(n,e.id);return o>=0?(this._update(n,o,e),this):n.contacts.length<this.numberOfNodesPerKBucket?(n.contacts.push(e),this.safeDispatchEvent("added",{detail:e}),this):n.dontSplit?(this.safeDispatchEvent("ping",{detail:{oldContacts:n.contacts.slice(0,this.numberOfNodesToPing),newContact:e}}),this):(this._split(n,t),this.add(e))}closest(e,t=1/0){if(cc("id",e),!Number.isInteger(t)&&t!==1/0||t<=0)throw new TypeError("n is not positive number");let n=[];for(let o=[this.root],s=0;o.length>0&&n.length<t;){let i=o.pop();if(i!=null)if(i.contacts===null){let a=this._determineNode(i,e,s++);o.push(i.left===a?i.right:i.left),o.push(a)}else n=n.concat(i.contacts)}return n.map(o=>({distance:this.distance(o.id,e),contact:o})).sort((o,s)=>o.distance-s.distance).slice(0,t).map(o=>o.contact)}count(){let e=0;for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e+=n.contacts.length)}return e}_determineNode(e,t,n){let o=n>>3,s=n%8;return t.length<=o&&s!==0?e.left:t[o]&1<<7-s?e.right:e.left}get(e){cc("id",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);return o>=0?n.contacts[o]:void 0}_indexOf(e,t){for(let n=0;n<e.contacts.length;++n)if(m9(e.contacts[n].id,t))return n;return-1}remove(e){cc("the id as parameter 1",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);if(o>=0){let s=n.contacts.splice(o,1)[0];this.safeDispatchEvent("removed",{detail:s})}return this}_split(e,t){e.left=up(),e.right=up();for(let s of e.contacts)this._determineNode(e,s.id,t).contacts.push(s);e.contacts=null;let n=this._determineNode(e,this.localNodeId,t),o=e.left===n?e.right:e.left;o.dontSplit=!0}toArray(){let e=[];for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e=e.concat(n.contacts))}return e}*toIterable(){for(let e=[this.root];e.length>0;){let t=e.pop();t!=null&&(t.contacts===null?e.push(t.right,t.left):yield*t.contacts)}}_update(e,t,n){if(!m9(e.contacts[t].id,n.id))throw new Error("wrong index for _update");let o=e.contacts[t],s=this.arbiter(o,n);s===o&&o!==n||(e.contacts.splice(t,1),e.contacts.push(s),this.safeDispatchEvent("updated",{detail:{incumbent:o,selection:s}}))}};var mI="kad-close",gI=50,g9=20,yI=1e4,wI=10,X1=class extends Re{kBucketSize;kb;pingQueue;log;components;pingTimeout;pingConcurrency;running;protocol;tagName;tagValue;metrics;constructor(e,t){super();let{kBucketSize:n,pingTimeout:o,logPrefix:s,pingConcurrency:i,protocol:a,tagName:c,tagValue:l}=t;this.components=e,this.log=e.logger.forComponent(`${s}:routing-table`),this.kBucketSize=n??g9,this.pingTimeout=o??yI,this.pingConcurrency=i??wI,this.running=!1,this.protocol=a,this.tagName=c??mI,this.tagValue=l??gI,this.pingQueue=new Vt({concurrency:this.pingConcurrency,metricName:`${s.replaceAll(":","_")}_ping_queue`,metrics:this.components.metrics}),this.pingQueue.addEventListener("error",d=>{this.log.error("error pinging peer",d.detail)}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${s.replaceAll(":","_")}_routing_table_size`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new Q1({localNodeId:await jr(this.components.peerId),numberOfNodesPerKBucket:this.kBucketSize,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",t=>{this._onPing(t).catch(n=>{this.log.error("could not process k-bucket ping event",n)})}),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new Ze,n=o9(()=>{let o=new Ze(e.closest(e.localNodeId,g9).map(a=>a.peer)),s=o.difference(t),i=t.difference(o);Promise.resolve().then(async()=>{for(let a of s)await this.components.peerStore.merge(a,{tags:{[this.tagName]:{value:this.tagValue}}});for(let a of i)await this.components.peerStore.merge(a,{tags:{[this.tagName]:void 0}})}).catch(a=>{this.log.error("Could not update peer tags",a)}),t=o});e.addEventListener("added",o=>{n(),this.safeDispatchEvent("peer:add",{detail:o.detail.peer})}),e.addEventListener("removed",o=>{n(),this.safeDispatchEvent("peer:remove",{detail:o.detail.peer})})}async _onPing(e){if(!this.running)return;let{oldContacts:t,newContact:n}=e.detail,s=(await Promise.all(t.map(async i=>{let a=this.pingQueue.find(i.peer);return a!=null?a.join():this.pingQueue.add(async()=>{let c;try{let l={signal:AbortSignal.timeout(this.pingTimeout)};this.log("pinging old contact %p",i.peer),c=await(await this.components.connectionManager.openConnection(i.peer,l)).newStream(this.protocol,l);let u=et(c);await u.write({type:Ee.PING},Cr,l);let f=await u.read(Cr,l);if(await u.unwrap().close(),f.type!==Ee.PING)throw new m(`Incorrect message type received, expected PING got ${f.type}`,"ERR_BAD_PING_RESPONSE");return!0}catch(l){return this.running&&this.kb!=null&&(this.log.error("could not ping peer %p",i.peer,l),this.log("evicting old contact after ping failed %p",i.peer),this.kb.remove(i.id)),c?.abort(l),!1}finally{this.metrics?.routingTableSize.update(this.size)}},{peerId:i.peer})}))).filter(i=>i).length;this.running&&s<t.length&&this.kb!=null&&(this.log("adding new contact %p",n.peer),this.kb.add(n))}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await jr(e),n=this.closestPeer(t);if(n!=null&&e.equals(n))return n}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).map(o=>o.peer)}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.add({id:t,peer:e}),this.log("added %p with kad id %b",e,t),this.metrics?.routingTableSize.update(this.size)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.remove(t),this.metrics?.routingTableSize.update(this.size)}};var y9=[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 j1=15,Z1=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??3e5,this.refreshQueryTimeout=i??3e4,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async start(){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,s)=>{try{if(await this._refreshCommonPrefixLength(s,o,e),this._numPeersForCpl(t)===0){let i=Math.min(2*(s+1),n.length-1);for(let a=s+1;a<i+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(i){this.log.error(i)}})).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 s=await z1(this.peerRouting.getClosestPeers(o.toBytes(),{signal:AbortSignal.timeout(this.refreshQueryTimeout)}));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>j1&&(e=j1);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");let t=qt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localNodeId,n,e);return je(o)}async _makePeerId(e,t,n){if(n>j1)throw new Error(`Cannot generate peer ID for common prefix length greater than ${j1}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=y9[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,De.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb!=null)for(let{id:e}of this.routingTable.kb.toIterable()){let t=Vn(this.routingTable.kb.localNodeId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var J1=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(this.log("start"),t.key==null||t.key.length===0)throw new m("Missing key","ERR_MISSING_KEY");let n;try{n=ce.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>X(s).toString())),await this.providers.addProvider(n,je(o.id))}))}};var ed=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){this.log("incoming request from %p for peers closer to %b",e,t.key);let n=[];if(t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");J(this.peerId.toBytes(),t.key)?n=[{id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(Z("p2p").code))}]:n=await this.peerRouting.getCloserPeersOffline(t.key,e);let o={type:Ee.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toBytes(),multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var td=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");let n;try{n=ce.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),i=await this._getPeers(o),a=await this._getPeers(s.map(({id:l})=>l)),c={type:Ee.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),s=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:i})=>i)});s.multiaddrs.length>0&&t.push(s)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}return t}};var rd=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new m("Invalid key","ERR_INVALID_KEY");let o={type:Ee.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(r9(n)){this.log("is public key");let a=n9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new m("No public key found in key book","ERR_NOT_FOUND");c=l.id.publicKey}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null)return this.log("returning found public key"),o.record=new _t(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.map(a=>({id:a.id.toBytes(),multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=No(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.code==="ERR_NOT_FOUND")return;throw s}let o=_t.deserialize(n);if(o==null)throw new m("Invalid record","ERR_INVALID_RECORD");if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var nd=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 od=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new m(o,"ERR_EMPTY_RECORD")}try{let o=_t.deserialize(t.record);await Oi(this.validators,o),o.timeReceived=new Date;let s=No(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var sd=class{handlers;routingTable;log;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[Ee.GET_VALUE.toString()]:new rd(e,{peerRouting:o,logPrefix:i}),[Ee.PUT_VALUE.toString()]:new od(e,{validators:s,logPrefix:i}),[Ee.FIND_NODE.toString()]:new ed(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[Ee.ADD_PROVIDER.toString()]:new J1(e,{providers:n,logPrefix:i}),[Ee.GET_PROVIDERS.toString()]:new td(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[Ee.PING.toString()]:new nd(e,{logPrefix:i})}}async handleMessage(e,t){try{await this.routingTable.add(e)}catch(o){this.log.error("Failed to update the kbucket store",o)}let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}return n.handle(e,t)}onIncomingStream(e){Promise.resolve().then(async()=>{let{stream:t,connection:n}=e,o=n.remotePeer;try{await this.routingTable.add(o)}catch(i){this.log.error(i)}let s=this;await Ke(t,i=>$t(i),async function*(i){for await(let a of i){let c=Cr.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield Cr.encode(l))}},i=>yr(i),t)}).catch(t=>{this.log.error(t)})}};var id=class extends Re{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 wt("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var dp=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Kt(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Kt(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 m("Not found","ERR_NOT_FOUND")}},fp=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 m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},EI=32,bI=64,ad=class extends Re{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t){super();let{kBucketSize:n,clientMode:o,validators:s,selectors:i,querySelfInterval:a,protocol:c,logPrefix:l,pingTimeout:d,pingConcurrency:u,maxInboundStreams:f,maxOutboundStreams:g,providers:h}=t,p=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(p),this.protocol=c??Gg,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??EI,this.maxOutboundStreams=g??bI,this.peerInfoMapper=t.peerInfoMapper??e9,this.routingTable=new X1(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:p}),this.providers=new W1(e,h??{}),this.validators={...Jg,...s},this.selectors={...Zg,...i},this.network=new $1(e,{protocol:this.protocol,logPrefix:p});let y=j();t.allowQueryWithZeroPeers===!0&&y.resolve(),this.queryManager=new G1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.peerRouting=new q1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:p}),this.contentFetching=new V1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:p}),this.contentRouting=new K1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:p}),this.routingTableRefresh=new Z1(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:p}),this.rpc=new sd(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:p,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new id(e,{protocol:this.protocol,logPrefix:p}),this.querySelf=new Y1(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.network.addEventListener("peer",w=>{let b=w.detail;this.onPeerConnect(b).catch(E=>{this.log.error("could not add %p to routing table",b.id,E)}),this.dispatchEvent(new wt("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",w=>{let b=w.detail;Promise.resolve().then(async()=>{let E=await this.components.peerStore.get(b),S={id:b,multiaddrs:E.addresses.map(({multiaddr:_})=>_),protocols:E.protocols};await this.onPeerConnect(S)}).catch(E=>{this.log.error("could not add %p to routing table",b,E)})}),this.dhtPeerRouting=new fp(this),this.dhtContentRouting=new dp(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",w=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=w.detail.peer.addresses.some(({multiaddr:S})=>s9(S)),E=this.getMode();b&&E==="client"?await this.setMode("server"):E==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}get[Jr](){return this.dhtContentRouting}get[en](){return this.dhtPeerRouting}get[Vo](){return this}async onPeerConnect(e){if(this.log("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log("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){await this.components.registrar.unhandle(this.protocol),e==="client"?(this.log("enabling client mode"),this.clientMode=!0):(this.log("enabling server mode"),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server"),this.querySelf.start(),await Promise.all([this.providers.start(),this.queryManager.start(),this.network.start(),this.routingTable.start(),this.topologyListener.start(),this.routingTableRefresh.start()])}async stop(){this.running=!1,this.querySelf.stop(),await Promise.all([this.providers.stop(),this.queryManager.stop(),this.network.stop(),this.routingTable.stop(),this.routingTableRefresh.stop(),this.topologyListener.stop()])}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var w9;(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"})(w9||(w9={}));function E9(r){return e=>new ad(e,r)}var D9=Ye(I9(),1),Ui=D9.default;var M9=Ye(U9(),1);var be;(function(r){r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(be||(be={}));var MI="/pkcs8/",F9="/info/",vs=new WeakMap,Rs={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},pp={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function $n(r){return r==null||typeof r!="string"?!1:r===(0,M9.default)(r.trim())&&r.length>0}async function Le(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function dn(r){return new Oe(MI+r)}function Oo(r){return new Oe(F9+r)}var ud=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Ui(pp,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Rs.minKeyLength)throw new Error(`dek.keyLength must be least ${Rs.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Rs.minSaltLength)throw new Error(`dek.saltLength must be least ${Rs.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Rs.minIterationCount)throw new Error(`dek.iterationCount must be least ${Rs.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?sc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";vs.set(this,{dek:n})}static generateOptions(){let e=Object.assign({},pp),t=Math.ceil(Rs.minSaltLength/3)*3;return e.dek.salt=P(qt(t),"base64"),e}static get options(){return pp}async createKey(e,t,n=2048){if(!$n(e)||e==="self")throw await Le(),new m("Invalid key name",be.ERR_INVALID_KEY_NAME);if(typeof t!="string")throw await Le(),new m("Invalid key type",be.ERR_INVALID_KEY_TYPE);let o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m("Key name already exists",be.ERR_KEY_ALREADY_EXISTS);switch(t.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await Le(),new m("Invalid RSA key size",be.ERR_INVALID_KEY_SIZE);break;default:break}let i;try{let a=await Ta(t,n),c=await a.id(),l=vs.get(this);if(l==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let d=l.dek,u=await a.export(d);i={name:e,id:c};let f=this.components.datastore.batch();f.put(o,B(u)),f.put(Oo(e),B(JSON.stringify(i))),await f.commit()}catch(a){throw await Le(),a}return i}async listKeys(){let e={prefix:F9},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(P(n.value)));return t}async findKeyById(e){try{let n=(await this.listKeys()).find(o=>o.id===e);if(n==null)throw new m(`Key with id '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND);return n}catch(t){throw await Le(),t}}async findKeyByName(e){if(!$n(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=Oo(e);try{let n=await this.components.datastore.get(t);return JSON.parse(P(n))}catch(n){throw await Le(),this.log.error(n),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!$n(e)||e==="self")throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=dn(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Oo(e)),await o.commit(),n}async renameKey(e,t){if(!$n(e)||e==="self")throw await Le(),new m(`Invalid old key name '${e}'`,be.ERR_OLD_KEY_NAME_INVALID);if(!$n(t)||t==="self")throw await Le(),new m(`Invalid new key name '${t}'`,be.ERR_NEW_KEY_NAME_INVALID);let n=dn(e),o=dn(t),s=Oo(e),i=Oo(t);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${t}' already exists`,be.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(P(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,B(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Le(),c}}async exportKey(e,t){if(!$n(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new m("Password is required",be.ERR_PASSWORD_REQUIRED);let n=dn(e);try{let o=await this.components.datastore.get(n),s=P(o),i=vs.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek;return await(await ui(s,a)).export(t)}catch(o){throw await Le(),o}}async exportPeerId(e){let t="temporary-password",n=await this.exportKey(e,t),o=await ui(n,t);return ht(o.public.bytes,o.bytes)}async importKey(e,t,n){if(!$n(e)||e==="self")throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new m("PEM encoded key is required",be.ERR_PEM_REQUIRED);let o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i;try{i=await ui(t,n)}catch{throw await Le(),new m("Cannot read the key, most likely the password is wrong",be.ERR_CANNOT_READ_KEY)}let a;try{a=await i.id();let d=vs.get(this);if(d==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let u=d.dek;t=await i.export(u)}catch(d){throw await Le(),d}let c={name:e,id:a},l=this.components.datastore.batch();return l.put(o,B(t)),l.put(Oo(e),B(JSON.stringify(c))),await l.commit(),c}async importPeer(e,t){try{if(!$n(e))throw new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw new m("PeerId is required",be.ERR_MISSING_PRIVATE_KEY);if(t.privateKey==null)throw new m("PeerId.privKey is required",be.ERR_MISSING_PRIVATE_KEY);let n=await Sr(t.privateKey),o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i=vs.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek,c=await n.export(a),l={name:e,id:t.toString()},d=this.components.datastore.batch();return d.put(o,B(c)),d.put(Oo(e),B(JSON.stringify(l))),await d.commit(),l}catch(n){throw await Le(),n}}async getPrivateKey(e){if(!$n(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);try{let t=dn(e),n=await this.components.datastore.get(t);return P(n)}catch(t){throw await Le(),this.log.error(t),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Le(),new m(`Invalid old pass type '${typeof e}'`,be.ERR_INVALID_OLD_PASS_TYPE);if(typeof t!="string")throw await Le(),new m(`Invalid new pass type '${typeof t}'`,be.ERR_INVALID_NEW_PASS_TYPE);if(t.length<20)throw await Le(),new m(`Invalid pass length ${t.length}`,be.ERR_INVALID_PASS_LENGTH);this.log("recreating keychain");let n=vs.get(this);if(n==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?sc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";vs.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(dn(a.name)),l=P(c),d=await ui(l,o),u=s.toString(),f=await d.export(u),g=this.components.datastore.batch(),h={name:a.name,id:a.id};g.put(dn(a.name),B(f)),g.put(Oo(a.name),B(JSON.stringify(h))),await g.commit()}this.log("keychain reconstructed")}};function dd(r={}){return e=>new ud(e,r)}var Mi=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 mp}async consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new m("Rate limit exceeded","ERR_RATE_LIMIT_EXCEEDED",i);if(this.execEvenly&&i.msBeforeNext>0&&!i.isFirstInDuration){let a=Math.ceil(i.msBeforeNext/(i.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=i.consumedPoints*this.execEvenlyMinDelayMs),await C1(a)}return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}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)}},mp=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.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 lc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),gp=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),V9=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var yp=1<<20,FI=4<<20,fd=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=yp,t=FI){this._buffer=new ue,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 Object.assign(new Error("unprocessed message queue size too large!"),{code:"ERR_MSG_QUEUE_TOO_BIG"});let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.code==="ERR_MSG_TOO_BIG")throw l;break}let{id:n,type:o,length:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=$9(e),{value:o,offset:s}=$9(e,n),i=t&7;if(lc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw Object.assign(new Error("message size too large!"),{code:"ERR_MSG_TOO_BIG"});return{id:t>>3,type:i,offset:n+s,length:o}}},VI=128,K9=127;function $9(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&K9)<<n:(s&K9)*Math.pow(2,n),n+=7}while(s>=VI);return e=o-e,{value:t,offset:e}}var wp=10*1024,Ep=class{_pool;_poolOffset;constructor(){this._pool=ze(wp),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=Ne(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=Ne(e.data.length)):(Ve(0,n,o),o+=Ne(0));let s=n.subarray(this._poolOffset,o);wp-o<100?(this._pool=ze(wp),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},KI=new Ep;async function*H9(r){for await(let e of r){let t=new ue;KI.write(e,t),yield t}}var bp=class extends Io{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?gp:V9,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:gp.NEW_STREAM,data:new ue(B(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 q9(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=yp}=r;return new bp({id:s==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:s==="initiator"?"outbound":"inbound",maxDataSize:i,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${s}:${e}`)})}var $I=1024,HI=1024,qI=1024*1024*4,WI=5,GI=500;function W9(r){let e={...r,type:`${lc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=P(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=P(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var hd=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??GI,this.sink=this._createSink(),this._source=st({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=Ke(this._source,n=>H9(n)),this.closeController=new AbortController,this.rateLimiter=new Mi({points:t.disconnectThreshold??WI,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 Error("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:s}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??HI))throw new m("Too many outbound streams open","ERR_TOO_MANY_OUTBOUND_STREAMS");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=q9({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,W9(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),s.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return s.set(t,c),c}_createSink(){return async t=>{let n=()=>{E1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new fd(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let s of t)for(let i of o.write(s))await this._handleIncoming(i);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",W9(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??$I)){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:P(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let s=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(s==null){this.log("missing stream %s for message type %s",t,lc[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 i=this._init.maxStreamBufferSize??qI;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new m("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers","ERR_STREAM_INPUT_BUFFER_FULL");s.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:s.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:s.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),s.abort(a)}}};var xp=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}createStreamMuxer(e={}){return new hd(this.components,{...e,...this._init})}};function G9(r={}){return e=>new xp(e,r)}var z9="1.0.0",Y9="ping",Q9="ipfs";var vp="ERR_WRONG_PING_ACK";var pd=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??Q9}/${Y9}/${z9}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0,this.handleMessage=this.handleMessage.bind(this)}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),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();Ke(t,t).catch(o=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,o)}).finally(()=>{let o=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,o)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=qt(32),s=await this.components.connectionManager.openConnection(e,t),i,a=()=>{};if(t.signal==null){let c=AbortSignal.timeout(this.timeout);t={...t,signal:c}}try{i=await s.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{i?.abort(new m("ping timeout",pn))},t.signal?.addEventListener("abort",a,{once:!0});let c=await Ke([o],i,async d=>ds(d)),l=Date.now()-n;if(c==null)throw new m(`Did not receive a ping ack after ${l}ms`,vp);if(!J(o,c.subarray()))throw new m(`Received wrong ping ack after ${l}ms`,vp);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",s.remotePeer,c),i?.abort(c),c}finally{t.signal?.removeEventListener("abort",a),i!=null&&await i.close()}}};function X9(r={}){return e=>new pd(e,r)}var hr;(function(r){r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_DATA_CHANNEL="ERR_DATA_CHANNEL",r.ERR_CONNECTION_CLOSED="ERR_CONNECTION_CLOSED",r.ERR_HASH_NOT_SUPPORTED="ERR_HASH_NOT_SUPPORTED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_INVALID_FINGERPRINT="ERR_INVALID_FINGERPRINT",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS"})(hr||(hr={}));var Lo=class extends m{constructor(e,t){super(`WebRTC transport error: ${e}`,t??""),this.name="WebRTCTransportError"}};var Rp=class extends Lo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`,hr.ERR_DATA_CHANNEL),this.name="WebRTC/DataChannelError"}};function Tp(r,e){return new Rp(r,e)}var Sp=class extends Lo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`,hr.ERR_INVALID_MULTIADDR),this.name="WebRTC/InappropriateMultiaddrError"}};function md(r){return new Sp(r)}var _p=class extends Lo{constructor(e){super(`There was a problem with a provided argument: ${e}`,hr.ERR_INVALID_PARAMETERS),this.name="WebRTC/InvalidArgumentError"}};function uc(r){return new _p(r)}var Ap=class extends Lo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`,hr.ERR_INVALID_FINGERPRINT),this.name="WebRTC/InvalidFingerprintError"}};function kp(r,e){return new Ap(r,e)}var Ip=class extends Lo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`,hr.ERR_NOT_IMPLEMENTED),this.name="WebRTC/UnimplementedError"}};function j9(r){return new Ip(r)}var Dp=class extends Lo{constructor(e){super(`unsupported hash algorithm: ${e}`,hr.ERR_HASH_NOT_SUPPORTED),this.name="WebRTC/UnsupportedHashAlgorithmError"}};function Z9(r){return new Dp(r)}var J9=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},jI=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var ZI=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var JI=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 eD=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var tD=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var rD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,nD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,ey=3,oD=[["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",rD]],ty=[["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 ny(r){return r?ry(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new tD:typeof navigator<"u"?ry(navigator.userAgent):aD()}function sD(r){return r!==""&&oD.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function ry(r){var e=sD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new eD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<ey&&(o=J9(J9([],o,!0),cD(ey-o.length),!0)):o=[];var s=o.join("."),i=iD(r),a=nD.exec(r);return a&&a[1]?new JI(t,s,i,a[1]):new jI(t,s,i)}function iD(r){for(var e=0,t=ty.length;e<t;e++){var n=ty[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function aD(){var r=typeof process<"u"&&process.version;return r?new ZI(process.version.slice(1)):null}function cD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var oy=ny(),dc=oy!=null&&oy.name==="firefox",gd=async function*(){},yd=async r=>{},lD=30*1e3;function sy(r,e,t=lD,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(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}var Ss=class{log;peerConnection;remoteAddr;timeline;metrics;source=gd();sink=yd;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Qt;(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=()=>$e(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.flag=r.Flag.codec().decode(o);break;case 2:i.message=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(Qt||(Qt={}));var uD=16*1024*1024,dD=30*1e3,fD=5,hD=2,pD=16*1024,mD=5e3,gD=5e3,Cp=class extends Io{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(s){this.log.error("error receiving FIN_ACK",s)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(s=>{this.log.error("error ending stream",s)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=st(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??dD,this.maxBufferedAmount=e.maxBufferedAmount??uD,this.maxMessageSize=(e.maxMessageSize??pD)-fD-hD,this.receiveFinAck=j(),this.finAckTimeout=e.closeTimeout??mD,this.openTimeout=e.openTimeout??gD,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 m("Unknown datachannel state","ERR_INVALID_STATE")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(s=>{this.log.error("error closing stream after channel closed",s)})},this.channel.onerror=o=>{let s=o.error;this.abort(s)},this.channel.onmessage=async o=>{let{data:s}=o;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of $t(this.incomingData)){let s=n.processIncomingProtobuf(o);s!=null&&n.sourcePush(new ue(s))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await ac(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof xo?new m(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`,"ERR_BUFFER_CLEAR_TIMEOUT"):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new m(`Invalid datachannel state - ${this.channel.readyState}`,"ERR_INVALID_STATE");this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await ac(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Qt.encode({message:n}),s=yr.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Qt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Qt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Lt(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorCode:"ERR_FIN_ACK_NOT_RECEIVED"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Qt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Qt.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===Qt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Qt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Qt.Flag.RESET&&this.reset(),t.flag===Qt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Qt.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=Qt.encode({flag:e}),n=yr.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function Fi(r){let{channel:e,direction:t}=r;return new Cp({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var iy="/webrtc",_s=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??iy,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},s=Fi({channel:n,direction:"inbound",onEnd:i=>{o.onEnd(i)},logger:e.logger,...this.dataChannelOptions});o.stream=s,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(i=>i.stream.id!==s.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new Np(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},Np=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??iy,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=Fi({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),sy(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=gd();sink=yd;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Fi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Vi=globalThis.RTCPeerConnection,wd=globalThis.RTCSessionDescription,ay=globalThis.RTCIceCandidate;var Xt;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.data=o.string();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(Xt||(Xt={}));var Ed=async(r,e,t)=>{try{let n=j();for(wD(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null)break;if(o.type!==Xt.Type.ICE_CANDIDATE)throw new m("ICE candidate message expected","ERR_NOT_ICE_CANDIDATE");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.log.trace("end-of-candidates received");continue}let i=new ay(s);t.log.trace("%s received new ICE candidate",t.direction,i);try{await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0)throw n}};function yD(r){return dc?r.iceConnectionState:r.connectionState}function wD(r,e){r[dc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(yD(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new m("RTCPeerConnection was closed","ERR_CONNECTION_CLOSED_BEFORE_CONNECTED"));break;default:break}}}async function cy({peerConnection:r,signal:e,metrics:t,multiaddr:n,connectionManager:o,transportManager:s,log:i}){let{baseAddr:a}=ly(n);t?.dialerEvents.increment({open:!0}),i.trace("dialing base address: %a",a);let c=a.getPeerId();if(c==null)throw new m("Relay peer was missing","ERR_INVALID_ADDRESS");let l=o.getConnections(ge(c)),d,u=!1;l.length===0?(d=await s.dial(a,{signal:e}),u=!0):d=l[0];try{let f=await d.newStream(bd,{signal:e,runOnTransientConnection:!0}),g=et(f).pb(Xt);try{let h=r.createDataChannel("init");r.onicecandidate=({candidate:b})=>{let E=JSON.stringify(b?.toJSON()??null);i.trace("initiator sending ICE candidate %s",E),g.write({type:Xt.Type.ICE_CANDIDATE,data:E},{signal:e}).catch(S=>{i.error("error sending ICE candidate",S)})},r.onicecandidateerror=b=>{i.error("initiator ICE candidate error",b)};let p=await r.createOffer().catch(b=>{throw i.error("could not execute createOffer",b),new m("Failed to set createOffer","ERR_SDP_HANDSHAKE_FAILED")});i.trace("initiator send SDP offer %s",p.sdp),await g.write({type:Xt.Type.SDP_OFFER,data:p.sdp},{signal:e}),await r.setLocalDescription(p).catch(b=>{throw i.error("could not execute setLocalDescription",b),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")});let y=await g.read({signal:e});if(y.type!==Xt.Type.SDP_ANSWER)throw new m("Remote should send an SDP answer","ERR_SDP_HANDSHAKE_FAILED");i.trace("initiator receive SDP answer %s",y.data);let w=new wd({type:"answer",sdp:y.data});return await r.setRemoteDescription(w).catch(b=>{throw i.error("could not execute setRemoteDescription",b),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")}),i.trace("initiator read candidates until connected"),await Ed(r,g,{direction:"initiator",signal:e,log:i}),i.trace("initiator connected, closing init channel"),h.close(),i.trace("initiator closing signalling stream"),await g.unwrap().unwrap().close({signal:e}),i.trace("initiator connected to remote address %s",n),{remoteAddress:n}}catch(h){throw r.close(),f.abort(h),h}finally{r.onicecandidate=null,r.onicecandidateerror=null}}finally{if(u)try{await d.close({signal:e})}catch(f){d.abort(f)}}}var xd=class extends Re{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>Yr.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function uy({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=et(e).pb(Xt);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:Xt.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})};let a=await s.read({signal:t});if(a.type!==Xt.Type.SDP_OFFER)throw new m(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `,"ERR_SDP_HANDSHAKE_FAILED");o.trace("recipient receive SDP offer %s",a.data);let c=new wd({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new m("Failed to create answer","ERR_SDP_HANDSHAKE_FAILED")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:Xt.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),o.trace("recipient read candidates until connected"),await Ed(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(r.connectionState!=="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 i=X(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var ED="/webrtc",bD="/p2p-circuit",bd="/webrtc-signaling/0.0.1",xD=30*1e3,vd=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,ie(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}isStarted(){return this._started}async start(){await this.components.registrar.handle(bd,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnTransientConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(bd),this._started=!1}createListener(e){return new xd(this.components,{shutdownController:this.shutdownController})}[Symbol.toStringTag]="@libp2p/webrtc";[tn]=!0;filter(e){return e.filter(M4.exactMatch)}async dial(e,t){this.log.trace("dialing address: %a",e);let n=new Vi(this.init.rtcConfiguration),o=new _s(this.components,{peerConnection:n,dataChannelOptions:this.init.dataChannel}),{remoteAddress:s}=await cy({peerConnection:n,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log}),i=new Ss(this.components,{peerConnection:n,timeline:{open:Date.now()},remoteAddr:s,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:o});return this._closeOnShutdown(n,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??xD),o=new Vi(this.init.rtcConfiguration),s=new _s(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await uy({peerConnection:o,connection:e,stream:t,signal:n,log:this.log}),a=new Ss(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});this._closeOnShutdown(o,a),await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),await t.close({signal:n})}catch(i){throw t.abort(i),i}}_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 ly(r){let e=r.toString().split(ED+"/");if(e.length!==2)throw new m("webrtc protocol was not present in multiaddr",hr.ERR_INVALID_MULTIADDR);if(!e[0].includes(bD))throw new m("p2p-circuit protocol was not present in multiaddr",hr.ERR_INVALID_MULTIADDR);let t=X(e[0]),o=X("/"+e[1]).getPeerId();if(o==null)throw new m("destination peer id was missing",hr.ERR_INVALID_MULTIADDR);let s=t.protos().pop();if(s===void 0)throw new m("invalid multiaddr",hr.ERR_INVALID_MULTIADDR);return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:ge(o)}}var Vw=Ye(c3(),1);var Pw=Ye(c3(),1);var l3=Object.values(gr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Ow(r,e){let t=r.getConfiguration().certificates?.at(0);if(t==null||t.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:Dk(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw kp("","no fingerprint on local certificate");return n}var Ik=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Dk(r){return r.match(Ik)?.groups?.fingerprint}function Tk(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Od(r){let t=r.stringTuples().filter(n=>n[0]===Uw).map(n=>n[1])[0];if(t===void 0||t==="")throw md(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function u3(r){let e=l3.decode(r);return Pw.decode(e)}function kk(r){let e=u3(Od(r)),t=d3(e.name),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw kp(n,r.toString());return[`${t.toUpperCase()} ${o.join(":").toUpperCase()}`,n]}function d3(r){switch(r){case"sha1":return"sha-1";case"sha2-256":return"sha-256";case"sha2-512":return"sha-512";default:throw Z9(r)}}function Ck(r,e){let{host:t,port:n}=r.toOptions(),o=Tk(r),[s]=kk(r);return`v=0
21
+ `)}`:`${t} :`}};m6=po;W.Constructed=m6;po.NAME="CONSTRUCTED";var $l=class extends Nt{fromBER(e,t,n){return t}toBER(e){return $r}};$l.override="EndOfContentValueBlock";var g6,Hl=class extends xt{constructor(e={}){super(e,$l),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};g6=Hl;W.EndOfContent=g6;Hl.NAME=xa;var y6,mo=class extends xt{constructor(e={}){super(e,Nt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};y6=mo;W.Null=y6;mo.NAME="NULL";var ql=class extends Nn(Nt){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 Cn(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,c0.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};ql.NAME="BooleanValueBlock";var w6,Wl=class extends xt{constructor(e={}){super(e,ql),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}`}};w6=Wl;W.Boolean=w6;Wl.NAME="BOOLEAN";var Gl=class extends Nn(on){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=on.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let s=0;s<this.value.length;s++){let i=this.value[s].constructor.NAME;if(i===xa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(i!==d6)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?on.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};Gl.NAME="OctetStringValueBlock";var E6,Tn=class r extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Gl),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 s=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(s.byteLength){let i=bu(s,0,s.byteLength);i.offset!==-1&&i.offset===n&&(this.valueBlock.value=[i.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?po.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)}};E6=Tn;W.OctetString=E6;Tn.NAME=d6;var zl=class extends Nn(on){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=on.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===xa){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==f6)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 s=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,s,t,n))return-1;let i=s.subarray(t,t+n);if(this.unusedBits=i[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=i.subarray(1);try{if(a.byteLength){let c=bu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=i.subarray(1),this.blockLength=i.length,t+n}toBER(e,t){if(this.isConstructed)return on.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return $r;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}}};zl.NAME="BitStringValueBlock";var b6,si=class extends xt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,s;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((s=n.value)===null||s===void 0)&&s.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},zl),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 po.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)}`}}};b6=si;W.BitString=b6;si.NAME=f6;var x6;function JR(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l=0,d=c<i?i:c,u=0;for(let f=d;f>=0;f--,u++){switch(!0){case u<a.length:l=s[i-u]+a[c-u]+t[0];break;default:l=s[i-u]+t[0]}switch(t[0]=l/10,!0){case u>=s.length:s=Ll(new Uint8Array([l%10]),s);break;default:s[i-u]=l%10}}return t[0]>0&&(s=Ll(t,s)),s}function u6(r){if(r>=Ea.length)for(let e=Ea.length;e<=r;e++){let t=new Uint8Array([0]),n=Ea[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let s=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=s[0]/10,n[o]=s[0]%10}t[0]>0&&(n=Ll(t,n)),Ea.push(n)}return Ea[r]}function eS(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),s=n.slice(0),i=s.length-1,a=o.slice(0),c=a.length-1,l,d=0;for(let u=c;u>=0;u--,d++)switch(l=s[i-d]-a[c-d]-t,!0){case l<0:t=1,s[i-d]=l+10;break;default:t=0,s[i-d]=l}if(t>0)for(let u=i-c+1;u>=0;u--,d++)if(l=s[i-d]-t,l<0)t=1,s[i-d]=l+10;else{t=0,s[i-d]=l;break}return s.slice()}var va=class extends Nn(Nt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=c0.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(a6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let s=this.fromBER(e,t,n);if(s===-1)return s;let i=this.valueHexView;return i[0]===0&&i[1]&128?this.valueHexView=i.subarray(1):o!==0&&i.length<o&&(o-i.length>1&&(o=i.length+1),this.valueHexView=i.subarray(o-i.length)),s}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,s=this.valueHexView,i="",a=!1;for(let c=s.byteLength-1;c>=0;c--){o=s[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=eS(u6(n),t),i="-";break;default:t=JR(t,u6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(i+=l6.charAt(t[c]));return a===!1&&(i+=l6.charAt(0)),i}};x6=va;va.NAME="IntegerValueBlock";Object.defineProperty(x6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var v6,it=class r extends xt{constructor(e={}){super(e,va),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return Bl(),BigInt(this.valueBlock.toString())}static fromBigInt(e){Bl();let t=BigInt(e),n=new ba,o=t.toString(16).replace(/^-/,""),s=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(s.length+(s[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,d=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));d[0]|=128,n.write(d)}else s[0]&128&&n.write(new Uint8Array([0])),n.write(s);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()}`}};v6=it;W.Integer=v6;it.NAME="INTEGER";var R6,Yl=class extends it{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};R6=Yl;W.Enumerated=R6;Yl.NAME="ENUMERATED";var Ra=class extends Nn(Nt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){Bl();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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=ho(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",$r;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Ra.NAME="sidBlock";var Ql=class extends Nt{constructor({value:e=ii,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Ra;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.value.length===0&&(s.isFirstSid=!0),this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}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,$r;t.push(o)}return l0(t)}fromString(e){this.value=[];let t=0,n=0,o="",s=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,s){let i=this.value[0],a=0;switch(i.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;i.valueDec=c+a,s=!1}else{let i=new Ra;if(o>Number.MAX_SAFE_INTEGER){Bl();let a=BigInt(o);i.valueBigInt=a}else if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return;this.value.length||(i.isFirstSid=!0,s=!0),this.value.push(i)}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}};Ql.NAME="ObjectIdentifierValueBlock";var S6,Kr=class extends xt{constructor(e={}){super(e,Ql),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()}}};S6=Kr;W.ObjectIdentifier=S6;Kr.NAME="OBJECT IDENTIFIER";var Sa=class extends Nn(Dn){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(!Cn(this,o,t,n))return-1;let s=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=s[a]&127,this.blockLength++,!!(s[a]&128));a++);let i=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)i[a]=this.valueHexView[a];return this.valueHexView=i,s[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=os(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,s=new Uint8Array(this.blockLength);for(let i=0;i<this.blockLength-1;i++)s[i]=o[i]|128;return s[this.blockLength-1]=o[this.blockLength-1],s.buffer}let t=ho(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",$r;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),s=t.byteLength-1;for(let i=0;i<s;i++)n[i]=o[i]|128;n[s]=o[s]}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}}};Sa.NAME="relativeSidBlock";var Xl=class extends Nt{constructor({value:e=ii,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let s=new Sa;if(o=s.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=s.error,o;this.blockLength+=s.blockLength,n-=s.blockLength,this.value.push(s)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let s=this.value[o].toBER(e);if(s.byteLength===0)return this.error=this.value[o].error,$r;n.push(s)}return l0(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 s=new Sa;if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return!0;this.value.push(s)}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}};Xl.NAME="RelativeObjectIdentifierValueBlock";var _6,jl=class extends xt{constructor(e={}){super(e,Xl),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()}}};_6=jl;W.RelativeObjectIdentifier=_6;jl.NAME="RelativeObjectIdentifier";var A6,ht=class extends po{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};A6=ht;W.Sequence=A6;ht.NAME="SEQUENCE";var I6,Zl=class extends po{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};I6=Zl;W.Set=I6;Zl.NAME="SET";var Jl=class extends Nn(Nt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ii}toJSON(){return{...super.toJSON(),value:this.value}}};Jl.NAME="StringValueBlock";var eu=class extends Jl{};eu.NAME="SimpleStringValueBlock";var Mt=class extends Fl{constructor({...e}={}){super(e,eu)}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}};Mt.NAME="SIMPLE STRING";var tu=class extends Mt{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}};tu.NAME="Utf8StringValueBlock";var D6,kn=class extends tu{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};D6=kn;W.Utf8String=D6;kn.NAME="UTF8String";var ru=class extends Mt{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))}};ru.NAME="BmpStringValueBlock";var T6,nu=class extends ru{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};T6=nu;W.BmpString=T6;nu.NAME="BMPString";var ou=class extends Mt{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 s=ho(e.charCodeAt(o),8),i=new Uint8Array(s);if(i.length>4)continue;let a=4-i.length;for(let c=i.length-1;c>=0;c--)n[o*4+c+a]=i[c]}this.valueBlock.value=e}};ou.NAME="UniversalStringValueBlock";var k6,su=class extends ou{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};k6=su;W.UniversalString=k6;su.NAME="UniversalString";var C6,iu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};C6=iu;W.NumericString=C6;iu.NAME="NumericString";var N6,au=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};N6=au;W.PrintableString=N6;au.NAME="PrintableString";var P6,cu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};P6=cu;W.TeletexString=P6;cu.NAME="TeletexString";var O6,lu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};O6=lu;W.VideotexString=O6;lu.NAME="VideotexString";var L6,uu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};L6=uu;W.IA5String=L6;uu.NAME="IA5String";var B6,du=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};B6=du;W.GraphicString=B6;du.NAME="GraphicString";var U6,_a=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};U6=_a;W.VisibleString=U6;_a.NAME="VisibleString";var M6,fu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};M6=fu;W.GeneralString=M6;fu.NAME="GeneralString";var F6,hu=class extends Mt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};F6=hu;W.CharacterString=F6;hu.NAME="CharacterString";var V6,Aa=class extends _a{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]=qt(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=qt(this.month,2),t[2]=qt(this.day,2),t[3]=qt(this.hour,2),t[4]=qt(this.minute,2),t[5]=qt(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}}};V6=Aa;W.UTCTime=V6;Aa.NAME="UTCTime";var K6,pu=class extends Aa{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="",s=0,i,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let u=new Number(e[e.length-1]);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let u=1,f=n.indexOf("+"),g="";if(f===-1&&(f=n.indexOf("-"),u=-1),f!==-1){if(g=n.substring(f+1),n=n.substring(0,f),g.length!==2&&g.length!==4)throw new Error("Wrong input string for conversion");let h=parseInt(g.substring(0,2),10);if(isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");if(a=u*h,g.length===4){if(h=parseInt(g.substring(2,4),10),isNaN(h.valueOf()))throw new Error("Wrong input string for conversion");c=u*h}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let u=new Number(`0${n.substring(l)}`);if(isNaN(u.valueOf()))throw new Error("Wrong input string for conversion");s=u.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(i=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.minute=Math.floor(u),u=60*(u-this.minute),this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===12:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=60*s;this.second=Math.floor(u),u=1e3*(u-this.second),this.millisecond=Math.floor(u)}break;case o.length===14:if(i=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let u=1e3*s;this.millisecond=Math.floor(u)}break;default:throw new Error("Wrong input string for conversion")}let d=i.exec(o);if(d===null)throw new Error("Wrong input string for conversion");for(let u=1;u<d.length;u++)switch(u){case 1:this.year=parseInt(d[u],10);break;case 2:this.month=parseInt(d[u],10);break;case 3:this.day=parseInt(d[u],10);break;case 4:this.hour=parseInt(d[u],10)+a;break;case 5:this.minute=parseInt(d[u],10)+c;break;case 6:this.second=parseInt(d[u],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let u=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=u.getUTCFullYear(),this.month=u.getUTCMonth(),this.day=u.getUTCDay(),this.hour=u.getUTCHours(),this.minute=u.getUTCMinutes(),this.second=u.getUTCSeconds(),this.millisecond=u.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(qt(this.year,4)),t.push(qt(this.month,2)),t.push(qt(this.day,2)),t.push(qt(this.hour,2)),t.push(qt(this.minute,2)),t.push(qt(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(qt(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};K6=pu;W.GeneralizedTime=K6;pu.NAME="GeneralizedTime";var $6,mu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};$6=mu;W.DATE=$6;mu.NAME="DATE";var H6,gu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};H6=gu;W.TimeOfDay=H6;gu.NAME="TimeOfDay";var q6,yu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};q6=yu;W.DateTime=q6;yu.NAME="DateTime";var W6,wu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};W6=wu;W.Duration=W6;wu.NAME="Duration";var G6,Eu=class extends kn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};G6=Eu;W.TIME=G6;Eu.NAME="TIME";function rS(r){let{result:e}=ai(r),t=e.valueBlock.value;return{n:P(sn(t[1].toBigInt()),"base64url"),e:P(sn(t[2].toBigInt()),"base64url"),d:P(sn(t[3].toBigInt()),"base64url"),p:P(sn(t[4].toBigInt()),"base64url"),q:P(sn(t[5].toBigInt()),"base64url"),dp:P(sn(t[6].toBigInt()),"base64url"),dq:P(sn(t[7].toBigInt()),"base64url"),qi:P(sn(t[8].toBigInt()),"base64url"),kty:"RSA",alg:"RS256"}}function nS(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 m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new ht({value:[new it({value:0}),it.fromBigInt(an(B(r.n,"base64url"))),it.fromBigInt(an(B(r.e,"base64url"))),it.fromBigInt(an(B(r.d,"base64url"))),it.fromBigInt(an(B(r.p,"base64url"))),it.fromBigInt(an(B(r.q,"base64url"))),it.fromBigInt(an(B(r.dp,"base64url"))),it.fromBigInt(an(B(r.dq,"base64url"))),it.fromBigInt(an(B(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function oS(r){let{result:e}=ai(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:P(sn(t[0].toBigInt()),"base64url"),e:P(sn(t[1].toBigInt()),"base64url")}}function sS(r){if(r.n==null||r.e==null)throw new m("JWK was missing components","ERR_INVALID_PARAMETERS");let t=new ht({value:[new ht({value:[new Kr({value:"1.2.840.113549.1.1.1"}),new mo]}),new si({valueHex:new ht({value:[it.fromBigInt(an(B(r.n,"base64url"))),it.fromBigInt(an(B(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function sn(r){let e=r.toString(16);e.length%2>0&&(e=`0${e}`);let t=e.length/2,n=new Uint8Array(t),o=0,s=0;for(;o<t;)n[o]=parseInt(e.slice(s,s+2),16),o+=1,s+=2;return n}function an(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}var iS=16,d0=32,f0=1e4;async function aS(r,e){let t=qe.get(),o=new ht({value:[new it({value:0}),new ht({value:[new Kr({value:"1.2.840.113549.1.1.1"}),new mo]}),new Tn({valueHex:r.marshal()})]}).toBER(),s=new Uint8Array(o,0,o.byteLength),i=Ht(iS),a=await i0(co,e,i,{c:f0,dkLen:d0}),c=Ht(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),d=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,s),u=new ht({value:[new Tn({valueHex:i}),new it({value:f0}),new it({value:d0}),new ht({value:[new Kr({value:"1.2.840.113549.2.11"}),new mo]})]}),f=new ht({value:[new Kr({value:"1.2.840.113549.1.5.13"}),new ht({value:[new ht({value:[new Kr({value:"1.2.840.113549.1.5.12"}),u]}),new ht({value:[new Kr({value:"2.16.840.1.101.3.4.1.42"}),new Tn({valueHex:c})]})]})]}),h=new ht({value:[f,new Tn({valueHex:d})]}).toBER(),p=new Uint8Array(h,0,h.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...P(p,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
22
+ `)}async function h0(r,e){let t=qe.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ai(o),{iv:i,salt:a,iterations:c,keySize:l,cipherText:d}=cS(s),u=await i0(co,e,a,{c,dkLen:l}),f=await t.subtle.importKey("raw",u,"AES-CBC",!1,["decrypt"]),g=Ia(await t.subtle.decrypt({name:"AES-CBC",iv:i},f,d)),{result:h}=ai(g);n=z6(h)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let o=B(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ai(o);n=z6(s)}else throw new m("Could not parse private key from PEM data","ERR_INVALID_PARAMETERS");return p0(n)}function cS(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new m("Only pkcs5PBES2 encrypted private keys are supported","ERR_INVALID_PARAMS");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 m("Only pkcs5PBKDF2 key derivation functions are supported","ERR_INVALID_PARAMS");let s=n.valueBlock.value[1],i=Ia(s.valueBlock.value[0].getValue()),a=f0,c=d0;if(s.valueBlock.value.length===3)a=Number(s.valueBlock.value[1].toBigInt()),c=Number(s.valueBlock.value[2].toBigInt());else if(s.valueBlock.value.length===2)throw new m("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key","ERR_INVALID_PARAMS");let l=e.valueBlock.value[1].valueBlock.value[1],d=l.valueBlock.value[0].toString();if(d!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(d!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(d!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new m("Only AES-CBC encryption schemes are supported","ERR_INVALID_PARAMS")}}}}let u=Ia(l.valueBlock.value[1].getValue());return{cipherText:Ia(r.valueBlock.value[1].getValue()),salt:i,iterations:a,keySize:c,iv:u}}function z6(r){return Ia(r.valueBlock.value[2].getValue())}function Ia(r){return new Uint8Array(r,0,r.byteLength)}async function Y6(r){let e=await qe.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 j6(e);return{privateKey:t[0],publicKey:t[1]}}async function m0(r){let t=[await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),await lS(r)],n=await j6({privateKey:t[0],publicKey:t[1]});return{privateKey:n[0],publicKey:n[1]}}async function Q6(r,e){let t=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await qe.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function X6(r,e,t){let n=await qe.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return qe.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function j6(r){if(r.privateKey==null||r.publicKey==null)throw new m("Private and public key are required","ERR_INVALID_PARAMETERS");return Promise.all([qe.get().subtle.exportKey("jwk",r.privateKey),qe.get().subtle.exportKey("jwk",r.publicKey)])}async function lS(r){return qe.get().subtle.importKey("jwk",{kty:r.kty,n:r.n,e:r.e},{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])}function xu(r){if(r.kty!=="RSA")throw new m("invalid key type","ERR_INVALID_KEY_TYPE");if(r.n==null)throw new m("invalid key modulus","ERR_INVALID_KEY_MODULUS");return B(r.n,"base64url").length*8}var is=8192,ss=class{_key;constructor(e){this._key=e}verify(e,t){return X6(this._key,t,e)}marshal(){return go.jwkToPkix(this._key)}get bytes(){return Fr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}},yo=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t}genSecret(){return Ht(16)}sign(e){return Q6(this._key,e)}get public(){if(this._publicKey==null)throw new m("public key not provided","ERR_PUBKEY_NOT_PROVIDED");return new ss(this._publicKey)}marshal(){return go.jwkToPkcs1(this._key)}get bytes(){return Vr.encode({Type:Fe.RSA,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return P(e,"base58btc")}async export(e,t="pkcs-8"){if(t==="pkcs-8")return go.exportToPem(this,e);if(t==="libp2p-key")return ti(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};async function p0(r){let e=go.pkcs1ToJwk(r);if(xu(e)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let t=await m0(e);return new yo(t.privateKey,t.publicKey)}function dS(r){let e=go.pkixToJwk(r);if(xu(e)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");return new ss(e)}async function fS(r){if(xu(r)>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await m0(r);return new yo(e.privateKey,e.publicKey)}async function hS(r){if(r>is)throw new m("key size is too large","ERR_KEY_SIZE_TOO_LARGE");let e=await Y6(r);return new yo(e.privateKey,e.publicKey)}var x0={};pe(x0,{Secp256k1PrivateKey:()=>ls,Secp256k1PublicKey:()=>cs,generateKeyPair:()=>AS,unmarshalSecp256k1PrivateKey:()=>SS,unmarshalSecp256k1PublicKey:()=>_S});var pS=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]),wo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Eo=new Uint32Array(64),y0=class extends so{constructor(){super(64,32,8,!1),this.A=wo[0]|0,this.B=wo[1]|0,this.C=wo[2]|0,this.D=wo[3]|0,this.E=wo[4]|0,this.F=wo[5]|0,this.G=wo[6]|0,this.H=wo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:s,F:i,G:a,H:c}=this;return[e,t,n,o,s,i,a,c]}set(e,t,n,o,s,i,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=c|0}process(e,t){for(let u=0;u<16;u++,t+=4)Eo[u]=e.getUint32(t,!1);for(let u=16;u<64;u++){let f=Eo[u-15],g=Eo[u-2],h=Lr(f,7)^Lr(f,18)^f>>>3,p=Lr(g,17)^Lr(g,19)^g>>>10;Eo[u]=p+Eo[u-7]+h+Eo[u-16]|0}let{A:n,B:o,C:s,D:i,E:a,F:c,G:l,H:d}=this;for(let u=0;u<64;u++){let f=Lr(a,6)^Lr(a,11)^Lr(a,25),g=d+f+bl(a,c,l)+pS[u]+Eo[u]|0,p=(Lr(n,2)^Lr(n,13)^Lr(n,22))+xl(n,o,s)|0;d=l,l=c,c=a,a=i+g|0,i=s,s=o,o=n,n=g+p|0}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,d=d+this.H|0,this.set(n,o,s,i,a,c,l,d)}roundClean(){Eo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var bo=js(()=>new y0);function mS(r){let e=ma(r);br(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("Endomorphism can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("Expected endomorphism with beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:gS,hexToBytes:yS}=Sl,as={Err:class extends Error{constructor(e=""){super(e)}},_parseInt(r){let{Err:e}=as;if(r.length<2||r[0]!==2)throw new e("Invalid signature integer tag");let t=r[1],n=r.subarray(2,t+2);if(!t||n.length!==t)throw new e("Invalid signature integer: wrong length");if(n[0]&128)throw new e("Invalid signature integer: negative");if(n[0]===0&&!(n[1]&128))throw new e("Invalid signature integer: unnecessary leading zero");return{d:gS(n),l:r.subarray(t+2)}},toSig(r){let{Err:e}=as,t=typeof r=="string"?yS(r):r;Zs(t);let n=t.length;if(n<2||t[0]!=48)throw new e("Invalid signature tag");if(t[1]!==n-2)throw new e("Invalid signature: incorrect length");let{d:o,l:s}=as._parseInt(t.subarray(2)),{d:i,l:a}=as._parseInt(s);if(a.length)throw new e("Invalid signature: left bytes after parsing");return{r:o,s:i}},hexFromSig(r){let e=l=>Number.parseInt(l[0],16)&8?"00"+l:l,t=l=>{let d=l.toString(16);return d.length&1?`0${d}`:d},n=e(t(r.s)),o=e(t(r.r)),s=n.length/2,i=o.length/2,a=t(s),c=t(i);return`30${t(i+s+4)}02${c}${o}02${a}${n}`}},Pn=BigInt(0),vr=BigInt(1),bV=BigInt(2),Z6=BigInt(3),xV=BigInt(4);function wS(r){let e=mS(r),{Fp:t}=e,n=e.toBytes||((h,p,y)=>{let w=p.toAffine();return Rn(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(h=>{let p=h.subarray(1),y=t.fromBytes(p.subarray(0,t.BYTES)),w=t.fromBytes(p.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(h){let{a:p,b:y}=e,w=t.sqr(h),b=t.mul(w,h);return t.add(t.add(b,t.mul(h,p)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function i(h){return typeof h=="bigint"&&Pn<h&&h<e.n}function a(h){if(!i(h))throw new Error("Expected valid bigint: 0 < bigint < curve.n")}function c(h){let{allowedPrivateKeyLengths:p,nByteLength:y,wrapPrivateKey:w,n:b}=e;if(p&&typeof h!="bigint"){if(lo(h)&&(h=bn(h)),typeof h!="string"||!p.includes(h.length))throw new Error("Invalid key");h=h.padStart(y*2,"0")}let E;try{E=typeof h=="bigint"?h:xn(Ue("private key",h,y))}catch{throw new Error(`private key must be ${y} bytes, hex or bigint, not ${typeof h}`)}return w&&(E=_e(E,b)),a(E),E}let l=new Map;function d(h){if(!(h instanceof u))throw new Error("ProjectivePoint expected")}class u{constructor(p,y,w){if(this.px=p,this.py=y,this.pz=w,p==null||!t.isValid(p))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required")}static fromAffine(p){let{x:y,y:w}=p||{};if(!p||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(p instanceof u)throw new Error("projective point not allowed");let b=E=>t.eql(E,t.ZERO);return b(y)&&b(w)?u.ZERO:new u(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(p){let y=t.invertBatch(p.map(w=>w.pz));return p.map((w,b)=>w.toAffine(y[b])).map(u.fromAffine)}static fromHex(p){let y=u.fromAffine(o(Ue("pointHex",p)));return y.assertValidity(),y}static fromPrivateKey(p){return u.BASE.multiply(c(p))}_setWindowSize(p){this._WINDOW_SIZE=p,l.delete(this)}assertValidity(){if(this.is0()){if(e.allowInfinityPoint&&!t.is0(this.py))return;throw new Error("bad point: ZERO")}let{x:p,y}=this.toAffine();if(!t.isValid(p)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),b=s(p);if(!t.eql(w,b))throw new Error("bad point: equation left != right");if(!this.isTorsionFree())throw new Error("bad point: not in prime-order subgroup")}hasEvenY(){let{y:p}=this.toAffine();if(t.isOdd)return!t.isOdd(p);throw new Error("Field doesn't support isOdd")}equals(p){d(p);let{px:y,py:w,pz:b}=this,{px:E,py:S,pz:_}=p,A=t.eql(t.mul(y,_),t.mul(E,b)),D=t.eql(t.mul(w,_),t.mul(S,b));return A&&D}negate(){return new u(this.px,t.neg(this.py),this.pz)}double(){let{a:p,b:y}=e,w=t.mul(y,Z6),{px:b,py:E,pz:S}=this,_=t.ZERO,A=t.ZERO,D=t.ZERO,R=t.mul(b,b),k=t.mul(E,E),O=t.mul(S,S),N=t.mul(b,E);return N=t.add(N,N),D=t.mul(b,S),D=t.add(D,D),_=t.mul(p,D),A=t.mul(w,O),A=t.add(_,A),_=t.sub(k,A),A=t.add(k,A),A=t.mul(_,A),_=t.mul(N,_),D=t.mul(w,D),O=t.mul(p,O),N=t.sub(R,O),N=t.mul(p,N),N=t.add(N,D),D=t.add(R,R),R=t.add(D,R),R=t.add(R,O),R=t.mul(R,N),A=t.add(A,R),O=t.mul(E,S),O=t.add(O,O),R=t.mul(O,N),_=t.sub(_,R),D=t.mul(O,k),D=t.add(D,D),D=t.add(D,D),new u(_,A,D)}add(p){d(p);let{px:y,py:w,pz:b}=this,{px:E,py:S,pz:_}=p,A=t.ZERO,D=t.ZERO,R=t.ZERO,k=e.a,O=t.mul(e.b,Z6),N=t.mul(y,E),L=t.mul(w,S),F=t.mul(b,_),Y=t.add(y,w),I=t.add(E,S);Y=t.mul(Y,I),I=t.add(N,L),Y=t.sub(Y,I),I=t.add(y,b);let C=t.add(E,_);return I=t.mul(I,C),C=t.add(N,F),I=t.sub(I,C),C=t.add(w,b),A=t.add(S,_),C=t.mul(C,A),A=t.add(L,F),C=t.sub(C,A),R=t.mul(k,I),A=t.mul(O,F),R=t.add(A,R),A=t.sub(L,R),R=t.add(L,R),D=t.mul(A,R),L=t.add(N,N),L=t.add(L,N),F=t.mul(k,F),I=t.mul(O,I),L=t.add(L,F),F=t.sub(N,F),F=t.mul(k,F),I=t.add(I,F),N=t.mul(L,I),D=t.add(D,N),N=t.mul(C,I),A=t.mul(Y,A),A=t.sub(A,N),N=t.mul(Y,L),R=t.mul(C,R),R=t.add(R,N),new u(A,D,R)}subtract(p){return this.add(p.negate())}is0(){return this.equals(u.ZERO)}wNAF(p){return g.wNAFCached(this,l,p,y=>{let w=t.invertBatch(y.map(b=>b.pz));return y.map((b,E)=>b.toAffine(w[E])).map(u.fromAffine)})}multiplyUnsafe(p){let y=u.ZERO;if(p===Pn)return y;if(a(p),p===vr)return this;let{endo:w}=e;if(!w)return g.unsafeLadder(this,p);let{k1neg:b,k1:E,k2neg:S,k2:_}=w.splitScalar(p),A=y,D=y,R=this;for(;E>Pn||_>Pn;)E&vr&&(A=A.add(R)),_&vr&&(D=D.add(R)),R=R.double(),E>>=vr,_>>=vr;return b&&(A=A.negate()),S&&(D=D.negate()),D=new u(t.mul(D.px,w.beta),D.py,D.pz),A.add(D)}multiply(p){a(p);let y=p,w,b,{endo:E}=e;if(E){let{k1neg:S,k1:_,k2neg:A,k2:D}=E.splitScalar(y),{p:R,f:k}=this.wNAF(_),{p:O,f:N}=this.wNAF(D);R=g.constTimeNegate(S,R),O=g.constTimeNegate(A,O),O=new u(t.mul(O.px,E.beta),O.py,O.pz),w=R.add(O),b=k.add(N)}else{let{p:S,f:_}=this.wNAF(y);w=S,b=_}return u.normalizeZ([w,b])[0]}multiplyAndAddUnsafe(p,y,w){let b=u.BASE,E=(_,A)=>A===Pn||A===vr||!_.equals(b)?_.multiplyUnsafe(A):_.multiply(A),S=E(this,y).add(E(p,w));return S.is0()?void 0:S}toAffine(p){let{px:y,py:w,pz:b}=this,E=this.is0();p==null&&(p=E?t.ONE:t.inv(b));let S=t.mul(y,p),_=t.mul(w,p),A=t.mul(b,p);if(E)return{x:t.ZERO,y:t.ZERO};if(!t.eql(A,t.ONE))throw new Error("invZ was invalid");return{x:S,y:_}}isTorsionFree(){let{h:p,isTorsionFree:y}=e;if(p===vr)return!0;if(y)return y(u,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:p,clearCofactor:y}=e;return p===vr?this:y?y(u,this):this.multiplyUnsafe(e.h)}toRawBytes(p=!0){return this.assertValidity(),n(u,this,p)}toHex(p=!0){return bn(this.toRawBytes(p))}}u.BASE=new u(e.Gx,e.Gy,t.ONE),u.ZERO=new u(t.ZERO,t.ONE,t.ZERO);let f=e.nBitLength,g=Il(u,e.endo?Math.ceil(f/2):f);return{CURVE:e,ProjectivePoint:u,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:i}}function ES(r){let e=ma(r);return br(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function J6(r){let e=ES(r),{Fp:t,n}=e,o=t.BYTES+1,s=2*t.BYTES+1;function i(I){return Pn<I&&I<t.ORDER}function a(I){return _e(I,n)}function c(I){return _l(I,n)}let{ProjectivePoint:l,normPrivateKeyToScalar:d,weierstrassEquation:u,isWithinCurveOrder:f}=wS({...e,toBytes(I,C,$){let T=C.toAffine(),v=t.toBytes(T.x),U=Rn;return $?U(Uint8Array.from([C.hasEvenY()?2:3]),v):U(Uint8Array.from([4]),v,t.toBytes(T.y))},fromBytes(I){let C=I.length,$=I[0],T=I.subarray(1);if(C===o&&($===2||$===3)){let v=xn(T);if(!i(v))throw new Error("Point is not on curve");let U=u(v),V;try{V=t.sqrt(U)}catch(ie){let de=ie instanceof Error?": "+ie.message:"";throw new Error("Point is not on curve"+de)}let H=(V&vr)===vr;return($&1)===1!==H&&(V=t.neg(V)),{x:v,y:V}}else if(C===s&&$===4){let v=t.fromBytes(T.subarray(0,t.BYTES)),U=t.fromBytes(T.subarray(t.BYTES,2*t.BYTES));return{x:v,y:U}}else throw new Error(`Point of length ${C} was invalid. Expected ${o} compressed bytes or ${s} uncompressed bytes`)}}),g=I=>bn(uo(I,e.nByteLength));function h(I){let C=n>>vr;return I>C}function p(I){return h(I)?a(-I):I}let y=(I,C,$)=>xn(I.slice(C,$));class w{constructor(C,$,T){this.r=C,this.s=$,this.recovery=T,this.assertValidity()}static fromCompact(C){let $=e.nByteLength;return C=Ue("compactSignature",C,$*2),new w(y(C,0,$),y(C,$,2*$))}static fromDER(C){let{r:$,s:T}=as.toSig(Ue("DER",C));return new w($,T)}assertValidity(){if(!f(this.r))throw new Error("r must be 0 < r < CURVE.n");if(!f(this.s))throw new Error("s must be 0 < s < CURVE.n")}addRecoveryBit(C){return new w(this.r,this.s,C)}recoverPublicKey(C){let{r:$,s:T,recovery:v}=this,U=D(Ue("msgHash",C));if(v==null||![0,1,2,3].includes(v))throw new Error("recovery id invalid");let V=v===2||v===3?$+e.n:$;if(V>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let H=v&1?"03":"02",se=l.fromHex(H+g(V)),ie=c(V),de=a(-U*ie),ae=a(T*ie),le=l.BASE.multiplyAndAddUnsafe(se,de,ae);if(!le)throw new Error("point at infinify");return le.assertValidity(),le}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new w(this.r,a(-this.s),this.recovery):this}toDERRawBytes(){return ts(this.toDERHex())}toDERHex(){return as.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return ts(this.toCompactHex())}toCompactHex(){return g(this.r)+g(this.s)}}let b={isValidPrivateKey(I){try{return d(I),!0}catch{return!1}},normPrivateKeyToScalar:d,randomPrivateKey:()=>{let I=Xh(e.n);return P8(e.randomBytes(I),e.n)},precompute(I=8,C=l.BASE){return C._setWindowSize(I),C.multiply(BigInt(3)),C}};function E(I,C=!0){return l.fromPrivateKey(I).toRawBytes(C)}function S(I){let C=lo(I),$=typeof I=="string",T=(C||$)&&I.length;return C?T===o||T===s:$?T===2*o||T===2*s:I instanceof l}function _(I,C,$=!0){if(S(I))throw new Error("first arg must be private key");if(!S(C))throw new Error("second arg must be public key");return l.fromHex(C).multiply(d(I)).toRawBytes($)}let A=e.bits2int||function(I){let C=xn(I),$=I.length*8-e.nBitLength;return $>0?C>>BigInt($):C},D=e.bits2int_modN||function(I){return a(A(I))},R=pa(e.nBitLength);function k(I){if(typeof I!="bigint")throw new Error("bigint expected");if(!(Pn<=I&&I<R))throw new Error(`bigint expected < 2^${e.nBitLength}`);return uo(I,e.nByteLength)}function O(I,C,$=N){if(["recovered","canonical"].some(ke=>ke in $))throw new Error("sign() legacy options not supported");let{hash:T,randomBytes:v}=e,{lowS:U,prehash:V,extraEntropy:H}=$;U==null&&(U=!0),I=Ue("msgHash",I),V&&(I=Ue("prehashed msgHash",T(I)));let se=D(I),ie=d(C),de=[k(ie),k(se)];if(H!=null&&H!==!1){let ke=H===!0?v(t.BYTES):H;de.push(Ue("extraEntropy",ke))}let ae=Rn(...de),le=se;function Be(ke){let mt=A(ke);if(!f(mt))return;let gt=c(mt),at=l.BASE.multiply(mt).toAffine(),Tt=a(at.x);if(Tt===Pn)return;let hn=a(gt*a(le+Tt*ie));if(hn===Pn)return;let Vo=(at.x===Tt?0:2)|Number(at.y&vr),Ji=hn;return U&&h(hn)&&(Ji=p(hn),Vo^=1),new w(Tt,Ji,Vo)}return{seed:ae,k2sig:Be}}let N={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function F(I,C,$=N){let{seed:T,k2sig:v}=O(I,C,$),U=e;return Wh(U.hash.outputLen,U.nByteLength,U.hmac)(T,v)}l.BASE._setWindowSize(8);function Y(I,C,$,T=L){let v=I;if(C=Ue("msgHash",C),$=Ue("publicKey",$),"strict"in T)throw new Error("options.strict was renamed to lowS");let{lowS:U,prehash:V}=T,H,se;try{if(typeof v=="string"||lo(v))try{H=w.fromDER(v)}catch(at){if(!(at instanceof as.Err))throw at;H=w.fromCompact(v)}else if(typeof v=="object"&&typeof v.r=="bigint"&&typeof v.s=="bigint"){let{r:at,s:Tt}=v;H=new w(at,Tt)}else throw new Error("PARSE");se=l.fromHex($)}catch(at){if(at.message==="PARSE")throw new Error("signature must be Signature instance, Uint8Array or hex string");return!1}if(U&&H.hasHighS())return!1;V&&(C=e.hash(C));let{r:ie,s:de}=H,ae=D(C),le=c(de),Be=a(ae*le),ke=a(ie*le),mt=l.BASE.multiplyAndAddUnsafe(se,Be,ke)?.toAffine();return mt?a(mt.x)===ie:!1}return{CURVE:e,getPublicKey:E,getSharedSecret:_,sign:F,verify:Y,ProjectivePoint:l,Signature:w,utils:b}}function bS(r){return{hash:r,hmac:(e,...t)=>fo(r,e,El(...t)),randomBytes:es}}function em(r,e){let t=n=>J6({...r,...bS(n)});return Object.freeze({...t(e),create:t})}var nm=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),tm=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),xS=BigInt(1),w0=BigInt(2),rm=(r,e)=>(r+e/w0)/e;function vS(r){let e=nm,t=BigInt(3),n=BigInt(6),o=BigInt(11),s=BigInt(22),i=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,d=l*l*r%e,u=Me(d,t,e)*d%e,f=Me(u,t,e)*d%e,g=Me(f,w0,e)*l%e,h=Me(g,o,e)*g%e,p=Me(h,s,e)*h%e,y=Me(p,a,e)*p%e,w=Me(y,c,e)*y%e,b=Me(w,a,e)*p%e,E=Me(b,t,e)*d%e,S=Me(E,i,e)*h%e,_=Me(S,n,e)*l%e,A=Me(_,w0,e);if(!E0.eql(E0.sqr(A),r))throw new Error("Cannot find square root");return A}var E0=Al(nm,void 0,void 0,{sqrt:vS}),Hr=em({a:BigInt(0),b:BigInt(7),Fp:E0,n:tm,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=tm,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-xS*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),s=t,i=BigInt("0x100000000000000000000000000000000"),a=rm(s*r,e),c=rm(-n*r,e),l=_e(r-a*t-c*o,e),d=_e(-a*n-c*s,e),u=l>i,f=d>i;if(u&&(l=e-l),f&&(d=e-d),l>i||d>i)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:u,k1:l,k2neg:f,k2:d}}}},bo),kV=BigInt(0);var CV=Hr.ProjectivePoint;function om(){return Hr.utils.randomPrivateKey()}function sm(r,e){let t=De.digest(e instanceof Uint8Array?e:e.subarray());if(Er(t))return t.then(({digest:n})=>Hr.sign(n,r).toDERRawBytes()).catch(n=>{throw new m(String(n),"ERR_INVALID_INPUT")});try{return Hr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new m(String(n),"ERR_INVALID_INPUT")}}function im(r,e,t){let n=De.digest(t instanceof Uint8Array?t:t.subarray());if(Er(n))return n.then(({digest:o})=>Hr.verify(e,o,r)).catch(o=>{throw new m(String(o),"ERR_INVALID_INPUT")});try{return Hr.verify(e,n.digest,r)}catch(o){throw new m(String(o),"ERR_INVALID_INPUT")}}function am(r){return Hr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function cm(r){try{Hr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}function b0(r){try{Hr.ProjectivePoint.fromHex(r)}catch(e){throw new m(String(e),"ERR_INVALID_PUBLIC_KEY")}}function lm(r){try{return Hr.getPublicKey(r,!0)}catch(e){throw new m(String(e),"ERR_INVALID_PRIVATE_KEY")}}var cs=class{_key;constructor(e){b0(e),this._key=e}verify(e,t){return im(this._key,t,e)}marshal(){return am(this._key)}get bytes(){return Fr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}async hash(){let e=De.digest(this.bytes),t;return Er(e)?{bytes:t}=await e:t=e.bytes,t}},ls=class{_key;_publicKey;constructor(e,t){this._key=e,this._publicKey=t??lm(e),cm(this._key),b0(this._publicKey)}sign(e){return sm(this._key,e)}get public(){return new cs(this._publicKey)}marshal(){return this._key}get bytes(){return Vr.encode({Type:Fe.Secp256k1,Data:this.marshal()}).subarray()}equals(e){return j(this.bytes,e.bytes)}hash(){let e=De.digest(this.bytes);return Er(e)?e.then(({bytes:t})=>t):e.bytes}async id(){let e=await this.public.hash();return P(e,"base58btc")}async export(e,t="libp2p-key"){if(t==="libp2p-key")return ti(this.bytes,e);throw new m(`export format '${t}' is not supported`,"ERR_INVALID_EXPORT_FORMAT")}};function SS(r){return new ls(r)}function _S(r){return new cs(r)}async function AS(){let r=om();return new ls(r)}var On={rsa:g0,ed25519:o0,secp256k1:x0};function v0(r){let e=Object.keys(On).join(" / ");return new m(`invalid or unsupported key type ${r}. Must be ${e}`,"ERR_UNSUPPORTED_KEY_TYPE")}function R0(r){if(r=r.toLowerCase(),r==="rsa"||r==="ed25519"||r==="secp256k1")return On[r];throw v0(r)}async function Da(r,e){return R0(r).generateKeyPair(e??2048)}async function IS(r,e,t){if(r.toLowerCase()!=="ed25519")throw new m("Seed key derivation is unimplemented for RSA or secp256k1","ERR_UNSUPPORTED_KEY_DERIVATION_TYPE");return n0(e)}function qr(r){let e=Fr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return On.rsa.unmarshalRsaPublicKey(t);case Fe.Ed25519:return On.ed25519.unmarshalEd25519PublicKey(t);case Fe.Secp256k1:return On.secp256k1.unmarshalSecp256k1PublicKey(t);default:throw v0(e.Type??"unknown")}}function S0(r,e){return e=(e??"rsa").toLowerCase(),R0(e),r.bytes}async function Rr(r){let e=Vr.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Fe.RSA:return On.rsa.unmarshalRsaPrivateKey(t);case Fe.Ed25519:return On.ed25519.unmarshalEd25519PrivateKey(t);case Fe.Secp256k1:return On.secp256k1.unmarshalSecp256k1PrivateKey(t);default:throw v0(e.Type??"RSA")}}function _0(r,e){return e=(e??"rsa").toLowerCase(),R0(e),r.bytes}async function ci(r,e){try{let t=await Z8(r,e);return await Rr(t)}catch{}if(!r.includes("BEGIN"))throw new m("Encrypted key was not a libp2p-key or a PEM file","ERR_INVALID_IMPORT_FORMAT");return h0(r,e)}var a_=Ye(Wo(),1);var Ln="/",um=new TextEncoder().encode(Ln),Ru=um[0],Oe=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=B(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]!==Ru)throw new Error("Invalid key")}toString(e="utf8"){return P(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Ln))}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=um),this._buf[0]!==Ru){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Ru,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Ru;)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 s=t[o],i=n[o];if(s<i)return!0;if(s>i)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(Ln).slice(1)}type(){return DS(this.baseNamespace())}name(){return TS(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Ln)||(e+=Ln),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Ln):new r(e.slice(0,-1).join(Ln))}child(e){return this.toString()===Ln?e:e.toString()===Ln?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(),...kS(e.map(t=>t.namespaces()))])}};function DS(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function TS(r){let e=r.split(":");return e[e.length-1]}function kS(r){return[].concat(...r)}var c_=Ye(Su(),1);var dm="ERR_IPNS_EXPIRED_RECORD",_u="ERR_UNRECOGNIZED_VALIDITY";var Bn="ERR_SIGNATURE_VERIFICATION";var I0="ERR_UNDEFINED_PARAMETER",fm="ERR_INVALID_RECORD_DATA",hm="ERR_INVALID_VALUE",pm="ERR_INVALID_EMBEDDED_KEY";var mm="ERR_RECORD_TOO_LARGE";var Wt;(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=()=>$e(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.value!=null&&(s.uint32(10),s.bytes(o.value)),o.signatureV1!=null&&(s.uint32(18),s.bytes(o.signatureV1)),o.validityType!=null&&(s.uint32(24),r.ValidityType.codec().encode(o.validityType,s)),o.validity!=null&&(s.uint32(34),s.bytes(o.validity)),o.sequence!=null&&(s.uint32(40),s.uint64(o.sequence)),o.ttl!=null&&(s.uint32(48),s.uint64(o.ttl)),o.pubKey!=null&&(s.uint32(58),s.bytes(o.pubKey)),o.signatureV2!=null&&(s.uint32(66),s.bytes(o.signatureV2)),o.data!=null&&(s.uint32(74),s.bytes(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.value=o.bytes();break;case 2:i.signatureV1=o.bytes();break;case 3:i.validityType=r.ValidityType.codec().decode(o);break;case 4:i.validity=o.bytes();break;case 5:i.sequence=o.uint64();break;case 6:i.ttl=o.uint64();break;case 7:i.pubKey=o.bytes();break;case 8:i.signatureV2=o.bytes();break;case 9:i.data=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Wt||(Wt={}));var CS=["string","number","bigint","symbol"],NS=["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 ym(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(CS.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(PS(r))return"Buffer";let t=OS(r);return t||"Object"}function PS(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function OS(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(NS.includes(e))return e}var x=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}};x.uint=new x(0,"uint",!0);x.negint=new x(1,"negint",!0);x.bytes=new x(2,"bytes",!0);x.string=new x(3,"string",!0);x.array=new x(4,"array",!1);x.map=new x(5,"map",!1);x.tag=new x(6,"tag",!1);x.float=new x(7,"float",!0);x.false=new x(7,"false",!0);x.true=new x(7,"true",!0);x.null=new x(7,"null",!0);x.undefined=new x(7,"undefined",!0);x.break=new x(7,"break",!0);var M=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 li=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",LS=new TextDecoder,BS=new TextEncoder;function Au(r){return li&&globalThis.Buffer.isBuffer(r)}function Ta(r){return r instanceof Uint8Array?Au(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var xm=li?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Em(r,e,t):(r,e,t)=>t-e>64?LS.decode(r.subarray(e,t)):Em(r,e,t),Iu=li?r=>r.length>64?globalThis.Buffer.from(r):wm(r):r=>r.length>64?BS.encode(r):wm(r),cn=r=>Uint8Array.from(r),ui=li?(r,e,t)=>Au(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),vm=li?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Ta(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},Rm=li?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Sm(r,e){if(Au(r)&&Au(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 wm(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 Em(r,e,t){let n=[];for(;e<t;){let o=r[e],s=null,i=o>239?4:o>223?3:o>191?2:1;if(e+i<=t){let a,c,l,d;switch(i){case 1:o<128&&(s=o);break;case 2:a=r[e+1],(a&192)===128&&(d=(o&31)<<6|a&63,d>127&&(s=d));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(d=(o&15)<<12|(a&63)<<6|c&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(d=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,d>65535&&d<1114112&&(s=d))}}s===null?(s=65533,i=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|s&1023),n.push(s),e+=i}return D0(n)}var bm=4096;function D0(r){let e=r.length;if(e<=bm)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=bm));return t}var US=256,ka=class{constructor(e=US){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=Rm(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=ui(n,0,this.cursor)}else t=vm(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",di="CBOR encode error:",Ca=[];Ca[23]=1;Ca[24]=2;Ca[25]=3;Ca[26]=5;Ca[27]=9;function Un(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var pt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function nr(r,e,t){Un(r,e,1);let n=r[e];if(t.strict===!0&&n<pt[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function or(r,e,t){Un(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<pt[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function sr(r,e,t){Un(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<pt[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function ir(r,e,t){Un(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],s=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&s<pt[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(s<=Number.MAX_SAFE_INTEGER)return Number(s);if(t.allowBigInt===!0)return s;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function _m(r,e,t,n){return new M(x.uint,nr(r,e+1,n),2)}function Am(r,e,t,n){return new M(x.uint,or(r,e+1,n),3)}function Im(r,e,t,n){return new M(x.uint,sr(r,e+1,n),5)}function Dm(r,e,t,n){return new M(x.uint,ir(r,e+1,n),9)}function Sr(r,e){return vt(r,0,e.value)}function vt(r,e,t){if(t<pt[0]){let n=Number(t);r.push([e|n])}else if(t<pt[1]){let n=Number(t);r.push([e|24,n])}else if(t<pt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<pt[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<pt[4]){let o=[e|27,0,0,0,0,0,0,0],s=Number(n&BigInt(4294967295)),i=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=s&255,s=s>>8,o[7]=s&255,s=s>>8,o[6]=s&255,s=s>>8,o[5]=s&255,o[4]=i&255,i=i>>8,o[3]=i&255,i=i>>8,o[2]=i&255,i=i>>8,o[1]=i&255,r.push(o)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}Sr.encodedSize=function(e){return vt.encodedSize(e.value)};vt.encodedSize=function(e){return e<pt[0]?1:e<pt[1]?2:e<pt[2]?3:e<pt[3]?5:9};Sr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Tm(r,e,t,n){return new M(x.negint,-1-nr(r,e+1,n),2)}function km(r,e,t,n){return new M(x.negint,-1-or(r,e+1,n),3)}function Cm(r,e,t,n){return new M(x.negint,-1-sr(r,e+1,n),5)}var T0=BigInt(-1),Nm=BigInt(1);function Pm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o!="bigint"){let s=-1-o;if(s>=Number.MIN_SAFE_INTEGER)return new M(x.negint,s,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new M(x.negint,T0-BigInt(o),9)}function Du(r,e){let t=e.value,n=typeof t=="bigint"?t*T0-Nm:t*-1-1;vt(r,e.type.majorEncoded,n)}Du.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*T0-Nm:t*-1-1;return n<pt[0]?1:n<pt[1]?2:n<pt[2]?3:n<pt[3]?5:9};Du.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Na(r,e,t,n){Un(r,e,t+n);let o=ui(r,e+t,e+t+n);return new M(x.bytes,o,t+n)}function Om(r,e,t,n){return Na(r,e,1,t)}function Lm(r,e,t,n){return Na(r,e,2,nr(r,e+1,n))}function Bm(r,e,t,n){return Na(r,e,3,or(r,e+1,n))}function Um(r,e,t,n){return Na(r,e,5,sr(r,e+1,n))}function Mm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Na(r,e,9,o)}function Tu(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===x.string?Iu(r.value):r.value),r.encodedBytes}function fi(r,e){let t=Tu(e);vt(r,e.type.majorEncoded,t.length),r.push(t)}fi.encodedSize=function(e){let t=Tu(e);return vt.encodedSize(t.length)+t.length};fi.compareTokens=function(e,t){return FS(Tu(e),Tu(t))};function FS(r,e){return r.length<e.length?-1:r.length>e.length?1:Sm(r,e)}function Pa(r,e,t,n,o){let s=t+n;Un(r,e,s);let i=new M(x.string,xm(r,e+t,e+s),s);return o.retainStringBytes===!0&&(i.byteValue=ui(r,e+t,e+s)),i}function Fm(r,e,t,n){return Pa(r,e,1,t,n)}function Vm(r,e,t,n){return Pa(r,e,2,nr(r,e+1,n),n)}function Km(r,e,t,n){return Pa(r,e,3,or(r,e+1,n),n)}function $m(r,e,t,n){return Pa(r,e,5,sr(r,e+1,n),n)}function Hm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Pa(r,e,9,o,n)}var qm=fi;function hi(r,e,t,n){return new M(x.array,n,t)}function Wm(r,e,t,n){return hi(r,e,1,t)}function Gm(r,e,t,n){return hi(r,e,2,nr(r,e+1,n))}function zm(r,e,t,n){return hi(r,e,3,or(r,e+1,n))}function Ym(r,e,t,n){return hi(r,e,5,sr(r,e+1,n))}function Qm(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return hi(r,e,9,o)}function Xm(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return hi(r,e,1,1/0)}function ku(r,e){vt(r,x.array.majorEncoded,e.value)}ku.compareTokens=Sr.compareTokens;ku.encodedSize=function(e){return vt.encodedSize(e.value)};function pi(r,e,t,n){return new M(x.map,n,t)}function jm(r,e,t,n){return pi(r,e,1,t)}function Zm(r,e,t,n){return pi(r,e,2,nr(r,e+1,n))}function Jm(r,e,t,n){return pi(r,e,3,or(r,e+1,n))}function e5(r,e,t,n){return pi(r,e,5,sr(r,e+1,n))}function t5(r,e,t,n){let o=ir(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return pi(r,e,9,o)}function r5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return pi(r,e,1,1/0)}function Cu(r,e){vt(r,x.map.majorEncoded,e.value)}Cu.compareTokens=Sr.compareTokens;Cu.encodedSize=function(e){return vt.encodedSize(e.value)};function n5(r,e,t,n){return new M(x.tag,t,1)}function o5(r,e,t,n){return new M(x.tag,nr(r,e+1,n),2)}function s5(r,e,t,n){return new M(x.tag,or(r,e+1,n),3)}function i5(r,e,t,n){return new M(x.tag,sr(r,e+1,n),5)}function a5(r,e,t,n){return new M(x.tag,ir(r,e+1,n),9)}function Nu(r,e){vt(r,x.tag.majorEncoded,e.value)}Nu.compareTokens=Sr.compareTokens;Nu.encodedSize=function(e){return vt.encodedSize(e.value)};var WS=20,GS=21,zS=22,YS=23;function c5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new M(x.null,null,1):new M(x.undefined,void 0,1)}function l5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new M(x.break,void 0,1)}function k0(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new M(x.float,r,e)}function u5(r,e,t,n){return k0(C0(r,e+1),3,n)}function d5(r,e,t,n){return k0(N0(r,e+1),5,n)}function f5(r,e,t,n){return k0(g5(r,e+1),9,n)}function Pu(r,e,t){let n=e.value;if(n===!1)r.push([x.float.majorEncoded|WS]);else if(n===!0)r.push([x.float.majorEncoded|GS]);else if(n===null)r.push([x.float.majorEncoded|zS]);else if(n===void 0)r.push([x.float.majorEncoded|YS]);else{let o,s=!1;(!t||t.float64!==!0)&&(p5(n),o=C0(Wr,1),n===o||Number.isNaN(n)?(Wr[0]=249,r.push(Wr.slice(0,3)),s=!0):(m5(n),o=N0(Wr,1),n===o&&(Wr[0]=250,r.push(Wr.slice(0,5)),s=!0))),s||(QS(n),o=g5(Wr,1),Wr[0]=251,r.push(Wr.slice(0,9)))}}Pu.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){p5(n);let o=C0(Wr,1);if(n===o||Number.isNaN(n))return 3;if(m5(n),o=N0(Wr,1),n===o)return 5}return 9};var h5=new ArrayBuffer(9),_r=new DataView(h5,1),Wr=new Uint8Array(h5,0);function p5(r){if(r===1/0)_r.setUint16(0,31744,!1);else if(r===-1/0)_r.setUint16(0,64512,!1);else if(Number.isNaN(r))_r.setUint16(0,32256,!1);else{_r.setFloat32(0,r);let e=_r.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)_r.setUint16(0,31744,!1);else if(t===0)_r.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?_r.setUint16(0,0):o<-14?_r.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):_r.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function C0(r,e){if(r.length-e<2)throw new Error(`${Q} 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,s;return n===0?s=o*2**-24:n!==31?s=(o+1024)*2**(n-25):s=o===0?1/0:NaN,t&32768?-s:s}function m5(r){_r.setFloat32(0,r,!1)}function N0(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function QS(r){_r.setFloat64(0,r,!1)}function g5(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Pu.compareTokens=Sr.compareTokens;function Re(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Ou(r){return()=>{throw new Error(`${Q} ${r}`)}}var K=[];for(let r=0;r<=23;r++)K[r]=Re;K[24]=_m;K[25]=Am;K[26]=Im;K[27]=Dm;K[28]=Re;K[29]=Re;K[30]=Re;K[31]=Re;for(let r=32;r<=55;r++)K[r]=Re;K[56]=Tm;K[57]=km;K[58]=Cm;K[59]=Pm;K[60]=Re;K[61]=Re;K[62]=Re;K[63]=Re;for(let r=64;r<=87;r++)K[r]=Om;K[88]=Lm;K[89]=Bm;K[90]=Um;K[91]=Mm;K[92]=Re;K[93]=Re;K[94]=Re;K[95]=Ou("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)K[r]=Fm;K[120]=Vm;K[121]=Km;K[122]=$m;K[123]=Hm;K[124]=Re;K[125]=Re;K[126]=Re;K[127]=Ou("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)K[r]=Wm;K[152]=Gm;K[153]=zm;K[154]=Ym;K[155]=Qm;K[156]=Re;K[157]=Re;K[158]=Re;K[159]=Xm;for(let r=160;r<=183;r++)K[r]=jm;K[184]=Zm;K[185]=Jm;K[186]=e5;K[187]=t5;K[188]=Re;K[189]=Re;K[190]=Re;K[191]=r5;for(let r=192;r<=215;r++)K[r]=n5;K[216]=o5;K[217]=s5;K[218]=i5;K[219]=a5;K[220]=Re;K[221]=Re;K[222]=Re;K[223]=Re;for(let r=224;r<=243;r++)K[r]=Ou("simple values are not supported");K[244]=Re;K[245]=Re;K[246]=Re;K[247]=c5;K[248]=Ou("simple values are not supported");K[249]=u5;K[250]=d5;K[251]=f5;K[252]=Re;K[253]=Re;K[254]=Re;K[255]=l5;var Gr=[];for(let r=0;r<24;r++)Gr[r]=new M(x.uint,r,1);for(let r=-1;r>=-24;r--)Gr[31-r]=new M(x.negint,r,1);Gr[64]=new M(x.bytes,new Uint8Array(0),1);Gr[96]=new M(x.string,"",1);Gr[128]=new M(x.array,0,1);Gr[160]=new M(x.map,0,1);Gr[244]=new M(x.false,!1,1);Gr[245]=new M(x.true,!0,1);Gr[246]=new M(x.null,null,1);function y5(r){switch(r.type){case x.false:return cn([244]);case x.true:return cn([245]);case x.null:return cn([246]);case x.bytes:return r.value.length?void 0:cn([64]);case x.string:return r.value===""?cn([96]):void 0;case x.array:return r.value===0?cn([128]):void 0;case x.map:return r.value===0?cn([160]):void 0;case x.uint:return r.value<24?cn([Number(r.value)]):void 0;case x.negint:if(r.value>=-24)return cn([31-Number(r.value)])}}var jS={float64:!1,mapSorter:e_,quickEncodeToken:y5};function ZS(){let r=[];return r[x.uint.major]=Sr,r[x.negint.major]=Du,r[x.bytes.major]=fi,r[x.string.major]=qm,r[x.array.major]=ku,r[x.map.major]=Cu,r[x.tag.major]=Nu,r[x.float.major]=Pu,r}var w5=ZS(),P0=new ka,Bu=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(`${di} object contains circular references`);return new r(t,e)}},xo={null:new M(x.null,null),undefined:new M(x.undefined,void 0),true:new M(x.true,!0),false:new M(x.false,!1),emptyArray:new M(x.array,0),emptyMap:new M(x.map,0)},vo={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new M(x.float,r):r>=0?new M(x.uint,r):new M(x.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new M(x.uint,r):new M(x.negint,r)},Uint8Array(r,e,t,n){return new M(x.bytes,r)},string(r,e,t,n){return new M(x.string,r)},boolean(r,e,t,n){return r?xo.true:xo.false},null(r,e,t,n){return xo.null},undefined(r,e,t,n){return xo.undefined},ArrayBuffer(r,e,t,n){return new M(x.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new M(x.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[xo.emptyArray,new M(x.break)]:xo.emptyArray;n=Bu.createCheck(n,r);let o=[],s=0;for(let i of r)o[s++]=Lu(i,t,n);return t.addBreakTokens?[new M(x.array,r.length),o,new M(x.break)]:[new M(x.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",s=o?r.keys():Object.keys(r),i=o?r.size:s.length;if(!i)return t.addBreakTokens===!0?[xo.emptyMap,new M(x.break)]:xo.emptyMap;n=Bu.createCheck(n,r);let a=[],c=0;for(let l of s)a[c++]=[Lu(l,t,n),Lu(o?r.get(l):r[l],t,n)];return JS(a,t),t.addBreakTokens?[new M(x.map,i),a,new M(x.break)]:[new M(x.map,i),a]}};vo.Map=vo.Object;vo.Buffer=vo.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))vo[`${r}Array`]=vo.DataView;function Lu(r,e={},t){let n=ym(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||vo[n];if(typeof o=="function"){let i=o(r,n,e,t);if(i!=null)return i}let s=vo[n];if(!s)throw new Error(`${di} unsupported type: ${n}`);return s(r,n,e,t)}function JS(r,e){e.mapSorter&&r.sort(e.mapSorter)}function e_(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,s=w5[o].compareTokens(t,n);return s===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),s}function E5(r,e,t,n){if(Array.isArray(e))for(let o of e)E5(r,o,t,n);else t[e.type.major](r,e,n)}function b5(r,e,t){let n=Lu(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let s=e[n.type.major];if(s.encodedSize){let i=s.encodedSize(n,t),a=new ka(i);if(s(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Ta(a.chunks[0])}}return P0.reset(),E5(P0,n,e,t),P0.toBytes(!0)}function mi(r,e){return e=Object.assign({},jS,e),b5(r,w5,e)}var t_={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Uu=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=Gr[e];if(t===void 0){let n=K[e];if(!n)throw new Error(`${Q} 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}},Oa=Symbol.for("DONE"),Mu=Symbol.for("BREAK");function r_(r,e,t){let n=[];for(let o=0;o<r.value;o++){let s=gi(e,t);if(s===Mu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(s===Oa)throw new Error(`${Q} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=s}return n}function n_(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},s=n?new Map:void 0;for(let i=0;i<r.value;i++){let a=gi(e,t);if(a===Mu){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===Oa)throw new Error(`${Q} found map but not enough entries (got ${i} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&s.has(a)||!n&&a in o))throw new Error(`${Q} found repeat map key "${a}"`);let c=gi(e,t);if(c===Oa)throw new Error(`${Q} found map but not enough entries (got ${i} [no value], expected ${r.value})`);n?s.set(a,c):o[a]=c}return n?s:o}function gi(r,e){if(r.done())return Oa;let t=r.next();if(t.type===x.break)return Mu;if(t.type.terminal)return t.value;if(t.type===x.array)return r_(t,r,e);if(t.type===x.map)return n_(t,r,e);if(t.type===x.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=gi(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function O0(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},t_,e);let t=e.tokenizer||new Uu(r,e),n=gi(t,e);if(n===Oa)throw new Error(`${Q} did not find any content to decode`);if(n===Mu)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function Ar(r,e){let[t,n]=O0(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var ar=Ye(Wo(),1);var x5=tr("ipns:utils"),v5=B("/ipns/"),o_=114,R5=async(r,e)=>{if(e==null||r==null){let n=new Error("one or more of the provided parameters are not defined");throw x5.error(n),(0,ar.default)(n,I0)}let t;if(e.pubKey!=null){try{t=qr(e.pubKey)}catch(o){throw x5.error(o),o}if(!(await ft(e.pubKey)).equals(r))throw(0,ar.default)(new Error("Embedded public key did not match PeerID"),pm)}else r.publicKey!=null&&(t=qr(r.publicKey));if(t!=null)return t;throw(0,ar.default)(new Error("no public key is available"),I0)};var S5=r=>{let e=B("ipns-signature:");return ve([e,r])},La=r=>"signatureV1"in r?Wt.encode({value:B(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:B(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):Wt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data});function ln(r){let e=Wt.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(0,ar.default)(new Error("missing data or signatureV2"),Bn);let t=A5(e.data),n=s_(t.Value),o=P(t.Validity);if(e.value!=null&&e.signatureV1!=null)return i_(e),{value:n,validityType:Wt.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:Wt.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")}var L0=r=>ve([v5,r.toBytes()]),_5=r=>Xe(r.slice(v5.length));var A5=r=>{let e=Ar(r);if(e.ValidityType===0)e.ValidityType=Wt.ValidityType.EOL;else throw(0,ar.default)(new Error("Unknown validity type"),_u);return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e},s_=r=>{if(r!=null){if(Cs(r))return`/ipns/${r.toCID().toString(Zn)}`;if(r instanceof Uint8Array){let n=P(r);n.startsWith("/")&&(r=n)}let e=r.toString().trim();if(e.startsWith("/")&&e.length>1)return e;let t=ce.asCID(r);if(t!=null)return t.code===o_?`/ipns/${t.toString(Zn)}`:`/ipfs/${t.toV1().toString()}`;try{return r instanceof Uint8Array?`/ipfs/${ce.decode(r).toV1().toString()}`:`/ipfs/${ce.parse(e).toV1().toString()}`}catch{}}throw(0,ar.default)(new Error("Value must be a valid content path starting with /"),hm)},i_=r=>{if(r.data==null)throw(0,ar.default)(new Error("Record data is missing"),fm);let e=A5(r.data);if(!j(e.Value,r.value??new Uint8Array(0)))throw(0,ar.default)(new Error('Field "value" did not match between protobuf and CBOR'),Bn);if(!j(e.Validity,r.validity??new Uint8Array(0)))throw(0,ar.default)(new Error('Field "validity" did not match between protobuf and CBOR'),Bn);if(e.ValidityType!==r.validityType)throw(0,ar.default)(new Error('Field "validityType" did not match between protobuf and CBOR'),Bn);if(e.Sequence!==r.sequence)throw(0,ar.default)(new Error('Field "sequence" did not match between protobuf and CBOR'),Bn);if(e.TTL!==r.ttl)throw(0,ar.default)(new Error('Field "ttl" did not match between protobuf and CBOR'),Bn)};var E$=tr("ipns"),b$=hr.code,x$=60*60*1e9,l_="/ipns/",v$=l_.length;var Ba=Ye(Wo(),1),I5=Ye(Su(),1);var Vu=tr("ipns:validator"),u_=1024*10,d_=async(r,e)=>{let t=ln(e),n;try{let o=S5(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Vu.error("record signature verification failed"),(0,Ba.default)(new Error("record signature verification failed"),Bn);if(t.validityType===Wt.ValidityType.EOL){if(I5.default.fromString(t.validity).toDate().getTime()<Date.now())throw Vu.error("record has expired"),(0,Ba.default)(new Error("record has expired"),dm)}else if(t.validityType!=null)throw Vu.error("unrecognized validity type"),(0,Ba.default)(new Error("unrecognized validity type"),_u);Vu("ipns record for %s is valid",t.value)};async function Ku(r,e){if(e.byteLength>u_)throw(0,Ba.default)(new Error("record too large"),mm);let t=_5(r),n=ln(e),o=await R5(t,n);await d_(o,e)}async function*Ua(r){let e=/\r?\n/,t=new TextDecoder("utf8"),n="";for await(let o of r){typeof o=="string"&&(o=new TextEncoder().encode(o)),n+=t.decode(o,{stream:!0});let s=n.split(e);n=s.pop()??"";for(let i=0;i<s.length;i++)yield JSON.parse(s[i])}n+=t.decode(),n!==""&&(yield JSON.parse(n))}var U0=Ye(T5(),1);var Ro=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},M0=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},k5=r=>globalThis.DOMException===void 0?new M0(r):new DOMException(r),C5=r=>{let e=r.reason===void 0?k5("This operation was aborted."):r.reason;return e instanceof Error?e:k5(e)};function zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:s={setTimeout,clearTimeout}}=e,i,c=new Promise((l,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(C5(f)),f.addEventListener("abort",()=>{d(C5(f))})}if(t===Number.POSITIVE_INFINITY){r.then(l,d);return}let u=new Ro;i=s.setTimeout.call(void 0,()=>{if(n){try{l(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?l():o instanceof Error?d(o):(u.message=o??`Promise timed out after ${t} milliseconds`,d(u))},t),(async()=>{try{l(await r)}catch(f){d(f)}})()}).finally(()=>{c.clear()});return c.clear=()=>{s.clearTimeout.call(void 0,i),i=void 0},c}function F0(r,e,t){let n=0,o=r.length;for(;o>0;){let s=Math.trunc(o/2),i=n+s;t(r[i],e)<=0?(n=++i,o-=s+1):o=s}return n}var Fa=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,run:e};if(this.size&&this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=F0(this.#e,n,(s,i)=>i.priority-s.priority);this.#e.splice(o,0,n)}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Gt=class extends U0.default{#e;#t;#r=0;#i;#c;#p=0;#o;#l;#n;#m;#s=0;#u;#a;#g;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Fa,...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.#i=e.intervalCap,this.#c=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.#a=e.autoStart===!1}get#E(){return this.#t||this.#r<this.#i}get#b(){return this.#s<this.#u}#x(){this.#s--,this.#d(),this.emit("next")}#v(){this.#w(),this.#y(),this.#l=void 0}get#R(){let e=Date.now();if(this.#o===void 0){let t=this.#p-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#l===void 0&&(this.#l=setTimeout(()=>{this.#v()},t)),!0}return!1}#d(){if(this.#n.size===0)return this.#o&&clearInterval(this.#o),this.#o=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#a){let e=!this.#R;if(this.#E&&this.#b){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#o!==void 0||(this.#o=setInterval(()=>{this.#w()},this.#c),this.#p=Date.now()+this.#c)}#w(){this.#r===0&&this.#s===0&&this.#o&&(clearInterval(this.#o),this.#o=void 0),this.#r=this.#e?this.#s:0,this.#f()}#f(){for(;this.#d(););}get concurrency(){return this.#u}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.#u=e,this.#f()}async#S(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}async add(e,t={}){return t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let s=e({signal:t.signal});t.timeout&&(s=zr(Promise.resolve(s),{milliseconds:t.timeout})),t.signal&&(s=Promise.race([s,this.#S(t.signal)]));let i=await s;n(i),this.emit("completed",i)}catch(s){if(s instanceof Ro&&!t.throwOnTimeout){n();return}o(s),this.emit("error",s)}finally{this.#x()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#a?(this.#a=!1,this.#f(),this):this}pause(){this.#a=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#h("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#h("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#h("idle")}async#h(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.#a}};function p_(r){return r[Symbol.asyncIterator]!=null}function m_(r){if(p_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var ds=m_;var V0=B("/ipns/");function N5(r){return j(r.subarray(0,V0.byteLength),V0)}var P5=r=>Xe(r.slice(V0.length)),Hu=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Et(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async put(e,t,n){if(!N5(e))return;let o=P5(e),s=ln(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!N5(e))throw new m("Not found","ERR_NOT_FOUND");let n=P5(e);try{let o=await this.client.getIPNS(n,t);return La(o)}catch(o){throw o.code==="ERR_BAD_RESPONSE"?new m("Not found","ERR_NOT_FOUND"):o}}},qu=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await ds(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){}};var zt=tr("delegated-routing-v1-http-api-client"),O5={concurrentRequests:4,timeout:3e4},Wu=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal),this.httpQueue=new Gt({concurrency:t.concurrentRequests??O5.concurrentRequests}),this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??O5.timeout,this.contentRouting=new Hu(this),this.peerRouting=new qu(this)}get[Jr](){return this.contentRouting}get[en](){return this.peerRouting}isStarted(){return this.started}start(){this.started=!0}stop(){this.httpQueue.clear(),this.shutDownController.abort(),this.started=!1}async*getProviders(e,t={}){zt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ot([this.shutDownController.signal,n,t.signal]);ee(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/providers/${e.toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Providers){let g=this.#e(f);g!=null&&(yield g)}}else for await(let u of Ua(gl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){zt.error("getProviders errored:",a)}finally{o.clear(),i.resolve(),zt("getProviders finished: %c",e)}}async*getPeers(e,t={}){zt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ot([this.shutDownController.signal,n,t.signal]);ee(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));try{await s.promise;let a=`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`,l=await fetch(a,{headers:{Accept:"application/x-ndjson"},signal:o});if(l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("Routing response had no body","ERR_BAD_RESPONSE");if(l.headers.get("Content-Type")==="application/json"){let u=await l.json();for(let f of u.Peers){let g=this.#e(f);g!=null&&(yield g)}}else for await(let u of Ua(gl(l.body))){let f=this.#e(u);f!=null&&(yield f)}}catch(a){zt.error("getPeers errored:",a)}finally{o.clear(),i.resolve(),zt("getPeers finished: %c",e)}}async getIPNS(e,t={}){zt("getIPNS starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ot([this.shutDownController.signal,n,t.signal]);ee(1/0,n,o);let s=Z(),i=Z();this.httpQueue.add(async()=>(s.resolve(),i.promise));let a=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await s.promise;let l=await fetch(a,{headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o});if(zt("getIPNS GET %s %d",a,l.status),l.status===404)throw new m("No matching records found.","ERR_NOT_FOUND");if(l.status===422)throw new m("Request does not conform to schema or semantic constraints.","ERR_INVALID_REQUEST");if(l.body==null)throw new m("GET ipns response had no body","ERR_BAD_RESPONSE");let d=await l.arrayBuffer(),u=new Uint8Array(d,0,d.byteLength);return t.validate!==!1&&await Ku(L0(e),u),ln(u)}catch(c){throw zt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),i.resolve(),zt("getIPNS finished: %c",e)}}async putIPNS(e,t,n={}){zt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),s=ot([this.shutDownController.signal,o,n.signal]);ee(1/0,o,s);let i=Z(),a=Z();this.httpQueue.add(async()=>(i.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e.toCID().toString()}`;try{await i.promise;let l=La(t),u=await fetch(c,{method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:s});if(zt("putIPNS PUT %s %d",c,u.status),u.status!==200)throw new m("PUT ipns response had status other than 200","ERR_BAD_RESPONSE")}catch(l){throw zt.error("putIPNS PUT %s error:",c,l.stack),l}finally{s.clear(),a.resolve(),zt("putIPNS finished: %c",e)}}#e(e){let t=[],n=e.Addrs?.map(X)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:ge(e.ID),Addrs:n,Protocols:t}}};function L5(r,e={}){return new Wu(new URL(r),e)}var K0=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function $0(r){return new K0(r)}var yi={};pe(yi,{abortedError:()=>b_,closeFailedError:()=>y_,deleteFailedError:()=>U5,getFailedError:()=>w_,hasFailedError:()=>E_,notFoundError:()=>Va,openFailedError:()=>g_,putFailedError:()=>B5});var Mn=Ye(Wo(),1);function g_(r){return r=r??new Error("Open failed"),(0,Mn.default)(r,"ERR_OPEN_FAILED")}function y_(r){return r=r??new Error("Close failed"),(0,Mn.default)(r,"ERR_CLOSE_FAILED")}function B5(r){return r=r??new Error("Put failed"),(0,Mn.default)(r,"ERR_PUT_FAILED")}function w_(r){return r=r??new Error("Get failed"),(0,Mn.default)(r,"ERR_GET_FAILED")}function U5(r){return r=r??new Error("Delete failed"),(0,Mn.default)(r,"ERR_DELETE_FAILED")}function E_(r){return r=r??new Error("Has failed"),(0,Mn.default)(r,"ERR_HAS_FAILED")}function Va(r){return r=r??new Error("Not Found"),(0,Mn.default)(r,"ERR_NOT_FOUND")}function b_(r){return r=r??new Error("Aborted"),(0,Mn.default)(r,"ERR_ABORTED")}var Fn=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 Ka=class extends Fn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(ct.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(ct.encode(e.multihash.bytes));if(t==null)throw Va();return t}has(e){return this.data.has(ct.encode(e.multihash.bytes))}async delete(e){this.data.delete(ct.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:ce.createV1(Oc,Pr(ct.decode(e))),block:t}}};var PH=tr("blockstore:core:tiered");var M5={...yi};var F5=Ye(Wo(),1);function Gu(r){return r=r??new Error("Not Found"),(0,F5.default)(r,"ERR_NOT_FOUND")}var V5="SHARDING";function v_(r){return r[Symbol.asyncIterator]!=null}function R_(r,e){return v_(r)?async function*(){yield*(await ro(r)).sort(e)}():function*(){yield*ro(r).sort(e)}()}var zu=R_;var Vn=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 mr(this.putMany(e,n)),e=[],await mr(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=Ut(n,s=>s.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Ut(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>zu(o,s),n)),e.offset!=null){let o=0,s=e.offset;n=Ut(n,()=>o++>=s)}return e.limit!=null&&(n=eo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Ut(n,s=>s.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,s)=>Ut(o,s),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,s)=>zu(o,s),n)),e.offset!=null){let o=e.offset,s=0;n=Ut(n,()=>s++>=o)}return e.limit!=null&&(n=eo(n,e.limit)),n}};var fs=class extends Vn{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 Gu();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 Oe(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Oe(e)}};var dq=new Oe(V5);var Rq=tr("datastore:core:tiered");function Yu(r){let e=[cr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var H0=60;function Qu(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:cr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:cr[e.type],TTL:e.TTL??e.ttl??H0,data:e.data instanceof Uint8Array?P(e.data):e.data}))}}var A_=4;function q0(r,e={}){let t=new Gt({concurrency:e.queryConcurrency??A_});return async(n,o={})=>{let s=new URLSearchParams;s.set("name",n),Yu(o.types).forEach(a=>{s.append("type",cr[a])}),o.onProgress?.(new me("dns:query",{detail:n}));let i=await t.add(async()=>{let a=await fetch(`${r}?${s}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Qu(await a.json());return o.onProgress?.(new me("dns:response",{detail:c})),c},{signal:o.signal});if(i==null)throw new Error("No DNS response received");return i}}function $5(){return[q0("https://cloudflare-dns.com/dns-query"),q0("https://dns.google/resolve")]}var q5=Ye(W0(),1);var G0=class{lru;constructor(e){this.lru=(0,q5.default)(e)}get(e,t){let n=!0,o=[];for(let s of t){let i=this.getAnswers(e,s);if(i.length===0){n=!1;break}o.push(...i)}if(n)return Qu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let s=o.filter(i=>i.expires>Date.now()).map(({expires:i,value:a})=>({...a,TTL:Math.round((i-Date.now())/1e3),type:cr[a.type]}));return s.length===0&&this.lru.remove(n),s}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??H0)*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 W5(r){return new G0(r)}var I_=1e3,Xu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=W5(e.cacheSize??I_),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["."]=$5())}async query(e,t={}){let n=Yu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new me("dns:cache",{detail:o})),o;let s=`${e.split(".").pop()}.`,i=(this.resolvers[s]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of i){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let d of l.Answer)this.cache.add(e,d);return l}catch(l){a.push(l),t.onProgress?.(new me("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var cr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(cr||(cr={}));function ju(r={}){return new Xu(r)}var Q5="/pin/",G5="/pinned-block/",z0=Zn,z5=1;function Y5(r){return r.version===0&&(r=r.toV1()),new Oe(`${Q5}${r.toString(z0)}`)}var Zu=class{datastore;blockstore;dagWalkers;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.dagWalkers=n}async*add(e,t={}){let n=Y5(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 s=new mn({concurrency:z5});for await(let a of this.#e(e,s,{...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 i={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,mi(i),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=this.dagWalkers[e.code];if(o==null)throw new Error(`No dag walker found for cid codec ${e.code}`);let s=await this.blockstore.get(e,n);yield e;for await(let i of o.walk(s))yield*await t.add(async()=>this.#e(i,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Oe(`${G5}${z0.encode(e.multihash.bytes)}`),s={pinCount:0,pinnedBy:[]};try{s=Ar(await this.datastore.get(o,n))}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}if(t(s)){if(s.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,mi(s),n),n.onProgress?.(new me("helia:pin:add",e))}}async*rm(e,t={}){let n=Y5(e),o=await this.datastore.get(n,t),s=Ar(o);await this.datastore.delete(n,t);let i=new mn({concurrency:z5});for await(let a of this.#e(e,i,{...t,depth:s.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>j(l,e.bytes)),!0),{...t,depth:s.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Q5+(e.cid!=null?`${e.cid.toString(Zn)}`:"")},e)){let o=ce.parse(t.toString().substring(5),Zn),s=Ar(n);yield{cid:o,...s}}}async isPinned(e,t={}){let n=new Oe(`${G5}${z0.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}};var Ju=class{log;routers;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[]}async start(){await Qn(...this.routers)}async stop(){await Xn(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of bt(...wi(this.routers,"findProviders").map(o=>o.findProviders(e,t))))n!=null&&(yield n)}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available","ERR_NO_ROUTERS_AVAILABLE");await Promise.all(wi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async put(e,t,n){await Promise.all(wi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(wi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");let n=this,o=bt(...wi(this.routers,"findPeer").map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s;throw new m("Could not find peer in routing","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available","ERR_NO_ROUTERS_AVAILABLE");for await(let n of bt(...wi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function wi(r,e){return r.filter(t=>t[e]!=null)}var So={},Ei=r=>{r.addEventListener("message",e=>{Ei.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Ei.dispatchEvent("message",r,e)})};Ei.addEventListener=(r,e)=>{So[r]==null&&(So[r]=[]),So[r].push(e)};Ei.removeEventListener=(r,e)=>{So[r]!=null&&(So[r]=So[r].filter(t=>t===e))};Ei.dispatchEvent=function(r,e,t){So[r]!=null&&So[r].forEach(n=>n(e,t))};var Y0=Ei;var Q0="lock:worker:request-read",X0="lock:worker:release-read",j0="lock:master:grant-read",Z0="lock:worker:request-write",J0="lock:worker:release-write",e2="lock:master:grant-write";var X5=(r=21)=>Math.random().toString().substring(2);var j5=(r,e,t,n,o)=>(s,i)=>{if(i.data.type!==t)return;let a={type:i.data.type,name:i.data.name,identifier:i.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{s.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=d=>{if(d==null||d.data==null)return;let u={type:d.data.type,name:d.data.name,identifier:d.data.identifier};u.type===n&&u.identifier===a.identifier&&(s.removeEventListener("message",l),c())};s.addEventListener("message",l)})}}}))},Z5=(r,e,t,n)=>async()=>{let o=X5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(s=>{let i=a=>{if(a==null||a.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",i),s(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",i)})},D_={singleProcess:!1},J5=r=>{if(r=Object.assign({},D_,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return Y0.addEventListener("message",j5(t,"requestReadLock",Q0,X0,j0)),Y0.addEventListener("message",j5(t,"requestWriteLock",Z0,J0,e2)),t}return{isWorker:!0,readLock:t=>Z5(t,Q0,j0,X0),writeLock:t=>Z5(t,Z0,e2,J0)}};var hs={},_o;async function t2(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var T_=(r,e)=>{if(_o.isWorker===!0)return{readLock:_o.readLock(r,e),writeLock:_o.writeLock(r,e)};let t=new Gt({concurrency:1}),n;return{async readLock(){if(n!=null)return t2(n,e);n=new Gt({concurrency:e.concurrency,autoStart:!1});let o=n,s=t2(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),s},async writeLock(){return n=null,t2(t,e)}}},k_={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ha(r){let e=Object.assign({},k_,r);return _o==null&&(_o=J5(e),_o.isWorker!==!0&&(_o.addEventListener("requestReadLock",t=>{hs[t.data.name]!=null&&hs[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),_o.addEventListener("requestWriteLock",async t=>{hs[t.data.name]!=null&&hs[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),hs[e.name]==null&&(hs[e.name]=T_(e.name,e)),hs[e.name]}var e1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ha({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await Qn(this.child),this.started=!0}async stop(){await Xn(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){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={}){let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let s of e){if(await o.pins.isPinned(s))throw new Error("CID was pinned");yield s}}(),t)}finally{n()}}async has(e,t={}){let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}async createSession(e,t){let n=await this.lock.readLock();try{let o=await this.child.createSession(e,t);if(o==null)throw new m("Sessions not supported","ERR_UNSUPPORTED");return o}finally{n()}}};var t7=42;function C_(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=ce.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new M(x.tag,t7),new M(x.bytes,t)]}function N_(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function P_(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 e7={float64:!0,typeEncoders:{Object:C_,undefined:N_,number:P_}},BW={...e7,typeEncoders:{...e7.typeEncoders}};function O_(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return ce.decode(r.subarray(1))}var r2={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};r2.tags[t7]=O_;var UW={...r2,tags:r2.tags.slice()};var r7=113;var n7=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===x.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===x.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[x.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);e.push(o)}[x.negint.major](e,t){this[x.uint.major](e,t)}[x.bytes.major](e,t){throw new Error(`${di} unsupported type: Uint8Array`)}[x.string.major](e,t){this.prefix(e);let n=Iu(JSON.stringify(t.value));e.push(n.length>32?Ta(n):n)}[x.array.major](e,t){this.prefix(e),this.inRecursive.push({type:x.array,elements:0}),e.push([91])}[x.map.major](e,t){this.prefix(e),this.inRecursive.push({type:x.map,elements:0}),e.push([123])}[x.tag.major](e,t){}[x.float.major](e,t){if(t.type.name==="break"){let i=this.inRecursive.pop();if(i){if(i.type===x.array)e.push([93]);else if(i.type===x.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(`${di} 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=[],s=!1;for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i),!s&&(o[i]===46||o[i]===101||o[i]===69)&&(s=!0);s||(o.push(46),o.push(48)),e.push(o)}};var ps=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(`${Q} 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(`${Q} 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 M(x.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(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} 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 s=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),i=parseFloat(s);return n?new M(x.float,i,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(i)?new M(i>=0?x.uint:x.negint,i,this._pos-e):new M(i>=0?x.uint:x.negint,BigInt(s),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let s=this._pos,i=0;s<this.data.length&&i<65536;s++,i++){let a=this.data[s];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,s));return this._pos=s+1,new M(x.string,c,i)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let s=0;for(let i=0;i<4;i++){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(`${Q} unexpected unicode escape character at position ${this._pos}`);s=s*16+a,this._pos++}return s},o=()=>{let s=this.ch(),i=null,a=s>239?4:s>223?3:s>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,d,u;switch(a){case 1:s<128&&(i=s);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(u=(s&31)<<6|c&63,u>127&&(i=u));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(u=(s&15)<<12|(c&63)<<6|l&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],d=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(d&192)===128&&(u=(s&15)<<18|(c&63)<<12|(l&63)<<6|d&63,u>65535&&u<1114112&&(i=u))}i===null?(i=65533,a=1):i>65535&&(i-=65536,t.push(i>>>10&1023|55296),i=56320|i&1023),t.push(i),this._pos+=a};for(;!this.done();){let s=this.ch(),i;switch(s){case 92:if(this._pos++,this.done())throw new Error(`${Q} unexpected string termination at position ${this._pos}`);switch(i=this.ch(),this._pos++,i){case 34:case 39:case 92:case 47:t.push(i);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(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new M(x.string,D0(t),this._pos-e);default:if(s<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);s<128?(t.push(s),this._pos++):o()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new M(x.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new M(x.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new M(x.null,null,4);case 102:return this.expect([102,97,108,115,101]),new M(x.false,!1,5);case 116:return this.expect([116,114,117,101]),new M(x.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(`${Q} 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 M(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} 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 M(x.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 M(x.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} 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 M(x.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} 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(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function t1(r,e){return e=Object.assign({tokenizer:new ps(r,e)},e),Ar(r,e)}var U_={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};U_.tags[42]=ce.parse;var s7=297;var eG=new TextDecoder;var tG=new TextEncoder;var F_=new TextDecoder;function n2(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 r1(r,e){let t;[t,e]=n2(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 i7(r,e){let t;return[t,e]=n2(r,e),[t&7,t>>3,e]}function V_(r){let e={},t=r.length,n=0;for(;n<t;){let o,s;if([o,s,n]=i7(r,n),s===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]=r1(r,n)}else if(s===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 i;[i,n]=r1(r,n),e.Name=F_.decode(i)}else if(s===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]=n2(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${s}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function a7(r){let e=r.length,t=0,n,o=!1,s;for(;t<e;){let a,c;if([a,c,t]=i7(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(s)throw new Error("protobuf: (PBNode) duplicate Data section");[s,t]=r1(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]=r1(r,t),n.push(V_(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 i={};return s&&(i.Data=s),i.Links=n||[],i}var nG=new TextEncoder,oG=2**32,sG=2**31;var cG=new TextEncoder;function c7(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var l7=112;function u7(r){let e=c7(r),t=a7(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let s={};try{s.Hash=ce.decode(o.Hash)}catch{}if(!s.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(s.Name=o.Name),o.Tsize!==void 0&&(s.Tsize=o.Tsize),s})),n}var $_={codec:l7,*walk(r){yield*u7(r).Links.map(t=>t.Hash)}},H_={codec:Oc,*walk(){}},d7=42,q_={codec:r7,*walk(r){let e=[],t=[];t[d7]=n=>{if(n[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");let o=ce.decode(n.subarray(1));return e.push(o),o},Ar(r,{tags:t}),yield*e}},o2=class extends ps{tokenBuffer;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===x.map){let t=this._next();if(t.type===x.string&&t.value==="/"){let n=this._next();if(n.type===x.string){if(this._next().type!==x.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new M(x.tag,42,0)}if(n.type===x.map){let o=this._next();if(o.type===x.string&&o.value==="bytes"){let s=this._next();if(s.type===x.string){for(let a=0;a<2;a++)if(this._next().type!==x.break)throw new Error("Invalid encoded Bytes form");let i=lt.decode(`m${s.value}`);return new M(x.bytes,i,s.value.length)}this.tokenBuffer.push(s)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},W_={codec:s7,*walk(r){let e=[],t=[];t[d7]=n=>{let o=ce.parse(n);return e.push(o),o},t1(r,{tags:t,tokenizer:new o2(r,{tags:t,allowIndefinite:!0,allowUndefined:!0,allowNaN:!0,allowInfinity:!0,allowBigInt:!0,strict:!1,rejectDuplicateMapKeys:!1})}),yield*e}},G_={codec:i4,*walk(){}};function f7(r=[]){let e={};return[$_,H_,q_,W_,G_,...r].forEach(t=>{e[t.codec]=t}),e}var s2=new Oe("/version"),h7=1;async function p7(r){if(!await r.has(s2)){await r.put(s2,B(`${h7}`));return}let e=await r.get(s2),t=P(e);if(parseInt(t,10)!==h7)throw new Error("Unknown datastore version, a datastore migration may be required")}function m7(r=[]){let e={};return[De,Hf,hr,...r].forEach(t=>{e[t.code]=t}),e}var n1=0,o1=class extends Fn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===n1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===n1)return e.multihash.digest;if(this.child==null)throw M5.notFoundError();return this.child.get(e)}has(e){return e.multihash.code===n1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==n1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function z_(r){return r[Symbol.asyncIterator]!=null}function g7(r){return r?.then!=null}function Y_(r,e){if(z_(r))return async function*(){for await(let a of r){let c=e(a);g7(c)&&await c,yield a}}();let t=Ws(r),{value:n,done:o}=t.next();if(o===!0)return function*(){}();if(typeof e(n)?.then=="function")return async function*(){yield n;for await(let a of t){let c=e(a);g7(c)&&await c,yield a}}();let i=e;return function*(){yield n;for(let a of t)i(a),yield a}()}var qa=Y_;var s1=class r{child;hashers;started;log;logger;components;constructor(e,t={}){this.log=e.logger.forComponent(`helia:networked-storage${t.root==null?"":`:${t.root}`}`),this.logger=e.logger,this.components=e,this.child=new o1(e.blockstore),this.hashers=e.hashers??{},this.started=!1}isStarted(){return this.started}async start(){await Qn(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Xn(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){return await this.child.has(e)?(n.onProgress?.(new me("blocks:put:duplicate",e)),e):(n.onProgress?.(new me("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new me("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Ut(e,async({cid:s})=>{let i=await this.child.has(s);return i&&t.onProgress?.(new me("blocks:put-many:duplicate",s)),!i}),o=qa(n,async({cid:s,block:i})=>{t.onProgress?.(new me("blocks:put-many:providers:notify",s)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(s,i,t)))});t.onProgress?.(new me("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.onProgress?.(new me("blocks:get:providers:get",e));let n=await y7(e,this.components.blockBrokers,this.hashers[e.multihash.code],{...t,log:this.log});return t.onProgress?.(new me("blocks:get:blockstore:put",e)),await this.child.put(e,n,t),t.onProgress?.(new me("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,n,t))),n}return t.onProgress?.(new me("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new me("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(qa(e,async n=>{if(t.offline!==!0&&!await this.child.has(n)){t.onProgress?.(new me("blocks:get-many:providers:get",n));let o=await y7(n,this.components.blockBrokers,this.hashers[n.multihash.code],{...t,log:this.log});t.onProgress?.(new me("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new me("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new me("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new me("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 me("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}async createSession(e,t){let n=await Promise.all(this.components.blockBrokers.map(async o=>o.createSession==null?o:o.createSession(e,t)));return new r({blockstore:this.child,blockBrokers:n,hashers:this.hashers,logger:this.logger},{root:e})}};function Q_(r){return typeof r.retrieve=="function"}var X_=(r,e)=>{if(e==null)throw new m(`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`,"ERR_UNKNOWN_HASH_ALG");return async t=>{let n=await e.digest(t);if(!j(n.digest,r.multihash.digest))throw new m("Hash of downloaded block did not match multihash from passed CID","ERR_HASH_MISMATCH")}};async function y7(r,e,t,n){let o=X_(r,t),s=new AbortController,i=ot([s.signal,n.signal]);ee(1/0,s.signal,i);let a=[];for(let c of e)Q_(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,d=await c.retrieve(r,{...n,signal:i,validateFn:async u=>{await o(u),l=!0}});return l||await o(d),d}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{s.abort(),i.clear()}}var i1=class{blockstore;datastore;pins;logger;routing;dagWalkers;hashers;dns;log;constructor(e){this.logger=e.logger??no(),this.log=this.logger.forComponent("helia"),this.hashers=m7(e.hashers),this.dagWalkers=f7(e.dagWalkers),this.dns=e.dns??ju();let t={blockstore:e.blockstore,datastore:e.datastore,hashers:this.hashers,dagWalkers:this.dagWalkers,logger:this.logger,blockBrokers:[],dns:this.dns,...e.components??{}};this.routing=t.routing=new Ju(t,{routers:(e.routers??[]).flatMap(o=>{let s=[o];return o[Jr]!=null&&s.push(o[Jr]),o[en]!=null&&s.push(o[en]),s})});let n=new s1(t);this.pins=new Zu(e.datastore,n,this.dagWalkers),this.blockstore=new e1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await p7(this.datastore),await Qn(this.blockstore,this.datastore,this.routing)}async stop(){await Xn(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 mr(o.deleteMany(async function*(){for await(let{cid:s}of o.getAll())try{if(await n.pins.isPinned(s,e))continue;yield s,e.onProgress?.(new me("helia:gc:deleted",s))}catch(i){n.log.error("Error during gc",i),e.onProgress?.(new me("helia:gc:error",i))}}()))}finally{t()}this.log("gc finished")}};var a1=class extends i1{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 i2(){let r=Z(),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 w7(){let r=i2(),e=i2();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var bi=!!globalThis.process?.env?.DUMP_SESSION_KEYS;var Kn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4));function E7(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}var b7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),j_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!j_)throw new Error("Non little-endian hardware is not supported");function c1(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function l1(r){if(typeof r=="string")r=c1(r);else if(E7(r))r=r.slice();else throw new Error(`expected Uint8Array, got ${typeof r}`);return r}var Z_=r=>Object.prototype.toString.call(r)==="[object Object]"&&r.constructor===Object;function x7(r,e){if(e!==void 0&&(typeof e!="object"||!Z_(e)))throw new Error("options must be object or undefined");return Object.assign(r,e)}function ms(r,e){if(!E7(r))throw new Error("Uint8Array expected");if(typeof e=="number"&&r.length!==e)throw new Error(`Uint8Array length ${e} expected`)}function v7(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 a2=(r,e)=>(Object.assign(e,r),e);function c2(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),s=BigInt(4294967295),i=Number(t>>o&s),a=Number(t&s),c=n?4:0,l=n?0:4;r.setUint32(e+c,i,n),r.setUint32(e+l,a,n)}function u1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`wrong positive integer: ${r}`)}function l2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function J_(r){return r!=null&&typeof r=="object"&&(r instanceof Uint8Array||r.constructor.name==="Uint8Array")}function xi(r,...e){if(!J_(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function u2(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 R7(r,e){xi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Rt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,d2=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=l1(e),ms(e,32);let t=Rt(e,0),n=Rt(e,2),o=Rt(e,4),s=Rt(e,6),i=Rt(e,8),a=Rt(e,10),c=Rt(e,12),l=Rt(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|s<<9)&8191,this.r[4]=(s>>>4|i<<12)&255,this.r[5]=i>>>1&8190,this.r[6]=(i>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let d=0;d<8;d++)this.pad[d]=Rt(e,16+2*d)}process(e,t,n=!1){let o=n?0:2048,{h:s,r:i}=this,a=i[0],c=i[1],l=i[2],d=i[3],u=i[4],f=i[5],g=i[6],h=i[7],p=i[8],y=i[9],w=Rt(e,t+0),b=Rt(e,t+2),E=Rt(e,t+4),S=Rt(e,t+6),_=Rt(e,t+8),A=Rt(e,t+10),D=Rt(e,t+12),R=Rt(e,t+14),k=s[0]+(w&8191),O=s[1]+((w>>>13|b<<3)&8191),N=s[2]+((b>>>10|E<<6)&8191),L=s[3]+((E>>>7|S<<9)&8191),F=s[4]+((S>>>4|_<<12)&8191),Y=s[5]+(_>>>1&8191),I=s[6]+((_>>>14|A<<2)&8191),C=s[7]+((A>>>11|D<<5)&8191),$=s[8]+((D>>>8|R<<8)&8191),T=s[9]+(R>>>5|o),v=0,U=v+k*a+O*(5*y)+N*(5*p)+L*(5*h)+F*(5*g);v=U>>>13,U&=8191,U+=Y*(5*f)+I*(5*u)+C*(5*d)+$*(5*l)+T*(5*c),v+=U>>>13,U&=8191;let V=v+k*c+O*a+N*(5*y)+L*(5*p)+F*(5*h);v=V>>>13,V&=8191,V+=Y*(5*g)+I*(5*f)+C*(5*u)+$*(5*d)+T*(5*l),v+=V>>>13,V&=8191;let H=v+k*l+O*c+N*a+L*(5*y)+F*(5*p);v=H>>>13,H&=8191,H+=Y*(5*h)+I*(5*g)+C*(5*f)+$*(5*u)+T*(5*d),v+=H>>>13,H&=8191;let se=v+k*d+O*l+N*c+L*a+F*(5*y);v=se>>>13,se&=8191,se+=Y*(5*p)+I*(5*h)+C*(5*g)+$*(5*f)+T*(5*u),v+=se>>>13,se&=8191;let ie=v+k*u+O*d+N*l+L*c+F*a;v=ie>>>13,ie&=8191,ie+=Y*(5*y)+I*(5*p)+C*(5*h)+$*(5*g)+T*(5*f),v+=ie>>>13,ie&=8191;let de=v+k*f+O*u+N*d+L*l+F*c;v=de>>>13,de&=8191,de+=Y*a+I*(5*y)+C*(5*p)+$*(5*h)+T*(5*g),v+=de>>>13,de&=8191;let ae=v+k*g+O*f+N*u+L*d+F*l;v=ae>>>13,ae&=8191,ae+=Y*c+I*a+C*(5*y)+$*(5*p)+T*(5*h),v+=ae>>>13,ae&=8191;let le=v+k*h+O*g+N*f+L*u+F*d;v=le>>>13,le&=8191,le+=Y*l+I*c+C*a+$*(5*y)+T*(5*p),v+=le>>>13,le&=8191;let Be=v+k*p+O*h+N*g+L*f+F*u;v=Be>>>13,Be&=8191,Be+=Y*d+I*l+C*c+$*a+T*(5*y),v+=Be>>>13,Be&=8191;let ke=v+k*y+O*p+N*h+L*g+F*f;v=ke>>>13,ke&=8191,ke+=Y*u+I*d+C*l+$*c+T*a,v+=ke>>>13,ke&=8191,v=(v<<2)+v|0,v=v+U|0,U=v&8191,v=v>>>13,V+=v,s[0]=U,s[1]=V,s[2]=H,s[3]=se,s[4]=ie,s[5]=de,s[6]=ae,s[7]=le,s[8]=Be,s[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 s=(o^1)-1;for(let a=0;a<10;a++)n[a]&=s;s=~s;for(let a=0;a<10;a++)e[a]=e[a]&s|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 i=e[0]+t[0];e[0]=i&65535;for(let a=1;a<8;a++)i=(e[a]+t[a]|0)+(i>>>16)|0,e[a]=i&65535}update(e){u2(this);let{buffer:t,blockLen:n}=this;e=l1(e);let o=e.length;for(let s=0;s<o;){let i=Math.min(n-this.pos,o-s);if(i===n){for(;n<=o-s;s+=n)this.process(e,s);continue}t.set(e.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){this.h.fill(0),this.r.fill(0),this.buffer.fill(0),this.pad.fill(0)}digestInto(e){u2(this),R7(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 s=0;for(let i=0;i<8;i++)e[s++]=n[i]>>>0,e[s++]=n[i]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function eA(r){let e=(n,o)=>r(o).update(l1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var S7=eA(r=>new d2(r));var tA=c1("expand 16-byte k"),rA=c1("expand 32-byte k"),nA=Kn(tA),oA=Kn(rA);function z(r,e){return r<<e|r>>>32-e}function f2(r){return r.byteOffset%4===0}var d1=64,sA=16,A7=2**32-1,_7=new Uint32Array;function iA(r,e,t,n,o,s,i,a){let c=o.length,l=new Uint8Array(d1),d=Kn(l),u=f2(o)&&f2(s),f=u?Kn(o):_7,g=u?Kn(s):_7;for(let h=0;h<c;i++){if(r(e,t,n,d,i,a),i>=A7)throw new Error("arx: counter overflow");let p=Math.min(d1,c-h);if(u&&p===d1){let y=h/4;if(h%4!==0)throw new Error("arx: invalid block position");for(let w=0,b;w<sA;w++)b=y+w,g[b]=f[b]^d[w];h+=d1;continue}for(let y=0,w;y<p;y++)w=h+y,s[w]=o[w]^l[y];h+=p}}function h2(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:s,rounds:i}=x7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return u1(o),u1(i),l2(s),l2(t),(a,c,l,d,u=0)=>{xi(a),xi(c),xi(l);let f=l.length;if(d||(d=new Uint8Array(f)),xi(d),u1(u),u<0||u>=A7)throw new Error("arx: counter overflow");if(d.length<f)throw new Error(`arx: output (${d.length}) is shorter than data (${f})`);let g=[],h=a.length,p,y;if(h===32)p=a.slice(),g.push(p),y=oA;else if(h===16&&t)p=new Uint8Array(32),p.set(a),p.set(a,16),y=nA,g.push(p);else throw new Error(`arx: invalid 32-byte key, got length=${h}`);f2(c)||(c=c.slice(),g.push(c));let w=Kn(p);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,w,Kn(c.subarray(0,16)),w),c=c.subarray(16)}let b=16-o;if(b!==c.length)throw new Error(`arx: nonce must be ${b} or 16 bytes`);if(b!==12){let S=new Uint8Array(12);S.set(c,s?0:12-c.length),c=S,g.push(c)}let E=Kn(c);for(iA(r,y,w,E,l,d,u,i);g.length>0;)g.pop().fill(0);return d}}function T7(r,e,t,n,o,s=20){let i=r[0],a=r[1],c=r[2],l=r[3],d=e[0],u=e[1],f=e[2],g=e[3],h=e[4],p=e[5],y=e[6],w=e[7],b=o,E=t[0],S=t[1],_=t[2],A=i,D=a,R=c,k=l,O=d,N=u,L=f,F=g,Y=h,I=p,C=y,$=w,T=b,v=E,U=S,V=_;for(let se=0;se<s;se+=2)A=A+O|0,T=z(T^A,16),Y=Y+T|0,O=z(O^Y,12),A=A+O|0,T=z(T^A,8),Y=Y+T|0,O=z(O^Y,7),D=D+N|0,v=z(v^D,16),I=I+v|0,N=z(N^I,12),D=D+N|0,v=z(v^D,8),I=I+v|0,N=z(N^I,7),R=R+L|0,U=z(U^R,16),C=C+U|0,L=z(L^C,12),R=R+L|0,U=z(U^R,8),C=C+U|0,L=z(L^C,7),k=k+F|0,V=z(V^k,16),$=$+V|0,F=z(F^$,12),k=k+F|0,V=z(V^k,8),$=$+V|0,F=z(F^$,7),A=A+N|0,V=z(V^A,16),C=C+V|0,N=z(N^C,12),A=A+N|0,V=z(V^A,8),C=C+V|0,N=z(N^C,7),D=D+L|0,T=z(T^D,16),$=$+T|0,L=z(L^$,12),D=D+L|0,T=z(T^D,8),$=$+T|0,L=z(L^$,7),R=R+F|0,v=z(v^R,16),Y=Y+v|0,F=z(F^Y,12),R=R+F|0,v=z(v^R,8),Y=Y+v|0,F=z(F^Y,7),k=k+O|0,U=z(U^k,16),I=I+U|0,O=z(O^I,12),k=k+O|0,U=z(U^k,8),I=I+U|0,O=z(O^I,7);let H=0;n[H++]=i+A|0,n[H++]=a+D|0,n[H++]=c+R|0,n[H++]=l+k|0,n[H++]=d+O|0,n[H++]=u+N|0,n[H++]=f+L|0,n[H++]=g+F|0,n[H++]=h+Y|0,n[H++]=p+I|0,n[H++]=y+C|0,n[H++]=w+$|0,n[H++]=b+T|0,n[H++]=E+v|0,n[H++]=S+U|0,n[H++]=_+V|0}function aA(r,e,t,n){let o=r[0],s=r[1],i=r[2],a=r[3],c=e[0],l=e[1],d=e[2],u=e[3],f=e[4],g=e[5],h=e[6],p=e[7],y=t[0],w=t[1],b=t[2],E=t[3];for(let _=0;_<20;_+=2)o=o+c|0,y=z(y^o,16),f=f+y|0,c=z(c^f,12),o=o+c|0,y=z(y^o,8),f=f+y|0,c=z(c^f,7),s=s+l|0,w=z(w^s,16),g=g+w|0,l=z(l^g,12),s=s+l|0,w=z(w^s,8),g=g+w|0,l=z(l^g,7),i=i+d|0,b=z(b^i,16),h=h+b|0,d=z(d^h,12),i=i+d|0,b=z(b^i,8),h=h+b|0,d=z(d^h,7),a=a+u|0,E=z(E^a,16),p=p+E|0,u=z(u^p,12),a=a+u|0,E=z(E^a,8),p=p+E|0,u=z(u^p,7),o=o+l|0,E=z(E^o,16),h=h+E|0,l=z(l^h,12),o=o+l|0,E=z(E^o,8),h=h+E|0,l=z(l^h,7),s=s+d|0,y=z(y^s,16),p=p+y|0,d=z(d^p,12),s=s+d|0,y=z(y^s,8),p=p+y|0,d=z(d^p,7),i=i+u|0,w=z(w^i,16),f=f+w|0,u=z(u^f,12),i=i+u|0,w=z(w^i,8),f=f+w|0,u=z(u^f,7),a=a+c|0,b=z(b^a,16),g=g+b|0,c=z(c^g,12),a=a+c|0,b=z(b^a,8),g=g+b|0,c=z(c^g,7);let S=0;n[S++]=o,n[S++]=s,n[S++]=i,n[S++]=a,n[S++]=y,n[S++]=w,n[S++]=b,n[S++]=E}var cA=h2(T7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),lA=h2(T7,{counterRight:!1,counterLength:8,extendNonceFn:aA,allowShortKeys:!1});var uA=new Uint8Array(16),I7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(uA.subarray(t))},dA=new Uint8Array(32);function D7(r,e,t,n,o){let s=r(e,t,dA),i=S7.create(s);o&&I7(i,o),I7(i,n);let a=new Uint8Array(16),c=b7(a);c2(c,0,BigInt(o?o.length:0),!0),c2(c,8,BigInt(n.length),!0),i.update(a);let l=i.digest();return s.fill(0),l}var k7=r=>(e,t,n)=>(ms(e,32),ms(t),{encrypt:(s,i)=>{let a=s.length,c=a+16;i?ms(i,c):i=new Uint8Array(c),r(e,t,s,i,1);let l=D7(r,e,t,i.subarray(0,-16),n);return i.set(l,a),i},decrypt:(s,i)=>{let a=s.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");i?ms(i,c):i=new Uint8Array(c);let l=s.subarray(0,-16),d=s.subarray(-16),u=D7(r,e,t,l,n);if(!v7(d,u))throw new Error("invalid tag");return r(e,t,l,i,1),i}}),p2=a2({blockSize:64,nonceLength:12,tagLength:16},k7(cA)),bz=a2({blockSize:64,nonceLength:24,tagLength:16},k7(lA));function N7(r,e,t){return Zo(r),t===void 0&&(t=new Uint8Array(r.outputLen)),fo(r,Br(t),Br(e))}var m2=new Uint8Array([0]),C7=new Uint8Array;function P7(r,e,t,n=32){if(Zo(r),oo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=C7);let s=new Uint8Array(o*r.outputLen),i=fo.create(r,e),a=i._cloneInto(),c=new Uint8Array(i.outputLen);for(let l=0;l<o;l++)m2[0]=l+1,a.update(l===0?C7:c).update(t).update(m2).digestInto(c),s.set(c,r.outputLen*l),i._cloneInto(a);return i.destroy(),a.destroy(),c.fill(0),m2.fill(0),s.slice(0,n)}var g2={hashSHA256(r){return bo(r.subarray())},getHKDF(r,e){let t=N7(bo,e,r),o=P7(bo,t,void 0,96),s=o.subarray(0,32),i=o.subarray(32,64),a=o.subarray(64,96);return[s,i,a]},generateX25519KeyPair(){let r=wa.utils.randomPrivateKey();return{publicKey:wa.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:wa.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return wa.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return p2(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return p2(n,e,t).decrypt(r.subarray(),o)}};var O7=g2;function L7(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 vi=r=>{let e=ze(2);return e[0]=r>>8,e[1]=r,e};vi.bytes=2;var Wa=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)};Wa.bytes=2;function B7(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 y2(r,e){!e.enabled||!bi||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${P(r.privateKey,"hex")}`)):e("Missing local static keys."))}function w2(r,e){!e.enabled||!bi||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${P(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${P(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function U7(r,e){!e.enabled||!bi||e(r?`REMOTE_STATIC_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote static public key.")}function E2(r,e){!e.enabled||!bi||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${P(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function b2(r,e,t){!t.enabled||!bi||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&P(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&P(e.k,"hex")}`))}function $n(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=ze(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function f1(r,e){for(let t=0;t<r.byteLength;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return r.byteLength>e.byteLength?1:r.byteLength<e.byteLength?-1:0}var h1=class r extends Error{code;constructor(e="Unexpected Peer"){super(e),this.code=r.code}static code="ERR_UNEXPECTED_PEER"},Ri=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var fA=0,hA=4294967295,pA="Cipherstate has reached maximum n, a new handshake must be performed",p1=class{n;bytes;view;constructor(e=fA){this.n=e,this.bytes=Ce(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>hA)throw new Error(pA)}};var gs=Ce(0),Si=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new p1(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}},x2=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=B(t,"utf-8");this.h=mA(e,n),this.ck=this.h,this.cs=new Si(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Si(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ue(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,gs);return[new Si(this.crypto,e),new Si(this.crypto,t)]}},v2=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:s,s:i,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new x2(t,n),this.ss.mixHash(o),this.initiator=s,this.s=i,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()}},Ga=class extends v2{writeMessageA(e){return new ue(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ue(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ue(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Ri(`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 Ri(`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 Ri(`handshake stage 2 validation fail: ${t.message}`)}}};function mA(r,e){if(e.length<=32){let t=Ce(32);return t.set(e),t}else return r.hash(e)}var m1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let s of t.webtransportCerthashes)n.uint32(10),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(m1||(m1={}));var za;(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),m1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:Ce(0),identitySig:Ce(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=m1.codec().decode(t,t.uint32());break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(za||(za={}));async function R2(r,e,t){let n=await r.sign(M7(e));return za.encode({identityKey:r.public.bytes,identitySig:n,extensions:t})}async function S2(r,e,t){try{let n=za.decode(r);if(t){let i=t.subarray();if(!j(i,n.identityKey))throw new Error(`Payload identity key ${P(n.identityKey,"hex")} does not match expected remote identity key ${P(i,"hex")}`)}if(!e)throw new Error("Remote static does not exist");let o=M7(e);if(!await qr(n.identityKey).verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new h1(n.message)}}function M7(r){let e=B("noise-libp2p-static-key:");return r instanceof Uint8Array?ve([e,r],e.length+r.length):(r.prepend(e),r)}async function F7(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await R2(o,i.publicKey,c),d=new Ga({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:i});y2(d.s,e),e.trace("Stage 0 - Initiator starting to send first message."),await t.write(d.writeMessageA(gs)),e.trace("Stage 0 - Initiator finished sending first message."),w2(d.e,e),e.trace("Stage 1 - Initiator waiting to receive first message from responder...");let u=d.readMessageB(await t.read());e.trace("Stage 1 - Initiator received the message."),E2(d.re,e),U7(d.rs,e),e.trace("Initiator going to check remote's signature...");let f=await S2(u,d.rs,a);e.trace("All good with the signature!"),e.trace("Stage 2 - Initiator sending third handshake message."),await t.write(d.writeMessageC(l)),e.trace("Stage 2 - Initiator sent message with signed payload.");let[g,h]=d.ss.split();return b2(g,h,e),{payload:f,encrypt:p=>g.encryptWithAd(gs,p),decrypt:(p,y)=>h.decryptWithAd(gs,p,y)}}async function V7(r){let{log:e,connection:t,crypto:n,privateKey:o,prologue:s,s:i,remoteIdentityKey:a,extensions:c}=r,l=await R2(o,i.publicKey,c),d=new Ga({crypto:n,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:i});y2(d.s,e),e.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await t.read()),e.trace("Stage 0 - Responder received first message."),E2(d.re,e),e.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await t.write(d.writeMessageB(l)),e.trace("Stage 1 - Responder sent the second handshake message with signed payload."),w2(d.e,e),e.trace("Stage 2 - Responder waiting for third handshake message...");let u=d.readMessageC(await t.read());e.trace("Stage 2 - Responder received the message, finished handshake.");let f=await S2(u,d.rs,a),[g,h]=d.ss.split();return b2(g,h,e),{payload:f,encrypt:p=>h.encryptWithAd(gs,p),decrypt:(p,y)=>g.decryptWithAd(gs,p,y)}}var $7=16;function H7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let s=o+65519;s>n.length&&(s=n.length);let i;n instanceof Uint8Array?i=r.encrypt(n.subarray(o,s)):i=r.encrypt(n.sublist(o,s)),e?.encryptedPackets.increment(),yield new ue(vi(i.byteLength),i)}}}function q7(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let s=o+65535;if(s>n.length&&(s=n.length),s-$7<o)throw new Error("Invalid chunk");let i=n.sublist(o,s),a=n.subarray(o,s-$7);try{let c=r.decrypt(i,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var g1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:s,prologueBytes:i}=t,{metrics:a}=e;this.components=e;let c=s??O7;this.crypto=L7(c),this.extensions=o,this.metrics=a?B7(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=i??Ce(0)}async secureOutbound(e,t,n){let o=yr(t,{lengthEncoder:vi,lengthDecoder:Wa,maxDataLength:65535});if(!e.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Rr(e.privateKey),i=n?.publicKey,a=await this.performHandshakeInitiator(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ft(a.payload.identityKey)}}async secureInbound(e,t,n){let o=yr(t,{lengthEncoder:vi,lengthDecoder:Wa,maxDataLength:65535});if(!e.privateKey)throw new m("local peerId does not contain private key","ERR_NO_PRIVATE_KEY");let s=await Rr(e.privateKey),i=n?.publicKey,a=await this.performHandshakeResponder(o,s,i),c=await this.createSecureConnection(o,a);return t.source=c.source,t.sink=c.sink,{conn:t,remoteExtensions:a.payload.extensions,remotePeer:await ft(a.payload.identityKey)}}async performHandshakeInitiator(e,t,n){let o;try{o=await F7({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}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n){let o;try{o=await V7({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}),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,o]=w7(),s=e.unwrap();return await Ke(n,H7(t,this.metrics),s,i=>Kt(i,{lengthDecoder:Wa}),q7(t,this.metrics),n),o}};function _i(r={}){return e=>new g1(e,r)}function y1(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 Ai="ERR_INVALID_FRAME",_2="ERR_UNREQUESTED_PING",A2="ERR_NOT_MATCHING_PING",I2="ERR_STREAM_ALREADY_EXISTS",D2="ERR_DECODE_INVALID_VERSION",T2="ERR_BOTH_CLIENTS",k2="ERR_RECV_WINDOW_EXCEEDED",W7=new Set([Ai,_2,A2,I2,D2,T2,k2]),Ao="ERR_INVALID_CONFIG",w1="ERR_MUXER_LOCAL_CLOSED",C2="ERR_MUXER_REMOTE_CLOSED";var G7="ERR_STREAM_ABORT",z7="ERROR_MAX_OUTBOUND_STREAMS_EXCEEDED",Y7="ERR_DECODE_IN_PROGRESS",Qa=256*1024,Q7=16*1024*1024;var X7={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Qa,maxStreamWindowSize:Q7,maxMessageSize:64*1024};function j7(r){if(r.keepAliveInterval<=0)throw new m("keep-alive interval must be positive",Ao);if(r.maxInboundStreams<0)throw new m("max inbound streams must be larger or equal 0",Ao);if(r.maxOutboundStreams<0)throw new m("max outbound streams must be larger or equal 0",Ao);if(r.initialStreamWindowSize<Qa)throw new m("InitialStreamWindowSize must be larger or equal 256 kB",Ao);if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new m("MaxStreamWindowSize must be larger than the InitialStreamWindowSize",Ao);if(r.maxStreamWindowSize>2**32-1)throw new m("MaxStreamWindowSize must be less than equal MAX_UINT32",Ao);if(r.maxMessageSize<1024)throw new m("MaxMessageSize must be greater than a kilobyte",Ao)}var Ze;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ze||(Ze={}));var 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 XY=Object.values(We).filter(r=>typeof r!="string"),Z7=0,Ir;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Ir||(Ir={}));var Io=12;var J7=2**24;function gA(r){if(r[0]!==Z7)throw new m("Invalid frame version",D2);return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*J7+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*J7+(r[9]<<16)+(r[10]<<8)+r[11]}}var E1=class{source;buffer;frameInProgress;constructor(e){this.source=yA(e),this.buffer=new ue,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Ze.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new m("decoding frame already in progress",Y7);if(this.buffer.length<Io)return;let e=gA(this.buffer.subarray(0,Io));return this.buffer.consume(Io),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 yA(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 N2(r){let e=new Uint8Array(Io);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 eg(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function b1(r,e){let t=y1(r).return?.();eg(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var wA="ERR_STREAM_RESET",EA="ERR_SINK_INVALID_STATE",bA=5e3;function P2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Do=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=Z(),this.closed=Z(),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??bA,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=dt({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 m(`writable end state is "${this.writeStatus}" not "ready"`,EA);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);P2(o)&&await o}let n=()=>{b1(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 ue(o):o;let s=this.sendData(o,t);P2(s)&&(this.sendingData=Z(),await s,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.log.trace("closing gracefully"),this.status="closing",await Ot(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 Ot(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await Ot(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await Ot(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();P2(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 m("stream reset",wA);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 x1=class extends Do{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=Qa,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=qa(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-Io,e.length),o=this.getSendFlags();this.sendFrame({type:Ze.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Ze.WindowUpdate,flag:We.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|We.FIN;this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new m("stream aborted",G7)):t()};e.signal?.addEventListener("abort",o);try{await new Promise((s,i)=>{this.sendWindowCapacityUpdate=()=>{s()},n=i,t=s})}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 m("receive window exceeded",k2,{available:this.recvWindowCapacity,recv:e.length});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:Ze.WindowUpdate,flag:e,streamID:this._id,length:o})}};var tg="/yamux/1.0.0",xA=500,v1=class{protocol=tg;_components;_init;constructor(e,t={}){this._components=e,this._init=t}createStreamMuxer(e){return new O2(this._components,{...this._init,...e})}},O2=class{protocol=tg;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={...X7,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),j7(this.config),this.closeController=new AbortController,ee(1/0,this.closeController.signal),this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=dt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=y1(n);if(a.return!=null){let c=a.return();vA(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},s,i;try{let a=new E1(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)}s=Ir.NormalTermination}catch(a){let c=a.code;W7.has(c)?(this.log?.error("protocol error in sink",a),s=Ir.ProtocolError):(this.log?.error("internal error in sink",a),s=Ir.InternalError),i=a}this.log?.trace("muxer sink ended"),i!=null?this.abort(i,s):await this.close({reason:s})},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 m("muxer closed remotely",C2);if(this.localGoAway!==void 0)throw new m("muxer closed locally",w1);let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new m("max outbound streams exceeded",z7);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 m("muxer closed remotely",C2);if(this.localGoAway!==void 0)throw new m("muxer closed locally",w1);if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,s)=>{let i=()=>{s(new m("muxer closed locally",w1))};this.closeController.signal.addEventListener("abort",i,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",i),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??Ir.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(xA);ee(1/0,n),e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Ir.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 m("Stream already exists",I2,{id:e});let s=new x1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(s)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return s}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:s}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Ze.Ping:{this.handlePing(e);return}case Ze.GoAway:{this.handleGoAway(s);return}default:throw new m("Invalid frame type",Ai,{header:e})}else switch(e.type){case Ze.Data:case Ze.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new m("Invalid frame type",Ai,{header:e})}}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 m("Invalid frame flag",Ai,{header:e})}handlePingResponse(e){if(this.activePing===void 0)throw new m("ping not requested",_2);if(this.activePing.id!==e)throw new m("ping doesn't match our id",A2);this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Ir[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:s}=e;(o&We.SYN)===We.SYN&&this.incomingStream(n);let i=this._streams.get(n);if(i===void 0){if(s===Ze.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.("frame for missing stream id=%s",n);return}switch(s){case Ze.WindowUpdate:{i.handleWindowUpdate(e);return}case Ze.Data:{if(t===void 0)throw new Error("unreachable");await i.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new m("both endpoints are clients",T2);if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ze.WindowUpdate,flag:We.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ze.WindowUpdate,flag: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===Ze.Data){if(t===void 0)throw new m("invalid frame",Ai);this.source.push(new ue(N2(e),t))}else this.source.push(N2(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:Ze.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Ir.NormalTermination){this.log?.("sending GoAway reason=%s",Ir[e]),this.localGoAway=e,this.sendFrame({type:Ze.GoAway,flag:0,streamID:0,length:e})}};function vA(r){return r!=null&&typeof r.then=="function"}function rg(r={}){return e=>new v1(e,r)}var R1=async()=>{let r=await Da("Ed25519"),e=await RA(r);if(e.type==="Ed25519")return e;throw new Error(`Generated unexpected PeerId type "${e.type}"`)};async function RA(r){return ft(S0(r.public),_0(r))}var S1=globalThis.CustomEvent??Event;async function*Hn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,s=[],i=Z(),a=Z(),c=!1,l,d=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let h of r){if(s.length===t&&(i=Z(),await i.promise),d)break;let p={done:!1};s.push(p),h().then(y=>{p.done=!0,p.ok=!0,p.value=y,o.dispatchEvent(new S1("task-complete"))},y=>{p.done=!0,p.err=y,o.dispatchEvent(new S1("task-complete"))})}c=!0,o.dispatchEvent(new S1("task-complete"))}catch(h){l=h,o.dispatchEvent(new S1("task-complete"))}});function u(){return n?s[0]?.done:!!s.find(h=>h.done)}function*f(){for(;s.length>0&&s[0].done;){let h=s[0];if(s.shift(),h.ok)yield h.value;else throw d=!0,i.resolve(),h.err;i.resolve()}}function*g(){for(;u();)for(let h=0;h<s.length;h++)if(s[h].done){let p=s[h];if(s.splice(h,1),h--,p.ok)yield p.value;else throw d=!0,i.resolve(),p.err;i.resolve()}}for(;;){if(u()||(a=Z(),await a.promise),l!=null)throw l;if(n?yield*f():yield*g(),c&&s.length===0)break}}var ng="libp2p",og="autonat",sg="1.0.0";var he;(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=()=>$e(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=()=>$e(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let s;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,g={})=>{if(g.lengthDelimited!==!1&&f.fork(),u.id!=null&&(f.uint32(10),f.bytes(u.id)),u.addrs!=null)for(let h of u.addrs)f.uint32(18),f.bytes(h);g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={addrs:[]},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.id=u.bytes();break;case 2:g.addrs.push(u.bytes());break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>re(u,l.codec()),l.decode=u=>te(u,l.codec())})(s=r.PeerInfo||(r.PeerInfo={}));let i;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,g={})=>{g.lengthDelimited!==!1&&f.fork(),u.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(u.peer,f)),g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.peer=r.PeerInfo.codec().decode(u,u.uint32());break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>re(u,l.codec()),l.decode=u=>te(u,l.codec())})(i=r.Dial||(r.Dial={}));let a;(function(l){let d;l.codec=()=>(d==null&&(d=ne((u,f,g={})=>{g.lengthDelimited!==!1&&f.fork(),u.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(u.status,f)),u.statusText!=null&&(f.uint32(18),f.string(u.statusText)),u.addr!=null&&(f.uint32(26),f.bytes(u.addr)),g.lengthDelimited!==!1&&f.ldelim()},(u,f)=>{let g={},h=f==null?u.len:u.pos+f;for(;u.pos<h;){let p=u.uint32();switch(p>>>3){case 1:g.status=r.ResponseStatus.codec().decode(u);break;case 2:g.statusText=u.string();break;case 3:g.addr=u.bytes();break;default:u.skipType(p&7);break}}return g})),d),l.encode=u=>re(u,l.codec()),l.decode=u=>te(u,l.codec())})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,d,u={})=>{u.lengthDelimited!==!1&&d.fork(),l.type!=null&&(d.uint32(8),r.MessageType.codec().encode(l.type,d)),l.dial!=null&&(d.uint32(18),r.Dial.codec().encode(l.dial,d)),l.dialResponse!=null&&(d.uint32(26),r.DialResponse.codec().encode(l.dialResponse,d)),u.lengthDelimited!==!1&&d.ldelim()},(l,d)=>{let u={},f=d==null?l.len:l.pos+d;for(;l.pos<f;){let g=l.uint32();switch(g>>>3){case 1:u.type=r.MessageType.codec().decode(l);break;case 2:u.dial=r.Dial.codec().decode(l,l.uint32());break;case 3:u.dialResponse=r.DialResponse.codec().decode(l,l.uint32());break;default:l.skipType(g&7);break}}return u})),c),r.encode=l=>re(l,r.codec()),r.decode=l=>te(l,r.codec())})(he||(he={}));var L2=4,_1=class{components;startupDelay;refreshInterval;protocol;timeout;maxInboundStreams;maxOutboundStreams;verifyAddressTimeout;started;log;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:autonat"),this.started=!1,this.protocol=`/${t.protocolPrefix??ng}/${og}/${sg}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??1,this.maxOutboundStreams=t.maxOutboundStreams??1,this.startupDelay=t.startupDelay??5e3,this.refreshInterval=t.refreshInterval??6e4,this._verifyExternalAddresses=this._verifyExternalAddresses.bind(this)}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.startupDelay),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),clearTimeout(this.verifyAddressTimeout),this.started=!1}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout),n=()=>{e.stream.abort(new m("handleIncomingAutonatStream timeout",pn))};t.addEventListener("abort",n,{once:!0}),ee(1/0,t);let o=this.components.addressManager.getAddresses().map(s=>s.toOptions().host);try{let s=this;await Ke(e.stream,i=>Kt(i),async function*(i){let a=await ds(i);if(a==null){s.log("no message received"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"No message was sent"}});return}let c;try{c=he.decode(a)}catch(p){s.log.error("could not decode message",p),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"Could not decode message"}});return}let l=c.dial;if(l==null){s.log.error("dial was missing from message"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}});return}let d,u=l.peer;if(u==null||u.id==null){s.log.error("PeerId missing from message"),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}});return}try{d=Xe(u.id)}catch(p){s.log.error("invalid PeerId",p),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}});return}if(s.log("incoming request from %p",d),!e.connection.remotePeer.equals(d)){s.log("target peer %p did not equal sending peer %p",d,e.connection.remotePeer),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}});return}let f=u.addrs.map(p=>X(p)).filter(p=>{let y=p.toOptions().host===e.connection.remoteAddr.toOptions().host;return s.log.trace("request to dial %a was sent from %a is same host %s",p,e.connection.remoteAddr,y),y}).filter(p=>{let y=p.toOptions().host,w=!($t(y)??!1);return s.log.trace("host %s was public %s",y,w),w}).filter(p=>{let y=p.toOptions().host,w=!o.includes(y);return s.log.trace("host %s was not our host %s",y,w),w}).filter(p=>{let y=!!s.components.transportManager.transportForMultiaddr(p);return s.log.trace("transport for %a is supported %s",p,y),y}).map(p=>(p.getPeerId()==null&&(p=p.encapsulate(`/p2p/${d.toString()}`)),p));if(f.length===0){s.log("no valid multiaddrs for %p in message",d),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}});return}s.log("dial multiaddrs %s for peer %p",f.map(p=>p.toString()).join(", "),d);let g="",h=f[0];for await(let p of f){let y;h=p;try{if(y=await s.components.connectionManager.openConnection(p,{signal:t}),!y.remoteAddr.equals(p))throw s.log.error("tried to dial %a but dialed %a",p,y.remoteAddr),new Error("Unexpected remote address");s.log("Success %p",d),yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.OK,addr:y.remoteAddr.decapsulateCode(J("p2p").code).bytes}});return}catch(w){s.log("could not dial %p",d,w),g=w.message}finally{y!=null&&await y.close()}}yield he.encode({type:he.MessageType.DIAL_RESPONSE,dialResponse:{status:he.ResponseStatus.E_DIAL_ERROR,statusText:g,addr:h.bytes}})},i=>gr(i),e.stream)}catch(s){this.log.error("error handling incoming autonat stream",s)}finally{t.removeEventListener("abort",n)}}_verifyExternalAddresses(){this.verifyExternalAddresses().catch(e=>{this.log.error("error verifying external address",e)})}async verifyExternalAddresses(){if(clearTimeout(this.verifyAddressTimeout),!this.isStarted())return;let e=this.components.addressManager,t=e.getObservedAddrs().filter(s=>{let i=s.toOptions();return!($t(i.host)??!1)});if(t.length===0){this.log("no public addresses found, not requesting verification"),this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval);return}let n=AbortSignal.timeout(this.timeout);ee(1/0,n);let o=this;try{this.log("verify multiaddrs %s",t.map(u=>u.toString()).join(", "));let s=he.encode({type:he.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toBytes(),addrs:t.map(u=>u.bytes)}}}),a=(await R1()).toBytes(),c={},l=[],d=async u=>{let f=()=>{};try{this.log("asking %p to verify multiaddr",u.id);let g=await o.components.connectionManager.openConnection(u.id,{signal:n}),h=await g.newStream(this.protocol,{signal:n});f=()=>{h.abort(new m("verifyAddress timeout",pn))},n.addEventListener("abort",f,{once:!0});let p=await Ke([s],w=>gr(w),h,w=>Kt(w),async w=>ds(w));if(p==null){this.log("no response received from %p",g.remotePeer);return}let y=he.decode(p);if(y.type!==he.MessageType.DIAL_RESPONSE||y.dialResponse==null){this.log("invalid autonat response from %p",g.remotePeer);return}if(y.dialResponse.status===he.ResponseStatus.OK){let w=g.remoteAddr.toOptions(),b;if(w.family===4)b=w.host.split(".")[0];else if(w.family===6)b=w.host.split(":")[0];else{this.log('remote address "%s" was not IP4 or IP6?',w.host);return}if(l.includes(b)){this.log("already have response from network segment %d - %s",b,w.host);return}l.push(b)}return y.dialResponse}catch(g){this.log.error("error asking remote to verify multiaddr",g)}finally{n.removeEventListener("abort",f)}};for await(let u of Hn(Et(this.components.peerRouting.getClosestPeers(a,{signal:n}),f=>async()=>d(f)),{concurrency:L2}))try{if(u==null)continue;let f=u.addr==null?t[0]:X(u.addr);if(this.log("autonat response for %a is %s",f,u.status),u.status===he.ResponseStatus.E_BAD_REQUEST||u.status===he.ResponseStatus.E_DIAL_REFUSED||u.addr==null&&t.length>1)continue;if(!t.some(h=>h.equals(f))){this.log("peer reported %a as %s but it was not in our observed address list",f,u.status);continue}let g=f.toString();if(c[g]==null&&(c[g]={success:0,failure:0}),u.status===he.ResponseStatus.OK?c[g].success++:u.status===he.ResponseStatus.E_DIAL_ERROR&&c[g].failure++,c[g].success===L2){this.log("%a is externally dialable",f),e.confirmObservedAddr(f);return}if(c[g].failure===L2){this.log("%a is not externally dialable",f),e.removeObservedAddr(f);return}}catch(f){this.log.error("could not verify external address",f)}}finally{this.verifyAddressTimeout=setTimeout(this._verifyExternalAddresses,this.refreshInterval)}}};function ig(r={}){return e=>new _1(e,r)}var TA=q("dns4"),kA=q("dns6"),CA=q("dnsaddr"),ko=nt(q("dns"),CA,TA,kA),A1=nt(q("ip4"),q("ip6")),Ii=nt(oe(A1,q("tcp")),oe(ko,q("tcp"))),I1=oe(A1,q("udp")),NA=oe(I1,q("utp")),PA=oe(I1,q("quic")),OA=oe(I1,q("quic-v1")),B2=nt(oe(Ii,q("ws")),oe(ko,q("ws"))),Di=nt(oe(B2,q("p2p")),B2),U2=nt(oe(Ii,q("wss")),oe(ko,q("wss")),oe(Ii,q("tls"),q("ws")),oe(ko,q("tls"),q("ws"))),ys=nt(oe(U2,q("p2p")),U2),M2=nt(oe(Ii,q("http")),oe(A1,q("http")),oe(ko,q("http"))),F2=nt(oe(Ii,q("https")),oe(A1,q("https")),oe(ko,q("https"))),ag=oe(I1,q("webrtc-direct"),q("certhash")),ug=nt(oe(ag,q("p2p")),ag),cg=oe(OA,q("webtransport"),q("certhash"),q("certhash")),dg=nt(oe(cg,q("p2p")),cg),fg=nt(oe(Di,q("p2p-webrtc-star"),q("p2p")),oe(ys,q("p2p-webrtc-star"),q("p2p")),oe(Di,q("p2p-webrtc-star")),oe(ys,q("p2p-webrtc-star"))),aX=nt(oe(Di,q("p2p-websocket-star"),q("p2p")),oe(ys,q("p2p-websocket-star"),q("p2p")),oe(Di,q("p2p-websocket-star")),oe(ys,q("p2p-websocket-star"))),hg=nt(oe(M2,q("p2p-webrtc-direct"),q("p2p")),oe(F2,q("p2p-webrtc-direct"),q("p2p")),oe(M2,q("p2p-webrtc-direct")),oe(F2,q("p2p-webrtc-direct"))),ws=nt(B2,U2,M2,F2,fg,hg,Ii,NA,PA,ko,ug,dg),cX=nt(oe(ws,q("p2p-stardust"),q("p2p")),oe(ws,q("p2p-stardust"))),To=nt(oe(ws,q("p2p")),fg,hg,ug,dg,q("p2p")),lg=nt(oe(To,q("p2p-circuit"),To),oe(To,q("p2p-circuit")),oe(q("p2p-circuit"),To),oe(ws,q("p2p-circuit")),oe(q("p2p-circuit"),ws),q("p2p-circuit")),pg=()=>nt(oe(lg,pg),lg),Yr=pg(),mg=nt(oe(Yr,To,Yr),oe(To,Yr),oe(Yr,To),Yr,To);var lX=nt(oe(Yr,q("webrtc"),q("p2p")),oe(Yr,q("webrtc")),oe(ws,q("webrtc"),q("p2p")),oe(ws,q("webrtc")),q("webrtc"));function gg(r){function e(t){let n;try{n=X(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function oe(...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:gg(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(s=>{let i=typeof s=="function"?s().partialMatch(n):s.partialMatch(n);return i!=null?(o=i,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:gg(e),partialMatch:e}}function q(r){let e=r;function t(o){let s;try{s=X(o)}catch{return!1}let i=s.protoNames();return i.length===1&&i[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 LA="bootstrap",BA=50,UA=12e4,MA=1e3,V2=class extends xe{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??MA,this.list=[];for(let n of t.list){if(!mg.matches(n)){this.log.error("Invalid multiaddr");continue}let o=X(n),s=o.getPeerId();if(s==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let i={id:ge(s),multiaddrs:[o]};this.list.push(i)}this._init=t}[Ko]=this;[Symbol.toStringTag]="@libp2p/bootstrap";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??LA]:{value:this._init.tagValue??BA,ttl:this._init.tagTTL??UA}}}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function wg(r){return e=>new V2(e,r)}var Eg={ERR_SIGNATURE_NOT_VALID:"ERR_SIGNATURE_NOT_VALID"};var Xa;(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)=>{let o={publicKey:new Uint8Array(0),payloadType:new Uint8Array(0),payload:new Uint8Array(0),signature:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.publicKey=t.bytes();break;case 2:o.payloadType=t.bytes();break;case 3:o.payload=t.bytes();break;case 5:o.signature=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Xa||(Xa={}));var Qr=class r{static createFromProtobuf=async e=>{let t=Xa.decode(e),n=await ft(t.publicKey);return new r({peerId:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t.privateKey==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,s=e.marshal(),i=bg(n,o,s),c=await(await Rr(t.privateKey)).sign(i.subarray());return new r({peerId:t,payloadType:o,payload:s,signature:c})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new m("envelope signature is not valid for the given domain",Eg.ERR_SIGNATURE_NOT_VALID);return n};peerId;payloadType;payload;signature;marshaled;constructor(e){let{peerId:t,payloadType:n,payload:o,signature:s}=e;this.peerId=t,this.payloadType=n,this.payload=o,this.signature=s}marshal(){if(this.peerId.publicKey==null)throw new Error("Missing public key");return this.marshaled==null&&(this.marshaled=Xa.encode({publicKey:this.peerId.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=bg(e,this.payloadType,this.payload);if(this.peerId.publicKey==null)throw new Error("Missing public key");return qr(this.peerId.publicKey).verify(t.subarray(),this.signature)}},bg=(r,e,t)=>{let n=B(r),o=Ve(n.byteLength),s=Ve(e.length),i=Ve(t.length);return new ue(o,n,s,e,i,t)};function xg(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 vg="libp2p-peer-record",Rg=Uint8Array.from([3,1]);var ja;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((s,i,a={})=>{a.lengthDelimited!==!1&&i.fork(),s.multiaddr!=null&&s.multiaddr.byteLength>0&&(i.uint32(10),i.bytes(s.multiaddr)),a.lengthDelimited!==!1&&i.ldelim()},(s,i)=>{let a={multiaddr:new Uint8Array(0)},c=i==null?s.len:s.pos+i;for(;s.pos<c;){let l=s.uint32();switch(l>>>3){case 1:a.multiaddr=s.bytes();break;default:s.skipType(l&7);break}}return a})),o),n.encode=s=>re(s,n.codec()),n.decode=s=>te(s,n.codec())})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,o,s={})=>{if(s.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 i of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(i,o);s.lengthDelimited!==!1&&o.ldelim()},(n,o)=>{let s={peerId:new Uint8Array(0),seq:0n,addresses:[]},i=o==null?n.len:n.pos+o;for(;n.pos<i;){let a=n.uint32();switch(a>>>3){case 1:s.peerId=n.bytes();break;case 2:s.seq=n.uint64();break;case 3:s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32()));break;default:n.skipType(a&7);break}}return s})),t),r.encode=n=>re(n,r.codec()),r.decode=n=>te(n,r.codec())})(ja||(ja={}));var lr=class r{static createFromProtobuf=e=>{let t=ja.decode(e),n=Xe(t.peerId),o=(t.addresses??[]).map(i=>X(i.multiaddr)),s=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:s})};static DOMAIN=vg;static CODEC=Rg;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=ja.encode({peerId:this.peerId.toBytes(),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||!xg(this.multiaddrs,e.multiaddrs))}};function Je(r,e){let t=yr(r,e),n={read:async(o,s)=>{let i=await t.read(s);return o.decode(i)},write:async(o,s,i)=>{await t.write(s.encode(o),i)},writeV:async(o,s,i)=>{await t.writeV(o.map(a=>s.encode(a)),i)},pb:o=>({read:async s=>n.read(o,s),write:async(s,i)=>n.write(s,o,i),writeV:async(s,i)=>n.writeV(s,o,i),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Sg="/libp2p/relay";var _g="circuit-relay-relay";var $X=BigInt(131072),Es="/libp2p/circuit/relay/0.2.0/hop",K2="/libp2p/circuit/relay/0.2.0/stop",HX=30*1e3,qX=30*1e3,$2=300;var H2="ERR_RELAYED_DIAL",Ag="ERR_HOP_REQUEST_FAILED";var Co;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ti.codec().encode(o.peer,s)),o.reservation!=null&&(s.uint32(26),D1.codec().encode(o.reservation,s)),o.limit!=null&&(s.uint32(34),ki.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(40),St.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=Ti.codec().decode(o,o.uint32());break;case 3:i.reservation=D1.codec().decode(o,o.uint32());break;case 4:i.limit=ki.codec().decode(o,o.uint32());break;case 5:i.status=St.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Co||(Co={}));var un;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.peer!=null&&(s.uint32(18),Ti.codec().encode(o.peer,s)),o.limit!=null&&(s.uint32(26),ki.codec().encode(o.limit,s)),o.status!=null&&(s.uint32(32),St.codec().encode(o.status,s)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.peer=Ti.codec().decode(o,o.uint32());break;case 3:i.limit=ki.codec().decode(o,o.uint32());break;case 4:i.status=St.codec().decode(o);break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(un||(un={}));var Ti;(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 s of t.addrs)n.uint32(18),n.bytes(s);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:new Uint8Array(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.id=t.bytes();break;case 2:o.addrs.push(t.bytes());break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ti||(Ti={}));var D1;(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 s of t.addrs)n.uint32(18),n.bytes(s);t.voucher!=null&&(n.uint32(26),n.bytes(t.voucher)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.expire=t.uint64();break;case 2:o.addrs.push(t.bytes());break;case 3:o.voucher=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(D1||(D1={}));var ki;(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)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.duration=t.uint32();break;case 2:o.data=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(ki||(ki={}));var St;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(St||(St={}));var q2;(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"})(q2||(q2={}));(function(r){r.codec=()=>$e(q2)})(St||(St={}));var Ig;(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)=>{let o={relay:new Uint8Array(0),peer:new Uint8Array(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.relay=t.bytes();break;case 2:o.peer=t.bytes();break;case 3:o.expiration=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ig||(Ig={}));async function Dg(r){let e=new TextEncoder().encode(r),t=await De.digest(e);return ce.createV0(t)}function W2(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var T1=class extends xe{peerId;peerStore;contentRouting;registrar;started;topologyId;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.contentRouting=e.contentRouting,this.registrar=e.registrar}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Es,{notifyOnTransient:!0,onConnect:e=>{this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}afterStart(){this.discover().catch(e=>{this.log.error("error discovering relays",e)})}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async discover(){this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[t=>t.protocols.includes(Es)],orders:[()=>Math.random()<.5?1:-1]});for(let t of e)this.log("found relay peer %p in content peer store",t.id),this.safeDispatchEvent("relay:discover",{detail:t.id});this.log("found %d relay peers in peer store",e.length);try{this.log("searching content routing for relays");let t=await Dg(Sg),n=0;for await(let o of this.contentRouting.findProviders(t))if(o.multiaddrs.length>0&&!o.id.equals(this.peerId)){let s=o.id;n++,await this.peerStore.merge(s,{multiaddrs:o.multiaddrs}),this.log("found relay peer %p in content routing",s),this.safeDispatchEvent("relay:discover",{detail:s})}this.log("found %d relay peers in content routing",n)}catch(t){this.log.error("failed when finding relays on the network",t)}}};var VA=60*1e3*10,KA=60*1e3*5,$A=30*1e3,k1=class extends xe{peerId;connectionManager;transportManager;peerStore;events;reserveQueue;reservations;maxDiscoveredRelays;maxReservationQueueLength;reservationCompletionTimeout;started;log;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new st,this.maxDiscoveredRelays=t?.discoverRelays??0,this.maxReservationQueueLength=t?.maxReservationQueueLength??100,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??1e4,this.started=!1,this.reserveQueue=new Vt({concurrency:t?.reservationConcurrency??1,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("peer:disconnect",n=>{this.#t(n.detail)})}isStarted(){return this.started}start(){this.started=!0}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}async addRelay(e,t){if(this.peerId.equals(e)){this.log("not trying to use self as relay");return}if(this.reserveQueue.size>this.maxReservationQueueLength){this.log("not adding relay as the queue is full");return}if(this.reserveQueue.has(e)){this.log("relay peer is already in the reservation queue");return}this.log("add relay %p",e),await this.reserveQueue.add(async()=>{try{let n=this.reservations.get(e);if(n!=null){if(W2(n.reservation.expire)>VA){this.log("already have reservation on relay peer %p and it expires in more than 10 minutes",e);return}clearTimeout(n.timeout),this.reservations.delete(e)}if(t==="discovered"&&[...this.reservations.values()].reduce((d,u)=>(u.type==="discovered"&&d++,d),0)>=this.maxDiscoveredRelays){this.log("already have enough discovered relays");return}let o=AbortSignal.timeout(this.reservationCompletionTimeout),s=await this.connectionManager.openConnection(e,{signal:o});if(s.remoteAddr.protoNames().includes("p2p-circuit")){this.log("not creating reservation over relayed connection");return}let i=await this.#e(s,{signal:o});this.log("created reservation on relay peer %p",e);let a=W2(i.expire),c=Math.min(Math.max(a-KA,$A),Math.pow(2,31)-1),l=setTimeout(()=>{this.addRelay(e,t).catch(d=>{this.log.error("could not refresh reservation to relay %p",e,d)})},c);this.reservations.set(e,{timeout:l,reservation:i,type:t}),await this.peerStore.merge(e,{tags:{[_g]:{value:1,ttl:a}}}),await this.transportManager.listen([X(`/p2p/${e.toString()}/p2p-circuit`)])}catch(n){this.log.error("could not reserve slot on %p",e,n);let o=this.reservations.get(e);o!=null&&clearTimeout(o.timeout),this.reservations.delete(e)}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Es,t),s=Je(n).pb(Co);await s.write({type:Co.Type.RESERVE},t);let i;try{i=await s.read(t)}catch(c){throw this.log.error("error parsing reserve message response from %p because",e.remotePeer,c),n.abort(c),c}finally{await n.close()}if(i.status===St.OK&&i.reservation!=null){let c=!1,l=e.remoteAddr.bytes;for(let d of i.reservation.addrs)if(j(l,d)){c=!0;break}return c||i.reservation.addrs.push(l),i.reservation}let a=`reservation failed with status ${i.status??"undefined"}`;throw this.log.error(a),new Error(a)}#t(e){let t=this.reservations.get(e);t!=null&&(this.log("connection to relay %p closed, removing reservation from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),this.safeDispatchEvent("relay:removed",{detail:e}),this.reservations.size<this.maxDiscoveredRelays&&(this.log("not enough relays %d/%d",this.reservations.size,this.maxDiscoveredRelays),this.safeDispatchEvent("relay:not-enough-relays",{})))}};function G2(r){let{stream:e,remoteAddr:t,logger:n}=r,o=n.forComponent("libp2p:stream:converter"),s=!1,i=!1,a=e.close.bind(e);e.close=async f=>{await a(f),u(!0)};let c=e.abort.bind(e);e.abort=f=>{c(f),u(!0)};let l=e.sink.bind(e);e.sink=async f=>{try{await l(f)}catch(g){g.type!=="aborted"&&o.error("%s error in sink",t,g)}finally{i=!0,u()}};let d={log:o,sink:e.sink,source:async function*(){try{for await(let f of e.source)f instanceof Uint8Array?yield f:yield*f}finally{s=!0,u()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function u(f){f===!0&&(s=!0,i=!0),s&&i&&d.timeline.close==null&&(d.timeline.close=Date.now())}return d}var z2=class extends xe{connectionManager;relayStore;listeningAddrs;log;constructor(e){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.relayStore=e.relayStore,this.listeningAddrs=new st,this.relayStore.addEventListener("relay:removed",this._onRemoveRelayPeer)}_onRemoveRelayPeer=e=>{this.#e(e.detail)};async listen(e){this.log("listen on %a",e);let t=e.decapsulate("/p2p-circuit"),n=await this.connectionManager.openConnection(t);if(!this.relayStore.hasReservation(n.remotePeer)){this.log("making reservation on peer %p",n.remotePeer),await this.relayStore.addRelay(n.remotePeer,"configured");return}let o=this.relayStore.getReservation(n.remotePeer);if(o==null)throw new m("Did not have reservation after making reservation","ERR_NO_RESERVATION");if(this.listeningAddrs.has(n.remotePeer)){this.log("already listening on relay %p",n.remotePeer);return}this.listeningAddrs.set(n.remotePeer,o.addrs.map(s=>X(s).encapsulate("/p2p-circuit"))),this.safeDispatchEvent("listening",{})}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){}#e(e){let t=this.listeningAddrs.has(e);this.log("relay peer removed %p - had reservation",e,t),this.listeningAddrs.delete(e),t&&(this.log.trace("removing relay event listener for peer %p",e),this.relayStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),this.safeDispatchEvent("close",{}))}};function Tg(r){return new z2(r)}var qA=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(X)}catch{return!1}return!0},Y2={maxInboundStopStreams:$2,maxOutboundStopStreams:$2,stopTimeout:3e4},C1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??Y2.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Y2.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??Y2.stopTimeout,t.discoverRelays!=null&&t.discoverRelays>0&&(this.discovery=new T1(e),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{this.log.error("could not add discovered relay %p",n.detail,o)})})),this.reservationStore=new k1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.discover().catch(n=>{this.log.error("could not discover relays",n)})}),this.started=!1}isStarted(){return this.started}async start(){this.reservationStore.start(),await this.registrar.handle(K2,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnTransientConnection:!0}),await this.discovery?.start(),this.started=!0}afterStart(){this.discovery?.afterStart()}async stop(){this.discovery?.stop(),this.reservationStore.stop(),await this.registrar.unhandle(K2),this.started=!1}[tn]=!0;[Symbol.toStringTag]="libp2p/circuit-relay-v2";async dial(e,t={}){if(e.protoCodes().filter(h=>h===290).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new m(h,H2)}let n=e.toString().split("/p2p-circuit"),o=X(n[0]),s=X(n[n.length-1]),i=o.getPeerId(),a=s.getPeerId();if(i==null||a==null){let h=`Circuit relay dial to ${e.toString()} failed as address did not have peer ids`;throw this.log.error(h),new m(h,H2)}let c=ge(i),l=ge(a),d=!1,f=this.connectionManager.getConnections(c)[0];f==null&&(await this.peerStore.merge(c,{multiaddrs:[o]}),f=await this.connectionManager.openConnection(c,t),d=!0);let g;try{return g=await f.newStream(Es),await this.connectV2({stream:g,connection:f,destinationPeer:l,destinationAddr:s,relayAddr:o,ma:e,disconnectOnFailure:d})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),g?.abort(h),d&&await f.close(),h}}async connectV2({stream:e,connection:t,destinationPeer:n,destinationAddr:o,relayAddr:s,ma:i,disconnectOnFailure:a}){try{let c=Je(e),l=c.pb(Co);await l.write({type:Co.Type.CONNECT,peer:{id:n.toBytes(),addrs:[X(o).bytes]}});let d=await l.read();if(d.status!==St.OK)throw new m(`failed to connect via relay with status ${d?.status?.toString()??"undefined"}`,Ag);let u=G2({stream:c.unwrap(),remoteAddr:i,localAddr:s.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger});return this.log("new outbound transient connection %a",u.remoteAddr),await this.upgrader.upgradeOutbound(u,{transient:!0})}catch(c){throw this.log.error(`Circuit relay dial to destination ${n.toString()} via relay ${t.remotePeer.toString()} failed`,c),a&&await t.close(),c}}createListener(e){return Tg({connectionManager:this.connectionManager,relayStore:this.reservationStore,logger:this.logger})}filter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Yr.matches(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=Je(t).pb(un),s=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,s.type),s?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(s.type!==un.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!qA(s)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let i=Xe(s.peer.id);if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,i)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:un.Type.STATUS,status:St.OK},{signal:n});let a=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${i.toString()}`),c=this.addressManager.getAddresses()[0],l=G2({stream:o.unwrap().unwrap(),remoteAddr:a,localAddr:c,logger:this.logger});this.log("new inbound transient connection %a",l.remoteAddr),await this.upgrader.upgradeInbound(l,{transient:!0}),this.log("%s connection %a upgraded","inbound",l.remoteAddr)}};function Q2(r={}){return e=>new C1(e,r)}var kg=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},WA=new WeakMap;function GA({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(kg());let s,i,a,c=r??clearTimeout,l=()=>{c(s),a(kg())},d=()=>{o&&o.removeEventListener("abort",l)},u=new Promise((f,g)=>{i=()=>{d(),f(n)},a=g,s=(e??setTimeout)(i,t)});return o&&o.addEventListener("abort",l,{once:!0}),WA.set(u,()=>{c(s),s=null,i()}),u}}var zA=GA(),N1=zA;var Xr;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.observedAddresses!=null)for(let a of o.observedAddresses)s.uint32(18),s.bytes(a);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={observedAddresses:[]},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.observedAddresses.push(o.bytes());break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Xr||(Xr={}));function X2(r,e){return wn.matches(r)||e.transportForMultiaddr(r)==null?!1:Kc.matches(r)?!0:C4.matches(r)?$t(r.toOptions().host)===!1:!1}var Cg=1024*4,Ng=100,P1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},O1=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??P1.timeout,this.retries=t.retries??P1.retries,this.maxInboundStreams=t.maxInboundStreams??P1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??P1.maxOutboundStreams}isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Za,{notifyOnTransient:!0,onConnect:(e,t)=>{t.transient&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Za,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,runOnTransientConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Za),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([Za],{signal:o.signal,runOnTransientConnection:!0});let s=Je(t,{maxDataLength:Cg}).pb(Xr);this.log("B sending connect to %p",e.remotePeer);let i=Date.now();await s.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(u=>u.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await s.read(o);if(a.type!==Xr.Type.CONNECT)throw this.log("A sent wrong message type"),new m("DCUtR message type was incorrect",$o);let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new m("DCUtR connect message had no multiaddrs",$o);let l=Date.now()-i;this.log("A sending sync, rtt %dms",l),await s.write({type:Xr.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await N1(l/2),this.log("B dialing",c);let d=await this.connectionManager.openConnection(c,{signal:o.signal,priority:Ng});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,d.remoteAddr),await e.close(o);break}catch(s){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,s),t?.abort(s),n===this.retries)throw s}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let s=o.multiaddr;return s.getPeerId()==null?s.encapsulate(`/p2p/${e.remotePeer}`):s}).filter(o=>X2(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let s=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(s.transient)throw new Error("Could not open a new, non-transient, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,s.remoteAddr),await e.close({signal:o}),!0}catch(s){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,s)}}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=Je(e,{maxDataLength:Cg}).pb(Xr);this.log("A receiving connect");let s=await o.read(n);if(s.type!==Xr.Type.CONNECT)throw this.log("B sent wrong message type"),new m("DCUtR message type was incorrect",$o);if(s.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new m("DCUtR connect message had no multiaddrs",$o);let i=this.getDialableMultiaddrs(s.observedAddresses);if(i.length===0)throw this.log("B had no dialable multiaddrs"),new m("DCUtR connect message had no dialable multiaddrs",$o);if(this.log("A sending connect"),await o.write({type:Xr.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Xr.Type.SYNC)throw new m("DCUtR message type was incorrect",$o);this.log("A dialing",i);let c=await this.connectionManager.openConnection(i,{signal:n.signal,priority:Ng,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=X(n);if(!X2(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Za="/libp2p/dcutr";function Pg(r={}){return e=>new O1(e,r)}var Og="0.1.0",Lg="id",Bg="id/push",Ug="1.0.0",Mg="1.0.0";var Kg=Ye(Vg(),1),j2=typeof window=="object"&&typeof document=="object"&&document.nodeType===9,L1=(0,Kg.default)(),B1=j2&&!L1,$g=L1&&!j2,Hg=L1&&j2,qg=typeof globalThis.process<"u"&&typeof globalThis.process.release<"u"&&globalThis.process.release.name==="node"&&!L1,U1=typeof importScripts=="function"&&typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Zj=typeof globalThis.process<"u"&&typeof globalThis.process.env<"u"&&globalThis.process.env["NODE"+"_"+"ENV"]==="test",Wg=typeof navigator<"u"&&navigator.product==="ReactNative";var bs;(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 s of t.listenAddrs)n.uint32(18),n.bytes(s);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let s of t.protocols)n.uint32(26),n.string(s);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 5:o.protocolVersion=t.string();break;case 6:o.agentVersion=t.string();break;case 1:o.publicKey=t.bytes();break;case 2:o.listenAddrs.push(t.bytes());break;case 4:o.observedAddr=t.bytes();break;case 3:o.protocols.push(t.string());break;case 8:o.signedPeerRecord=t.bytes();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(bs||(bs={}));var Z2=1024*8,Tr={protocolPrefix:"ipfs",timeout:6e4,maxInboundStreams:1,maxOutboundStreams:1,maxPushIncomingStreams:1,maxPushOutgoingStreams:1,maxObservedAddresses:10,maxIdentifyMessageSize:8192,runOnConnectionOpen:!0,runOnTransientConnection:!0},M1=class{identifyProtocolStr;identifyPushProtocolStr;host;started;timeout;peerId;peerStore;registrar;connectionManager;addressManager;maxInboundStreams;maxOutboundStreams;maxPushIncomingStreams;maxPushOutgoingStreams;maxIdentifyMessageSize;maxObservedAddresses;events;runOnTransientConnection;log;constructor(e,t={}){this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.events=e.events,this.log=e.logger.forComponent("libp2p:identify"),this.identifyProtocolStr=`/${t.protocolPrefix??Tr.protocolPrefix}/${Lg}/${Ug}`,this.identifyPushProtocolStr=`/${t.protocolPrefix??Tr.protocolPrefix}/${Bg}/${Mg}`,this.timeout=t.timeout??Tr.timeout,this.maxInboundStreams=t.maxInboundStreams??Tr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Tr.maxOutboundStreams,this.maxPushIncomingStreams=t.maxPushIncomingStreams??Tr.maxPushIncomingStreams,this.maxPushOutgoingStreams=t.maxPushOutgoingStreams??Tr.maxPushOutgoingStreams,this.maxIdentifyMessageSize=t.maxIdentifyMessageSize??Tr.maxIdentifyMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Tr.maxObservedAddresses,this.runOnTransientConnection=t.runOnTransientConnection??Tr.runOnTransientConnection,this.host={protocolVersion:`${t.protocolPrefix??Tr.protocolPrefix}/${Og}`,agentVersion:t.agentVersion??`${e.nodeInfo.name}/${e.nodeInfo.version}`},(t.runOnConnectionOpen??Tr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(s=>{this.log.error("error during identify trigged by connection:open",s)})}),e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})}),this.host.agentVersion===`${e.nodeInfo.name}/${e.nodeInfo.version}`&&(qg||$g?this.host.agentVersion+=` UserAgent=${globalThis.process.version}`:(B1||U1||Hg||Wg)&&(this.host.agentVersion+=` UserAgent=${globalThis.navigator.userAgent}`))}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:B(this.host.agentVersion),ProtocolVersion:B(this.host.protocolVersion)}}),await this.registrar.handle(this.identifyProtocolStr,e=>{this._handleIdentify(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),await this.registrar.handle(this.identifyPushProtocolStr,e=>{this._handlePush(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxPushIncomingStreams,maxOutboundStreams:this.maxPushOutgoingStreams,runOnTransientConnection:this.runOnTransientConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.identifyProtocolStr),await this.registrar.unhandle(this.identifyPushProtocolStr),this.started=!1}async pushToConnections(e){let t=this.addressManager.getAddresses().map(d=>d.decapsulateCode(J("p2p").code)),n=new lr({peerId:this.peerId,multiaddrs:t}),o=await Qr.seal(n,this.peerId),s=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),a=P(i.metadata.get("AgentVersion")??B(this.host.agentVersion)),c=P(i.metadata.get("ProtocolVersion")??B(this.host.protocolVersion)),l=e.map(async d=>{let u,f=AbortSignal.timeout(this.timeout);ee(1/0,f);try{u=await d.newStream(this.identifyPushProtocolStr,{signal:f,runOnTransientConnection:this.runOnTransientConnection}),await Je(u,{maxDataLength:this.maxIdentifyMessageSize??Z2}).pb(bs).write({listenAddrs:t.map(h=>h.bytes),signedPeerRecord:o.marshal(),protocols:s,agentVersion:a,protocolVersion:c},{signal:f}),await u.close({signal:f})}catch(g){this.log.error("could not push identify update to peer",g),u?.abort(g)}});await Promise.all(l)}async push(){if(!this.isStarted())return;let e=[];await Promise.all(this.connectionManager.getConnections().map(async t=>{try{if(!(await this.peerStore.get(t.remotePeer)).protocols.includes(this.identifyPushProtocolStr))return;e.push(t)}catch(n){if(n.code!==q3)throw n}})),await this.pushToConnections(e)}async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);ee(1/0,o),t={...t,signal:o}}try{n=await e.newStream(this.identifyProtocolStr,{...t,runOnTransientConnection:this.runOnTransientConnection});let s=await Je(n,{maxDataLength:this.maxIdentifyMessageSize??Z2}).pb(bs).read(t);return await n.close(t),s}catch(o){throw this.log.error("error while reading identify message",o),n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:s,observedAddr:i}=n;if(o==null)throw new m("public key was missing from identify message","ERR_MISSING_PUBLIC_KEY");let a=await ft(o);if(!e.remotePeer.equals(a))throw new m("identified peer does not match the expected peer","ERR_INVALID_PEER");if(this.peerId.equals(a))throw new m("identified peer is our own peer id?","ERR_INVALID_PEER");let c=QA(i);return this.log("identify completed for peer %p and protocols %o",a,s),this.log("our observed address is %a",c),c!=null&&this.addressManager.getObservedAddrs().length<(this.maxObservedAddresses??1/0)&&(this.log("storing our observed address %a",c),this.addressManager.addObservedAddr(c)),this.#e(e,n)}async _handleIdentify(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);ee(1/0,o);try{let s=this.peerId.publicKey??new Uint8Array(0),i=await this.peerStore.get(this.peerId),a=this.addressManager.getAddresses().map(u=>u.decapsulateCode(J("p2p").code)),c=i.peerRecordEnvelope;if(a.length>0&&c==null){let u=new lr({peerId:this.peerId,multiaddrs:a});c=(await Qr.seal(u,this.peerId)).marshal().subarray()}let l=t.remoteAddr.bytes;k4.matches(t.remoteAddr)||(l=void 0),await Je(n).pb(bs).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:s,listenAddrs:a.map(u=>u.bytes),signedPeerRecord:c,observedAddr:l,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(s){this.log.error("could not respond to identify request",s),n.abort(s)}}async _handlePush(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)},i=await Je(n,{maxDataLength:this.maxIdentifyMessageSize??Z2}).pb(bs).read(o);await n.close(o),await this.#e(t,i)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log("handled push from %p",t.remotePeer)}async#e(e,t){if(this.log("received identify from %p",e.remotePeer),t==null)throw new m("message was null or undefined","ERR_INVALID_MESSAGE");let n={};if(t.listenAddrs.length>0&&(n.addresses=t.listenAddrs.map(i=>({isCertified:!1,multiaddr:X(i)}))),t.protocols.length>0&&(n.protocols=t.protocols),t.publicKey!=null&&(n.publicKey=t.publicKey,!(await ft(t.publicKey)).equals(e.remotePeer)))throw new m("public key did not match remote PeerId","ERR_INVALID_PUBLIC_KEY");let o;if(t.signedPeerRecord!=null){this.log("received signedPeerRecord from %p",e.remotePeer);let i=t.signedPeerRecord,a=await Qr.openAndCertify(i,lr.DOMAIN),c=lr.createFromProtobuf(a.payload);if(!c.peerId.equals(a.peerId))throw new m("signing key does not match PeerId in the PeerRecord","ERR_INVALID_SIGNING_KEY");if(!e.remotePeer.equals(c.peerId))throw new m("signing key does not match remote PeerId","ERR_INVALID_PEER_RECORD_KEY");let l;try{l=await this.peerStore.get(c.peerId)}catch(d){if(d.code!=="ERR_NOT_FOUND")throw d}if(l!=null&&(n.metadata=l.metadata,l.peerRecordEnvelope!=null)){let d=await Qr.createFromProtobuf(l.peerRecordEnvelope),u=lr.createFromProtobuf(d.payload);u.seqNumber>=c.seqNumber&&(this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",u.seqNumber,c.seqNumber),c=u,i=l.peerRecordEnvelope)}n.peerRecordEnvelope=i,n.addresses=c.multiaddrs.map(d=>({isCertified:!0,multiaddr:d})),o={seq:c.seqNumber,addresses:c.multiaddrs}}else this.log("%p did not send a signed peer record",e.remotePeer);if(this.log("patching %p with",e.remotePeer,n),await this.peerStore.patch(e.remotePeer,n),t.agentVersion!=null||t.protocolVersion!=null){let i={};t.agentVersion!=null&&(i.AgentVersion=B(t.agentVersion)),t.protocolVersion!=null&&(i.ProtocolVersion=B(t.protocolVersion)),this.log("merging %p metadata",e.remotePeer,i),await this.peerStore.merge(e.remotePeer,{metadata:i})}let s={peerId:e.remotePeer,protocolVersion:t.protocolVersion,agentVersion:t.agentVersion,publicKey:t.publicKey,listenAddrs:t.listenAddrs.map(i=>X(i)),observedAddr:t.observedAddr==null?void 0:X(t.observedAddr),protocols:t.protocols,signedPeerRecord:o,connection:e};return this.events.safeDispatchEvent("peer:identify",{detail:s}),s}};function QA(r){if(r!=null&&r.length>0)try{return X(r)}catch{}}function Gg(r={}){return e=>new M1(e,r)}var zg="/ipfs/kad/1.0.0",Yg="/dht/record",J2="/dht/provider";var Ja;(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 s={key:Ce(0),value:Ce(0),timeReceived:""},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let a=t.uint32();switch(a>>>3){case 1:{s.key=t.bytes();break}case 2:{s.value=t.bytes();break}case 5:{s.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return s})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ja||(Ja={}));function Qg(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"),s=String(r.getUTCMinutes()).padStart(2,"0"),i=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${s}:${i}.${c}Z`}function Xg(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,s=parseInt(t[3],10),i=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,s,i,a,c,l))}var _t=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Ja.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Qg(this.timeReceived)}}static deserialize(e){let t=Ja.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Xg(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 jg;(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)=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(jg||(jg={}));var Ee;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(Ee||(Ee={}));var F1;(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"})(F1||(F1={}));(function(r){r.codec=()=>$e(F1)})(Ee||(Ee={}));var Ni;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Ni||(Ni={}));var ep;(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"})(ep||(ep={}));(function(r){r.codec=()=>$e(ep)})(Ni||(Ni={}));var Ci;(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 s of t.multiaddrs)n.uint32(18),n.bytes(s);t.connection!=null&&(n.uint32(24),Ni.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={id:Ce(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.id=t.bytes();break}case 2:{o.multiaddrs.push(t.bytes());break}case 3:{o.connection=Ni.codec().decode(t);break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Ci||(Ci={}));var kr;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&F1[t.type]!==0&&(n.uint32(8),Ee.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let s of t.closer)n.uint32(66),Ci.codec().encode(s,n);if(t.providers!=null)for(let s of t.providers)n.uint32(74),Ci.codec().encode(s,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={type:Ee.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:{o.type=Ee.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{o.closer.push(Ci.codec().decode(t,t.uint32()));break}case 9:{o.providers.push(Ci.codec().decode(t,t.uint32()));break}default:{t.skipType(i&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(kr||(kr={}));function tp(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new yt("kad-dht:query:send-query",{detail:t})),t}function ec(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer!=null?r.closer:[],providers:r.providers!=null?r.providers:[]};return e.onProgress?.(new yt("kad-dht:query:peer-response",{detail:t})),t}function V1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new yt("kad-dht:query:final-peer",{detail:t})),t}function ur(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new yt("kad-dht:query:query-error",{detail:t})),t}function rp(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new yt("kad-dht:query:provider",{detail:t})),t}function tc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new yt("kad-dht:query:value",{detail:t})),t}function np(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new yt("kad-dht:query:dial-peer",{detail:t})),t}function Zg(r,e,t){if(t.length===0){let i="No records given";throw new m(i,"ERR_NO_RECORDS_RECEIVED")}let o=P(e).split("/");if(o.length<3){let i="Record key does not have a selector function";throw new m(i,"ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")}let s=r[o[1].toString()];if(s==null){let i=`No selector function configured for key type "${o[1]}"`;throw new m(i,"ERR_UNRECOGNIZED_KEY_PREFIX")}return t.length===1?0:s(e,t)}function jA(r,e){return 0}var Jg={pk:jA};async function Pi(r,e){let t=e.key,o=P(t).split("/");if(o.length<3)return;let s=r[o[1].toString()];if(s==null){let i=`No validator available for key type "${o[1]}"`;throw new m(i,"ERR_INVALID_RECORD_KEY_TYPE")}await s(t,e.value)}var ZA=async(r,e)=>{if(!(r instanceof Uint8Array))throw new m('"key" must be a Uint8Array',"ERR_INVALID_RECORD_KEY_NOT_BUFFER");if(r.byteLength<5)throw new m("invalid public key record","ERR_INVALID_RECORD_KEY_TOO_SHORT");if(P(r.subarray(0,4))!=="/pk/")throw new m("key was not prefixed with /pk/","ERR_INVALID_RECORD_KEY_BAD_PREFIX");let n=r.slice(4),o=await De.digest(e);if(!j(n,o.bytes))throw new m("public key does not match passed in key","ERR_INVALID_RECORD_HASH_MISMATCH")},e9={pk:ZA};var JA=B("/pk/");function t9(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=$t(n);return o==null?!0:!o})}}async function No(r){return(await De.digest(r)).digest}async function jr(r){return No(r.toBytes())}function Po(r){return new Oe(`${Yg}/${P(r,"base32")}`,!1)}function r9(r){return ve([JA,r.toBytes()])}function n9(r){return P(r.subarray(0,4))==="/pk/"}function o9(r){return Xe(r.subarray(4))}function op(r,e){let t=new Date;return new _t(r,e,t).serialize()}function s9(r,e=100){let t;return()=>{clearTimeout(t),t=setTimeout(()=>{r()},e)}}var eI=290,tI=54,rI=55,nI=56,oI=4,sI=41;function i9(r){let e=r.stringTuples();for(let t of e)if(t[0]===eI)return!1;if(e[0][0]===tI||e[0][0]===rI||e[0][0]===nI)return!0;if(e[0][0]===oI||e[0][0]===sI){let t=$t(`${e[0][1]}`);return t==null||!t}return!1}var K1=class{log;components;validators;selectors;peerRouting;queryManager;network;constructor(e,t){let{validators:n,selectors:o,peerRouting:s,queryManager:i,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.validators=n,this.selectors=o,this.peerRouting=s,this.queryManager=i,this.network=a}async getLocal(e){this.log("getLocal %b",e);let t=Po(e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=_t.deserialize(n);return await Pi(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let s=op(e,n);for(let{value:i,from:a}of t){if(j(i,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let d=Po(e);this.log(`Storing corrected record for key ${d.toString()}`),await this.components.datastore.put(d,s.subarray())}catch(d){this.log.error("Failed error correcting self",d)}continue}let c=!1,l={type:Ee.PUT_VALUE,key:e,record:s};for await(let d of this.network.sendRequest(a,l,o))d.name==="PEER_RESPONSE"&&d.record!=null&&j(d.record.value,_t.deserialize(s).value)&&(c=!0),yield d;c||(yield ur({from:a,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=op(e,t),s=Po(e);this.log(`storing record for key ${s.toString()}`),await this.components.datastore.put(s,o.subarray()),yield*Ke(this.peerRouting.getClosestPeers(e,{signal:n.signal}),i=>Et(i,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:Ee.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let d of this.network.sendRequest(a.peer.id,l,n))c.push(d),d.name==="PEER_RESPONSE"&&(d.record!=null&&j(d.record.value,_t.deserialize(o).value)||c.push(ur({from:a.peer.id,error:new m("value not put correctly","ERR_PUT_VALUE_INVALID")},n)));return c}),i=>Hn(i,{ordered:!1,concurrency:3}),async function*(i){for await(let a of i)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),s=0;try{s=Zg(this.selectors,e,o)}catch(a){if(a.code!=="ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY")throw a}let i=o[s];if(this.log("GetValue %b %b",e,i),i==null)throw new m("best value was not found","ERR_NOT_FOUND");yield*this.sendCorrectionRecord(e,n,i,t),yield n[s]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let s=await this.getLocal(e);yield tc({value:s.value,from:this.components.peerId},t)}catch(s){this.log("error getting local value for %b",e,s)}let n=this,o=async function*({peer:s,signal:i}){for await(let a of n.peerRouting.getValueOrPeers(s,e,{signal:i}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield tc({from:s,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function a9(r,e){return{id:r.id.toBytes(),multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function rc(r){if(r.id==null)throw new Error("Invalid peer in message");return{id:Xe(r.id),multiaddrs:(r.multiaddrs??[]).map(e=>X(e))}}var $1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:s,routingTable:i,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=s,this.routingTable=i,this.providers=a}async*provide(e,t,n={}){this.log("provide %s",e),await this.providers.addProvider(e,this.components.peerId);let o={type:Ee.ADD_PROVIDER,key:e.multihash.bytes,providers:[a9({id:this.components.peerId,multiaddrs:t})]},s=0,i=a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[];this.log("putProvider %s to %p",e,a.peer.id);try{this.log("sending provider record for %s to %p",e,a.peer.id);for await(let l of this.network.sendMessage(a.peer.id,o,n))l.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,a.peer.id),s++),c.push(l)}catch(l){this.log.error("error sending provide record to peer %p",a.peer.id,l),c.push(ur({from:a.peer.id,error:l},n))}return c};yield*Ke(this.peerRouting.getClosestPeers(e.multihash.bytes,n),a=>Et(a,c=>i(c)),a=>Hn(a,{ordered:!1,concurrency:3}),async function*(a){for await(let c of a)yield*c}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,s=e.multihash.bytes,i=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let d=[];for(let u of a.slice(0,n))try{let f=await this.components.peerStore.get(u);d.push({id:u,multiaddrs:f.addresses.map(({multiaddr:g})=>g)})}catch(f){if(f.code!=="ERR_NOT_FOUND")throw f;this.log("no peer store entry for %p",u)}if(yield ec({from:this.components.peerId,messageType:Ee.GET_PROVIDERS,providers:d},t),yield rp({from:this.components.peerId,providers:d},t),o+=d.length,o>=n)return}let c=async function*({peer:d,signal:u}){let f={type:Ee.GET_PROVIDERS,key:s};yield*i.network.sendRequest(d,f,{...t,signal:u})},l=new je(a);for await(let d of this.queryManager.run(s,c,t))if(yield d,d.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",d.providers.length,e,d.closer.length);let u=[];for(let f of d.providers)l.has(f.id)||(l.add(f.id),u.push(f));if(u.length>0&&(yield rp({from:d.from,providers:u},t),o+=u.length,o>=n))return}}};var H1=class extends xe{log;protocol;running;components;constructor(e,t){super();let{protocol:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=n}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 ca("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield np({peer:e},n),yield tp({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),c=await this._writeReadMessage(a,t,n);yield ec({from:e,messageType:c.type,closer:c.closer.map(rc),providers:c.providers.map(rc),record:c.record==null?void 0:_t.deserialize(c.record)},n)}catch(i){this.log.error("could not send %s to %p",t.type,e,i),yield ur({from:e,error:i},n)}finally{s!=null&&await s.close()}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new ca("Message type was missing","ERR_INVALID_PARAMETERS");this.log("sending %s to %p",t.type,e),yield np({peer:e},n),yield tp({to:e,type:o},n);let s;try{let a=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);await this._writeMessage(a,t,n),yield ec({from:e,messageType:o},n)}catch(i){yield ur({from:e,error:i},n)}finally{s!=null&&await s.close()}}async _writeMessage(e,t,n){let o=Je(e);await o.write(t,kr,n),await o.unwrap().close(n)}async _writeReadMessage(e,t,n){let o=Je(e);await o.write(t,kr,n);let s=await o.read(kr,n);return await o.unwrap().close(n),s.closer.forEach(i=>{this.safeDispatchEvent("peer",{detail:rc(i)})}),s.providers.forEach(i=>{this.safeDispatchEvent("peer",{detail:rc(i)})}),s}};var nc=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Oo=new Uint32Array(80),ap=class extends so{constructor(){super(64,20,8,!1),this.A=nc[0]|0,this.B=nc[1]|0,this.C=nc[2]|0,this.D=nc[3]|0,this.E=nc[4]|0}get(){let{A:e,B:t,C:n,D:o,E:s}=this;return[e,t,n,o,s]}set(e,t,n,o,s){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=s|0}process(e,t){for(let c=0;c<16;c++,t+=4)Oo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Oo[c]=wl(Oo[c-3]^Oo[c-8]^Oo[c-14]^Oo[c-16],1);let{A:n,B:o,C:s,D:i,E:a}=this;for(let c=0;c<80;c++){let l,d;c<20?(l=bl(o,s,i),d=1518500249):c<40?(l=o^s^i,d=1859775393):c<60?(l=xl(o,s,i),d=2400959708):(l=o^s^i,d=3395469782);let u=wl(n,5)+l+a+d+Oo[c]|0;a=i,i=s,s=wl(o,30),o=n,n=u}n=n+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,this.set(n,o,s,i,a)}roundClean(){Oo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},c9=js(()=>new ap);var l9={sha1:c9,"sha2-256":bo,"sha2-512":co};function oc(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(l9).join(" / ");throw new m(`Hash '${o}' is unknown or not supported. Must be ${a}`,"ERR_UNSUPPORTED_HASH_TYPE")}let s=l9[o],i=s6(s,r,e,{c:t,dkLen:n});return lt.encode(i).substring(1)}var q1=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.peerId)}async add(e){if(this.peerDistances.find(o=>o.peerId.equals(e))!=null)return;let t=await jr(e),n={peerId:e,distance:$n(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,s)=>f1(o.distance,s.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async anyCloser(e){if(e.length===0)return!1;if(this.length===0)return!0;let t=await Promise.all(e.map(jr)),n=this.peerDistances[this.peerDistances.length-1].distance;for(let o of t){let s=$n(this.originDhtKey,o);if(f1(s,n)<0)return!0}return!1}};var W1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){let{routingTable:n,network:o,validators:s,queryManager:i,logPrefix:a}=t;this.routingTable=n,this.network=o,this.validators=s,this.queryManager=i,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${a}:peer-routing`)}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:Ee.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=r9(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let s=await ft(vu.marshalPublicKey({bytes:o.record.value}));if(!s.equals(e))throw new m("public key does not match id","ERR_PUBLIC_KEY_DOES_NOT_MATCH_ID");if(s.publicKey==null)throw new m("public key missing","ERR_PUBLIC_KEY_MISSING");yield tc({from:e,value:s.publicKey},t)}throw new m(`Node not responding with its public key: ${e.toString()}`,"ERR_INVALID_RECORD")}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 V1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,s=async function*({peer:i,signal:a}){let c={type:Ee.FIND_NODE,key:e.toBytes()};for await(let l of o.network.sendRequest(i,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let d=l.closer.find(u=>u.id.equals(e));d!=null&&(yield V1({from:l.from,peer:d},t))}};for await(let i of this.queryManager.run(e.toBytes(),s,t))i.name==="FINAL_PEER"&&(n=!0),yield i}n||(yield ur({from:this.peerId,error:new m("Not found","ERR_NOT_FOUND")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await No(e),o=this.routingTable.closestPeers(n),s=this,i=new q1(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await i.add(c)}));let a=async function*({peer:c,signal:l}){s.log("closerPeersSingle %s from %p",P(e,"base32"),c);let d={type:Ee.FIND_NODE,key:e};yield*s.network.sendRequest(c,d,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))yield c,c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await i.add(l.id)}));this.log("found %d peers close to %b",i.length,e);for(let c of i.peers)try{let l=await this.peerStore.get(c);yield V1({from:this.peerId,peer:{id:c,multiaddrs:l.addresses.map(({multiaddr:d})=>d)}},t)}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}}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 i="invalid record received, discarded";this.log(i),yield ur({from:o.from,error:new m(i,"ERR_INVALID_RECORD")},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new m("invalid record received","ERR_INVALID_RECORD");await Pi(this.validators,new _t(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=await No(e),o=this.routingTable.closestPeers(n),s=[];for(let i of o)if(!i.equals(t))try{let a=await this.peerStore.get(i);s.push({id:i,multiaddrs:a.addresses.map(({multiaddr:c})=>c)})}catch(a){if(a.code!=="ERR_NOT_FOUND")throw a}return s.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",s.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p",e,t),s}};var u9=Ye(W0(),1);var G1=class{log;datastore;cache;cleanupInterval;provideValidity;syncQueue;started;cleaner;constructor(e,t={}){let{cacheSize:n,cleanupInterval:o,provideValidity:s}=t;this.log=e.logger.forComponent("libp2p:kad-dht:providers"),this.datastore=e.datastore,this.cleanupInterval=o??36e5,this.provideValidity=s??864e5,this.cache=(0,u9.default)(n??256),this.syncQueue=new Gt({concurrency:1}),this.started=!1}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cleaner=setInterval(()=>{this._cleanup().catch(e=>{this.log.error(e)})},this.cleanupInterval))}async stop(){this.started=!1,this.cleaner!=null&&(clearInterval(this.cleaner),this.cleaner=void 0)}async _cleanup(){await this.syncQueue.add(async()=>{let e=Date.now(),t=0,n=0,o=new Map,s=this.datastore.batch(),i=this.datastore.query({prefix:J2});for await(let a of i)try{let{cid:c,peerId:l}=d9(a.key),d=f9(a.value).getTime(),u=Date.now(),f=u-d,g=f>this.provideValidity;if(this.log("comparing: %d - %d = %d > %d %s",u,d,f,this.provideValidity,g?"(expired)":""),g){n++,s.delete(a.key);let h=o.get(c)??new Set;h.add(l),o.set(c,h)}t++}catch(c){this.log.error(c.message)}o.size>0?(this.log("deleting %d / %d entries",n,t),await s.commit()):this.log("nothing to delete");for(let[a,c]of o){let l=sc(a),d=this.cache.get(l);if(d!=null){for(let u of c)d.delete(u);d.size===0?this.cache.remove(l):this.cache.set(l,d)}}this.log("Cleanup successful (%dms)",Date.now()-e)})}async _getProvidersMap(e){let t=sc(e),n=this.cache.get(t);return n==null&&(n=await uI(this.datastore,e),this.cache.set(t,n)),n}async addProvider(e,t){await this.syncQueue.add(async()=>{this.log("%p provides %s",t,e);let n=await this._getProvidersMap(e);this.log("loaded %s provs",n.size);let o=new Date;n.set(t.toString(),o);let s=sc(e);this.cache.set(s,n),await lI(this.datastore,e,t,o)})}async getProviders(e){return this.syncQueue.add(async()=>(this.log("get providers for %s",e),[...(await this._getProvidersMap(e)).keys()].map(n=>ge(n))),{throwOnTimeout:!0})}};function sc(r){let e=typeof r=="string"?r:P(r.multihash.bytes,"base32");return`${J2}/${e}`}async function lI(r,e,t,n){let o=[sc(e),"/",t.toString()].join(""),s=new Oe(o),i=Ve(n.getTime());await r.put(s,i)}function d9(r){let e=r.toString().split("/");if(e.length!==5)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:e[3],peerId:e[4]}}async function uI(r,e){let t=new Map,n=r.query({prefix:sc(e)});for await(let o of n){let{peerId:s}=d9(o.key);t.set(s,f9(o.value))}return t}function f9(r){return new Date(Lt(r))}async function*h9(r,e,t,n){let o=dt({objectMode:!0}),s=u=>{n("clean up queue, results %d, queue size %d, pending tasks %d",o.readableLength,r.size,r.pending),r.clear(),o.end(u)},i=u=>{u!=null&&o.push(u)},a=u=>{n("queue error",u),s(u)},c=()=>{n("queue idle"),s()},l=()=>{n("abort queue"),s(new m("Query aborted","ERR_QUERY_ABORTED"))},d=()=>{s()};r.on("completed",i),r.on("error",a),r.on("idle",c),e.addEventListener("abort",l),t.addEventListener("cleanup",d);try{yield*o}finally{r.removeListener("completed",i),r.removeListener("error",a),r.removeListener("idle",c),e.removeEventListener("abort",l),t.removeEventListener("cleanup",d)}}var dI=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");async function*p9(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:s,alpha:i,pathIndex:a,numPaths:c,cleanUp:l,queryFuncTimeout:d,log:u,peersSeen:f}=r,g=new Gt({concurrency:i}),h=await No(e);function p(y,w){if(y==null)return;f.add(y);let b=BigInt("0x"+P($n(w,h),"base16"));g.add(async()=>{let E=[o];d!=null&&E.push(AbortSignal.timeout(d));let S=ot(E);ee(1/0,S);try{for await(let _ of s({key:e,peer:y,signal:S,pathIndex:a,numPaths:c})){if(S.aborted)return;if(_.name==="PEER_RESPONSE")for(let A of _.closer){if(f.has(A.id)){u("already seen %p in query",A.id);continue}if(n.equals(A.id)){u("not querying ourselves");continue}let D=await jr(A.id);if(BigInt("0x"+P($n(D,h),"base16"))>b){u("skipping %p as they are not closer to %b than %p",A.id,e,y);continue}u("querying closer peer %p",A.id),p(A.id,D)}g.emit("completed",_)}}catch(_){if(!o.aborted)return ur({from:y,error:_},r)}finally{S.clear()}},{priority:dI-b}).catch(E=>{u.error(E)})}p(t,await jr(t)),yield*h9(g,o,l,u)}var z1=class{disjointPaths;alpha;shutDownController;running;queries;logger;peerId;routingTable;initialQuerySelfHasRun;logPrefix;metrics;constructor(e,t){let{disjointPaths:n=20,alpha:o=3,logPrefix:s}=t;this.logPrefix=s,this.disjointPaths=n??20,this.running=!1,this.alpha=o??3,this.queries=0,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,e.metrics!=null&&(this.metrics={runningQueries:e.metrics.registerMetric(`${s.replaceAll(":","_")}_running_queries`),queryTime:e.metrics.registerMetric(`${s.replaceAll(":","_")}_query_time_seconds`)}),this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal)}isStarted(){return this.running}async start(){this.running=!0,this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");let o=this.metrics?.queryTime.timer();if(n.signal==null){let u=AbortSignal.timeout(3e4);ee(1/0,u),n={...n,signal:u}}let s=new AbortController,i=ot([this.shutDownController.signal,s.signal,n.signal]);ee(1/0,i,s.signal);let a=this.logger.forComponent(`${this.logPrefix}:query:`+P(e,"base58btc")),c=Date.now(),l=new xe,d=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(a("waiting for initial query-self query before continuing"),await Ot(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),a("query:start"),this.queries++,this.metrics?.runningQueries.update(this.queries);let u=await No(e),f=this.routingTable.closestPeers(u),g=f.slice(0,Math.min(this.disjointPaths,f.length));if(f.length===0){a.error("Running query with no peers");return}let h=new je,p=g.map((y,w)=>p9({key:e,startingPeer:y,ourPeerId:this.peerId,signal:i,query:t,pathIndex:w,numPaths:g.length,alpha:this.alpha,cleanUp:l,queryFuncTimeout:n.queryFuncTimeout,log:a,peersSeen:h,onProgress:n.onProgress}));for await(let y of bt(...p))y.name==="QUERY_ERROR"&&a.error("query error",y.error),yield y;d=!0}catch(u){if(!(!this.running&&u.code==="ERR_QUERY_ABORTED"))throw u}finally{d||(a("query exited early"),s.abort()),i.clear(),this.queries--,this.metrics?.runningQueries.update(this.queries),o?.(),l.dispatchEvent(new yt("cleanup")),a("query:done in %dms",Date.now()-c)}}};function fI(r){return r[Symbol.asyncIterator]!=null}function hI(r){if(fI(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 Y1=hI;var pI=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 mI(r,e,t){let n,o=new Promise((s,i)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:d}=pI(r),u=(...g)=>{let h=t.multiArgs?g:g[0];t.filter&&!t.filter(h)||(c.push(h),t.count===c.length&&(n(),s(c)))},f=g=>{n(),i(g)};n=()=>{for(let g of a)d(g,u);for(let g of t.rejectionEvents)d(g,f)};for(let g of a)l(g,u);for(let g of t.rejectionEvents)l(g,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&s(c)});if(o.cancel=n,typeof t.timeout=="number"){let s=zr(o,{milliseconds:t.timeout});return s.cancel=n,s}return o}function ic(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=mI(r,e,t),o=n.then(s=>s[0]);return o.cancel=n.cancel,o}var Q1=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;started;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){let{peerRouting:n,logPrefix:o,count:s,interval:i,queryTimeout:a,routingTable:c}=t;this.peerId=e.peerId,this.log=e.logger.forComponent(`${o}:query-self`),this.started=!1,this.peerRouting=n,this.routingTable=c,this.count=s??20,this.interval=i??3e5,this.initialInterval=t.initialInterval??1e3,this.queryTimeout=a??5e3,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun}isStarted(){return this.started}start(){this.started||(this.started=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.started=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.started){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=Z(),this.started){this.controller=new AbortController;let e=AbortSignal.timeout(this.queryTimeout),t=ot([this.controller.signal,e]);ee(1/0,t,this.controller.signal,e);try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await ic(this.routingTable,"peer:add",{signal:t})),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await Ke(this.peerRouting.getClosestPeers(this.peerId.toBytes(),{signal:t,isSelfQuery:!0}),s=>eo(s,this.count),async s=>Y1(s));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.started&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};function g9(r,e){if(r===e)return!0;if(r.length!==e.length)return!1;for(let t=0,n=r.length;t<n;++t)if(r[t]!==e[t])return!1;return!0}function cp(){return{contacts:[],dontSplit:!1,left:null,right:null}}function ac(r,e){if(!(e instanceof Uint8Array))throw new TypeError(r+" is not a Uint8Array")}var X1=class r extends xe{localNodeId;root;numberOfNodesPerKBucket;numberOfNodesToPing;distance;arbiter;constructor(e){super(),this.localNodeId=e.localNodeId,this.numberOfNodesPerKBucket=e.numberOfNodesPerKBucket??20,this.numberOfNodesToPing=e.numberOfNodesToPing??3,this.distance=e.distance??r.distance,this.arbiter=e.arbiter??r.arbiter,ac("option.localNodeId as parameter 1",this.localNodeId),this.root=cp()}static arbiter(e,t){return(e.vectorClock??0)>(t.vectorClock??0)?e:t}static distance(e,t){let n=0,o=0,s=Math.min(e.length,t.length),i=Math.max(e.length,t.length);for(;o<s;++o)n=n*256+(e[o]^t[o]);for(;o<i;++o)n=n*256+255;return n}add(e){ac("contact.id",e?.id);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e.id,t++);let o=this._indexOf(n,e.id);return o>=0?(this._update(n,o,e),this):n.contacts.length<this.numberOfNodesPerKBucket?(n.contacts.push(e),this.safeDispatchEvent("added",{detail:e}),this):n.dontSplit?(this.safeDispatchEvent("ping",{detail:{oldContacts:n.contacts.slice(0,this.numberOfNodesToPing),newContact:e}}),this):(this._split(n,t),this.add(e))}closest(e,t=1/0){if(ac("id",e),!Number.isInteger(t)&&t!==1/0||t<=0)throw new TypeError("n is not positive number");let n=[];for(let o=[this.root],s=0;o.length>0&&n.length<t;){let i=o.pop();if(i!=null)if(i.contacts===null){let a=this._determineNode(i,e,s++);o.push(i.left===a?i.right:i.left),o.push(a)}else n=n.concat(i.contacts)}return n.map(o=>({distance:this.distance(o.id,e),contact:o})).sort((o,s)=>o.distance-s.distance).slice(0,t).map(o=>o.contact)}count(){let e=0;for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e+=n.contacts.length)}return e}_determineNode(e,t,n){let o=n>>3,s=n%8;return t.length<=o&&s!==0?e.left:t[o]&1<<7-s?e.right:e.left}get(e){ac("id",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);return o>=0?n.contacts[o]:void 0}_indexOf(e,t){for(let n=0;n<e.contacts.length;++n)if(g9(e.contacts[n].id,t))return n;return-1}remove(e){ac("the id as parameter 1",e);let t=0,n=this.root;for(;n.contacts===null;)n=this._determineNode(n,e,t++);let o=this._indexOf(n,e);if(o>=0){let s=n.contacts.splice(o,1)[0];this.safeDispatchEvent("removed",{detail:s})}return this}_split(e,t){e.left=cp(),e.right=cp();for(let s of e.contacts)this._determineNode(e,s.id,t).contacts.push(s);e.contacts=null;let n=this._determineNode(e,this.localNodeId,t),o=e.left===n?e.right:e.left;o.dontSplit=!0}toArray(){let e=[];for(let t=[this.root];t.length>0;){let n=t.pop();n!=null&&(n.contacts===null?t.push(n.right,n.left):e=e.concat(n.contacts))}return e}*toIterable(){for(let e=[this.root];e.length>0;){let t=e.pop();t!=null&&(t.contacts===null?e.push(t.right,t.left):yield*t.contacts)}}_update(e,t,n){if(!g9(e.contacts[t].id,n.id))throw new Error("wrong index for _update");let o=e.contacts[t],s=this.arbiter(o,n);s===o&&o!==n||(e.contacts.splice(t,1),e.contacts.push(s),this.safeDispatchEvent("updated",{detail:{incumbent:o,selection:s}}))}};var gI="kad-close",yI=50,y9=20,wI=1e4,EI=10,j1=class extends xe{kBucketSize;kb;pingQueue;log;components;pingTimeout;pingConcurrency;running;protocol;tagName;tagValue;metrics;constructor(e,t){super();let{kBucketSize:n,pingTimeout:o,logPrefix:s,pingConcurrency:i,protocol:a,tagName:c,tagValue:l}=t;this.components=e,this.log=e.logger.forComponent(`${s}:routing-table`),this.kBucketSize=n??y9,this.pingTimeout=o??wI,this.pingConcurrency=i??EI,this.running=!1,this.protocol=a,this.tagName=c??gI,this.tagValue=l??yI,this.pingQueue=new Vt({concurrency:this.pingConcurrency,metricName:`${s.replaceAll(":","_")}_ping_queue`,metrics:this.components.metrics}),this.pingQueue.addEventListener("error",d=>{this.log.error("error pinging peer",d.detail)}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${s.replaceAll(":","_")}_routing_table_size`)})}isStarted(){return this.running}async start(){this.running=!0;let e=new X1({localNodeId:await jr(this.components.peerId),numberOfNodesPerKBucket:this.kBucketSize,numberOfNodesToPing:1});this.kb=e,e.addEventListener("ping",t=>{this._onPing(t).catch(n=>{this.log.error("could not process k-bucket ping event",n)})}),this._tagPeers(e)}async stop(){this.running=!1,this.pingQueue.clear(),this.kb=void 0}_tagPeers(e){let t=new je,n=s9(()=>{let o=new je(e.closest(e.localNodeId,y9).map(a=>a.peer)),s=o.difference(t),i=t.difference(o);Promise.resolve().then(async()=>{for(let a of s)await this.components.peerStore.merge(a,{tags:{[this.tagName]:{value:this.tagValue}}});for(let a of i)await this.components.peerStore.merge(a,{tags:{[this.tagName]:void 0}})}).catch(a=>{this.log.error("Could not update peer tags",a)}),t=o});e.addEventListener("added",o=>{n(),this.safeDispatchEvent("peer:add",{detail:o.detail.peer})}),e.addEventListener("removed",o=>{n(),this.safeDispatchEvent("peer:remove",{detail:o.detail.peer})})}async _onPing(e){if(!this.running)return;let{oldContacts:t,newContact:n}=e.detail,s=(await Promise.all(t.map(async i=>{let a=this.pingQueue.find(i.peer);return a!=null?a.join():this.pingQueue.add(async()=>{let c;try{let l={signal:AbortSignal.timeout(this.pingTimeout)};this.log("pinging old contact %p",i.peer),c=await(await this.components.connectionManager.openConnection(i.peer,l)).newStream(this.protocol,l);let u=Je(c);await u.write({type:Ee.PING},kr,l);let f=await u.read(kr,l);if(await u.unwrap().close(),f.type!==Ee.PING)throw new m(`Incorrect message type received, expected PING got ${f.type}`,"ERR_BAD_PING_RESPONSE");return!0}catch(l){return this.running&&this.kb!=null&&(this.log.error("could not ping peer %p",i.peer,l),this.log("evicting old contact after ping failed %p",i.peer),this.kb.remove(i.id)),c?.abort(l),!1}finally{this.metrics?.routingTableSize.update(this.size)}},{peerId:i.peer})}))).filter(i=>i).length;this.running&&s<t.length&&this.kb!=null&&(this.log("adding new contact %p",n.peer),this.kb.add(n))}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await jr(e),n=this.closestPeer(t);if(n!=null&&e.equals(n))return n}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).map(o=>o.peer)}async add(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.add({id:t,peer:e}),this.log("added %p with kad id %b",e,t),this.metrics?.routingTableSize.update(this.size)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await jr(e);this.kb.remove(t),this.metrics?.routingTableSize.update(this.size)}};var w9=[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 Z1=15,J1=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:s,refreshQueryTimeout:i,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=s??3e5,this.refreshQueryTimeout=i??3e4,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async start(){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,s)=>{try{if(await this._refreshCommonPrefixLength(s,o,e),this._numPeersForCpl(t)===0){let i=Math.min(2*(s+1),n.length-1);for(let a=s+1;a<i+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(i){this.log.error(i)}})).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 s=await Y1(this.peerRouting.getClosestPeers(o.toBytes(),{signal:AbortSignal.timeout(this.refreshQueryTimeout)}));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>Z1&&(e=Z1);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");let t=Ht(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localNodeId,n,e);return Xe(o)}async _makePeerId(e,t,n){if(n>Z1)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Z1}`);let i=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=i&a|t&~a,l=w9[c],d=new ArrayBuffer(34),u=new DataView(d,0,d.byteLength);return u.setUint8(0,De.code),u.setUint8(1,32),u.setUint32(2,l,!1),new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb!=null)for(let{id:e}of this.routingTable.kb.toIterable()){let t=$n(this.routingTable.kb.localNodeId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var ed=class{providers;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.providers=t.providers}async handle(e,t){if(this.log("start"),t.key==null||t.key.length===0)throw new m("Missing key","ERR_MISSING_KEY");let n;try{n=ce.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),await Promise.all(t.providers.map(async o=>{if(!e.equals(o.id)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log("received provider %p for %s (addrs %s)",e,n,o.multiaddrs.map(s=>X(s).toString())),await this.providers.addProvider(n,Xe(o.id))}))}};var td=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){this.log("incoming request from %p for peers closer to %b",e,t.key);let n=[];if(t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");j(this.peerId.toBytes(),t.key)?n=[{id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(s=>s.decapsulateCode(J("p2p").code))}]:n=await this.peerRouting.getCloserPeersOffline(t.key,e);let o={type:Ee.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:s})=>s.length).map(s=>({id:s.id.toBytes(),multiaddrs:s.multiaddrs.map(i=>i.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var rd=class{peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:s}=t;this.log=e.logger.forComponent(`${s}:rpc:handlers:get-providers`),this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new m("Invalid FIND_NODE message received - key was missing","ERR_INVALID_MESSAGE");let n;try{n=ce.decode(t.key)}catch{throw new m("Invalid CID","ERR_INVALID_CID")}this.log("%p asking for providers for %s",e,n);let[o,s]=await Promise.all([this.providers.getProviders(n),this.peerRouting.getCloserPeersOffline(t.key,e)]),i=await this._getPeers(o),a=await this._getPeers(s.map(({id:l})=>l)),c={type:Ee.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:a.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)})),providers:i.map(this.peerInfoMapper).filter(({multiaddrs:l})=>l.length).map(l=>({id:l.id.toBytes(),multiaddrs:l.multiaddrs.map(d=>d.bytes)}))};return this.log("got %s providers %s closerPeers",c.providers.length,c.closer.length),c}async _getAddresses(e){return[]}async _getPeers(e){let t=[];for(let n of e)try{let o=await this.peerStore.get(n),s=this.peerInfoMapper({id:n,multiaddrs:o.addresses.map(({multiaddr:i})=>i)});s.multiaddrs.length>0&&t.push(s)}catch(o){if(o.code!=="ERR_NOT_FOUND")throw o}return t}};var nd=class{peerStore;datastore;peerRouting;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new m("Invalid key","ERR_INVALID_KEY");let o={type:Ee.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(n9(n)){this.log("is public key");let a=o9(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new m("No public key found in key book","ERR_NOT_FOUND");c=l.id.publicKey}catch(l){if(l.code!=="ERR_NOT_FOUND")throw l}if(c!=null)return this.log("returning found public key"),o.record=new _t(n,c,new Date).serialize(),o}let[s,i]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return s!=null&&(this.log("had record for %b in local datastore",n),o.record=s.serialize()),i.length>0&&(this.log("had %s closer peers in routing table",i.length),o.closer=i.map(a=>({id:a.id.toBytes(),multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Po(e),n;try{n=await this.datastore.get(t)}catch(s){if(s.code==="ERR_NOT_FOUND")return;throw s}let o=_t.deserialize(n);if(o==null)throw new m("Invalid record","ERR_INVALID_RECORD");if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>1296e5){await this.datastore.delete(t);return}return o}};var od=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 sd=class{components;validators;log;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new m(o,"ERR_EMPTY_RECORD")}try{let o=_t.deserialize(t.record);await Pi(this.validators,o),o.timeReceived=new Date;let s=Po(o.key);await this.components.datastore.put(s,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,s)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var id=class{handlers;routingTable;log;constructor(e,t){let{providers:n,peerRouting:o,validators:s,logPrefix:i,peerInfoMapper:a}=t;this.log=e.logger.forComponent(`${i}:rpc`),this.routingTable=t.routingTable,this.handlers={[Ee.GET_VALUE.toString()]:new nd(e,{peerRouting:o,logPrefix:i}),[Ee.PUT_VALUE.toString()]:new sd(e,{validators:s,logPrefix:i}),[Ee.FIND_NODE.toString()]:new td(e,{peerRouting:o,logPrefix:i,peerInfoMapper:a}),[Ee.ADD_PROVIDER.toString()]:new ed(e,{providers:n,logPrefix:i}),[Ee.GET_PROVIDERS.toString()]:new rd(e,{peerRouting:o,providers:n,logPrefix:i,peerInfoMapper:a}),[Ee.PING.toString()]:new od(e,{logPrefix:i})}}async handleMessage(e,t){try{await this.routingTable.add(e)}catch(o){this.log.error("Failed to update the kbucket store",o)}let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}return n.handle(e,t)}onIncomingStream(e){Promise.resolve().then(async()=>{let{stream:t,connection:n}=e,o=n.remotePeer;try{await this.routingTable.add(o)}catch(i){this.log.error(i)}let s=this;await Ke(t,i=>Kt(i),async function*(i){for await(let a of i){let c=kr.decode(a);s.log("incoming %s from %p",c.type,o);let l=await s.handleMessage(o,c);l!=null&&(yield kr.encode(l))}},i=>gr(i),t)}).catch(t=>{this.log.error(t)})}};var ad=class extends xe{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 yt("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var lp=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await mr(this.dht.provide(e,t))}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await mr(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 m("Not found","ERR_NOT_FOUND")}},up=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 m("Not found","ERR_NOT_FOUND")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},bI=32,xI=64,cd=class extends xe{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;constructor(e,t){super();let{kBucketSize:n,clientMode:o,validators:s,selectors:i,querySelfInterval:a,protocol:c,logPrefix:l,pingTimeout:d,pingConcurrency:u,maxInboundStreams:f,maxOutboundStreams:g,providers:h}=t,p=l??"libp2p:kad-dht";this.running=!1,this.components=e,this.log=e.logger.forComponent(p),this.protocol=c??zg,this.kBucketSize=n??20,this.clientMode=o??!0,this.maxInboundStreams=f??bI,this.maxOutboundStreams=g??xI,this.peerInfoMapper=t.peerInfoMapper??t9,this.routingTable=new j1(e,{kBucketSize:n,pingTimeout:d,pingConcurrency:u,protocol:this.protocol,logPrefix:p}),this.providers=new G1(e,h??{}),this.validators={...e9,...s},this.selectors={...Jg,...i},this.network=new H1(e,{protocol:this.protocol,logPrefix:p});let y=Z();t.allowQueryWithZeroPeers===!0&&y.resolve(),this.queryManager=new z1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.peerRouting=new W1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:p}),this.contentFetching=new K1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:p}),this.contentRouting=new $1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:p}),this.routingTableRefresh=new J1(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:p}),this.rpc=new id(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:p,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new ad(e,{protocol:this.protocol,logPrefix:p}),this.querySelf=new Q1(e,{peerRouting:this.peerRouting,interval:a,initialInterval:t.initialQuerySelfInterval,logPrefix:p,initialQuerySelfHasRun:y,routingTable:this.routingTable}),this.network.addEventListener("peer",w=>{let b=w.detail;this.onPeerConnect(b).catch(E=>{this.log.error("could not add %p to routing table",b.id,E)}),this.dispatchEvent(new yt("peer",{detail:b}))}),this.topologyListener.addEventListener("peer",w=>{let b=w.detail;Promise.resolve().then(async()=>{let E=await this.components.peerStore.get(b),S={id:b,multiaddrs:E.addresses.map(({multiaddr:_})=>_),protocols:E.protocols};await this.onPeerConnect(S)}).catch(E=>{this.log.error("could not add %p to routing table",b,E)})}),this.dhtPeerRouting=new up(this),this.dhtContentRouting=new lp(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",w=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let b=w.detail.peer.addresses.some(({multiaddr:S})=>i9(S)),E=this.getMode();b&&E==="client"?await this.setMode("server"):E==="server"&&!b&&await this.setMode("client")}).catch(b=>{this.log.error("error setting dht server mode",b)})})}get[Jr](){return this.dhtContentRouting}get[en](){return this.dhtPeerRouting}get[Ko](){return this}async onPeerConnect(e){if(this.log("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log("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){await this.components.registrar.unhandle(this.protocol),e==="client"?(this.log("enabling client mode"),this.clientMode=!0):(this.log("enabling server mode"),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running=!0,await this.setMode(this.clientMode?"client":"server"),this.querySelf.start(),await Promise.all([this.providers.start(),this.queryManager.start(),this.network.start(),this.routingTable.start(),this.topologyListener.start(),this.routingTableRefresh.start()])}async stop(){this.running=!1,this.querySelf.stop(),await Promise.all([this.providers.stop(),this.queryManager.stop(),this.network.stop(),this.routingTable.stop(),this.routingTableRefresh.stop(),this.topologyListener.stop()])}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var E9;(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"})(E9||(E9={}));function b9(r){return e=>new cd(e,r)}var T9=Ye(D9(),1),Bi=T9.default;var F9=Ye(M9(),1);var be;(function(r){r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH"})(be||(be={}));var FI="/pkcs8/",V9="/info/",xs=new WeakMap,vs={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},fp={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function qn(r){return r==null||typeof r!="string"?!1:r===(0,F9.default)(r.trim())&&r.length>0}async function Le(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function dn(r){return new Oe(FI+r)}function Lo(r){return new Oe(V9+r)}var dd=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=Bi(fp,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<vs.minKeyLength)throw new Error(`dek.keyLength must be least ${vs.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<vs.minSaltLength)throw new Error(`dek.saltLength must be least ${vs.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<vs.minIterationCount)throw new Error(`dek.iterationCount must be least ${vs.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?oc(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";xs.set(this,{dek:n})}static generateOptions(){let e=Object.assign({},fp),t=Math.ceil(vs.minSaltLength/3)*3;return e.dek.salt=P(Ht(t),"base64"),e}static get options(){return fp}async createKey(e,t,n=2048){if(!qn(e)||e==="self")throw await Le(),new m("Invalid key name",be.ERR_INVALID_KEY_NAME);if(typeof t!="string")throw await Le(),new m("Invalid key type",be.ERR_INVALID_KEY_TYPE);let o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m("Key name already exists",be.ERR_KEY_ALREADY_EXISTS);switch(t.toLowerCase()){case"rsa":if(!Number.isSafeInteger(n)||n<2048)throw await Le(),new m("Invalid RSA key size",be.ERR_INVALID_KEY_SIZE);break;default:break}let i;try{let a=await Da(t,n),c=await a.id(),l=xs.get(this);if(l==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let d=l.dek,u=await a.export(d);i={name:e,id:c};let f=this.components.datastore.batch();f.put(o,B(u)),f.put(Lo(e),B(JSON.stringify(i))),await f.commit()}catch(a){throw await Le(),a}return i}async listKeys(){let e={prefix:V9},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(P(n.value)));return t}async findKeyById(e){try{let n=(await this.listKeys()).find(o=>o.id===e);if(n==null)throw new m(`Key with id '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND);return n}catch(t){throw await Le(),t}}async findKeyByName(e){if(!qn(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=Lo(e);try{let n=await this.components.datastore.get(t);return JSON.parse(P(n))}catch(n){throw await Le(),this.log.error(n),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async removeKey(e){if(!qn(e)||e==="self")throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);let t=dn(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Lo(e)),await o.commit(),n}async renameKey(e,t){if(!qn(e)||e==="self")throw await Le(),new m(`Invalid old key name '${e}'`,be.ERR_OLD_KEY_NAME_INVALID);if(!qn(t)||t==="self")throw await Le(),new m(`Invalid new key name '${t}'`,be.ERR_NEW_KEY_NAME_INVALID);let n=dn(e),o=dn(t),s=Lo(e),i=Lo(t);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${t}' already exists`,be.ERR_KEY_ALREADY_EXISTS);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(s),d=JSON.parse(P(l));d.name=t;let u=this.components.datastore.batch();return u.put(o,c),u.put(i,B(JSON.stringify(d))),u.delete(n),u.delete(s),await u.commit(),d}catch(c){throw await Le(),c}}async exportKey(e,t){if(!qn(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new m("Password is required",be.ERR_PASSWORD_REQUIRED);let n=dn(e);try{let o=await this.components.datastore.get(n),s=P(o),i=xs.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek;return await(await ci(s,a)).export(t)}catch(o){throw await Le(),o}}async exportPeerId(e){let t="temporary-password",n=await this.exportKey(e,t),o=await ci(n,t);return ft(o.public.bytes,o.bytes)}async importKey(e,t,n){if(!qn(e)||e==="self")throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw await Le(),new m("PEM encoded key is required",be.ERR_PEM_REQUIRED);let o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i;try{i=await ci(t,n)}catch{throw await Le(),new m("Cannot read the key, most likely the password is wrong",be.ERR_CANNOT_READ_KEY)}let a;try{a=await i.id();let d=xs.get(this);if(d==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let u=d.dek;t=await i.export(u)}catch(d){throw await Le(),d}let c={name:e,id:a},l=this.components.datastore.batch();return l.put(o,B(t)),l.put(Lo(e),B(JSON.stringify(c))),await l.commit(),c}async importPeer(e,t){try{if(!qn(e))throw new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);if(t==null)throw new m("PeerId is required",be.ERR_MISSING_PRIVATE_KEY);if(t.privateKey==null)throw new m("PeerId.privKey is required",be.ERR_MISSING_PRIVATE_KEY);let n=await Rr(t.privateKey),o=dn(e);if(await this.components.datastore.has(o))throw await Le(),new m(`Key '${e}' already exists`,be.ERR_KEY_ALREADY_EXISTS);let i=xs.get(this);if(i==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let a=i.dek,c=await n.export(a),l={name:e,id:t.toString()},d=this.components.datastore.batch();return d.put(o,B(c)),d.put(Lo(e),B(JSON.stringify(l))),await d.commit(),l}catch(n){throw await Le(),n}}async getPrivateKey(e){if(!qn(e))throw await Le(),new m(`Invalid key name '${e}'`,be.ERR_INVALID_KEY_NAME);try{let t=dn(e),n=await this.components.datastore.get(t);return P(n)}catch(t){throw await Le(),this.log.error(t),new m(`Key '${e}' does not exist.`,be.ERR_KEY_NOT_FOUND)}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await Le(),new m(`Invalid old pass type '${typeof e}'`,be.ERR_INVALID_OLD_PASS_TYPE);if(typeof t!="string")throw await Le(),new m(`Invalid new pass type '${typeof t}'`,be.ERR_INVALID_NEW_PASS_TYPE);if(t.length<20)throw await Le(),new m(`Invalid pass length ${t.length}`,be.ERR_INVALID_PASS_LENGTH);this.log("recreating keychain");let n=xs.get(this);if(n==null)throw new m("dek missing",be.ERR_INVALID_PARAMETERS);let o=n.dek;this.init.pass=t;let s=t!=null&&this.init.dek?.salt!=null?oc(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";xs.set(this,{dek:s});let i=await this.listKeys();for(let a of i){let c=await this.components.datastore.get(dn(a.name)),l=P(c),d=await ci(l,o),u=s.toString(),f=await d.export(u),g=this.components.datastore.batch(),h={name:a.name,id:a.id};g.put(dn(a.name),B(f)),g.put(Lo(a.name),B(JSON.stringify(h))),await g.commit()}this.log("keychain reconstructed")}};function fd(r={}){return e=>new dd(e,r)}var Ui=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 hp}async consume(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);if(i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i.consumedPoints>this.points)throw this.blockDuration>0&&i.consumedPoints<=this.points+t&&(i=this.memoryStorage.set(o,i.consumedPoints,this.blockDuration)),new m("Rate limit exceeded","ERR_RATE_LIMIT_EXCEEDED",i);if(this.execEvenly&&i.msBeforeNext>0&&!i.isFirstInDuration){let a=Math.ceil(i.msBeforeNext/(i.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=i.consumedPoints*this.execEvenlyMinDelayMs),await N1(a)}return i}penalty(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}reward(e,t=1,n={}){let o=this.getKey(e),s=this._getKeySecDuration(n),i=this.memoryStorage.incrby(o,-t,s);return i.remainingPoints=Math.max(this.points-i.consumedPoints,0),i}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)}},hp=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let s=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||s>0?(o.value+=t,{remainingPoints:0,msBeforeNext:s,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,s=this.storage.get(e);s!=null&&clearTimeout(s.timeoutId);let i={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,i),o>0&&(i.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),i.timeoutId.unref!=null&&i.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:i.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 cc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),pp=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),K9=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var mp=1<<20,VI=4<<20,hd=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=mp,t=VI){this._buffer=new ue,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 Object.assign(new Error("unprocessed message queue size too large!"),{code:"ERR_MSG_QUEUE_TOO_BIG"});let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.code==="ERR_MSG_TOO_BIG")throw l;break}let{id:n,type:o,length:s,offset:i}=this._headerInfo;if(this._buffer.length-i<s)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(i,i+s)),t.push(c),this._buffer.consume(i+s),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=H9(e),{value:o,offset:s}=H9(e,n),i=t&7;if(cc[i]==null)throw new Error(`Invalid type received: ${i}`);if(o>this._maxMessageSize)throw Object.assign(new Error("message size too large!"),{code:"ERR_MSG_TOO_BIG"});return{id:t>>3,type:i,offset:n+s,length:o}}},KI=128,$9=127;function H9(r,e=0){let t=0,n=0,o=e,s,i=r.length;do{if(o>=i||n>49)throw e=0,new RangeError("Could not decode varint");s=r.get(o++),t+=n<28?(s&$9)<<n:(s&$9)*Math.pow(2,n),n+=7}while(s>=KI);return e=o-e,{value:t,offset:e}}var gp=10*1024,yp=class{_pool;_poolOffset;constructor(){this._pool=ze(gp),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ve(e.id<<3|e.type,n,o),o+=Ne(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(Ve(e.data.length,n,o),o+=Ne(e.data.length)):(Ve(0,n,o),o+=Ne(0));let s=n.subarray(this._poolOffset,o);gp-o<100?(this._pool=ze(gp),this._poolOffset=0):this._poolOffset=o,t.append(s),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},$I=new yp;async function*q9(r){for await(let e of r){let t=new ue;$I.write(e,t),yield t}}var wp=class extends Do{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?pp:K9,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:pp.NEW_STREAM,data:new ue(B(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 W9(r){let{id:e,name:t,send:n,onEnd:o,type:s="initiator",maxMsgSize:i=mp}=r;return new wp({id:s==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:s==="initiator"?"outbound":"inbound",maxDataSize:i,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${s}:${e}`)})}var HI=1024,qI=1024,WI=1024*1024*4,GI=5,zI=500;function G9(r){let e={...r,type:`${cc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=P(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=P(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var pd=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??zI,this.sink=this._createSink(),this._source=dt({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=Ke(this._source,n=>q9(n)),this.closeController=new AbortController,this.rateLimiter=new Ui({points:t.disconnectThreshold??GI,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 Error("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:s}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??qI))throw new m("Too many outbound streams open","ERR_TOO_MANY_OUTBOUND_STREAMS");if(s.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=W9({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,G9(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),s.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return s.set(t,c),c}_createSink(){return async t=>{let n=()=>{b1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new hd(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let s of t)for(let i of o.write(s))await this._handleIncoming(i);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",G9(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??HI)){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:P(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let s=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(s==null){this.log("missing stream %s for message type %s",t,cc[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 i=this._init.maxStreamBufferSize??WI;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(s.sourceReadableLength()>i)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new m("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers","ERR_STREAM_INPUT_BUFFER_FULL");s.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:s.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:s.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),s.abort(a)}}};var Ep=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}createStreamMuxer(e={}){return new pd(this.components,{...e,...this._init})}};function z9(r={}){return e=>new Ep(e,r)}var Y9="1.0.0",Q9="ping",X9="ipfs";var bp="ERR_WRONG_PING_ACK";var md=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnTransientConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??X9}/${Q9}/${Y9}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnTransientConnection=t.runOnTransientConnection??!0,this.handleMessage=this.handleMessage.bind(this)}async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnTransientConnection:this.runOnTransientConnection}),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();Ke(t,t).catch(o=>{this.log.error("incoming ping from %p failed with error",e.connection.remotePeer,o)}).finally(()=>{let o=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,o)})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=Ht(32),s=await this.components.connectionManager.openConnection(e,t),i,a=()=>{};if(t.signal==null){let c=AbortSignal.timeout(this.timeout);t={...t,signal:c}}try{i=await s.newStream(this.protocol,{...t,runOnTransientConnection:this.runOnTransientConnection}),a=()=>{i?.abort(new m("ping timeout",pn))},t.signal?.addEventListener("abort",a,{once:!0});let c=await Ke([o],i,async d=>ds(d)),l=Date.now()-n;if(c==null)throw new m(`Did not receive a ping ack after ${l}ms`,bp);if(!j(o,c.subarray()))throw new m(`Received wrong ping ack after ${l}ms`,bp);return this.log("ping %p complete in %dms",s.remotePeer,l),l}catch(c){throw this.log.error("error while pinging %p",s.remotePeer,c),i?.abort(c),c}finally{t.signal?.removeEventListener("abort",a),i!=null&&await i.close()}}};function j9(r={}){return e=>new md(e,r)}var dr;(function(r){r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_DATA_CHANNEL="ERR_DATA_CHANNEL",r.ERR_CONNECTION_CLOSED="ERR_CONNECTION_CLOSED",r.ERR_HASH_NOT_SUPPORTED="ERR_HASH_NOT_SUPPORTED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_INVALID_FINGERPRINT="ERR_INVALID_FINGERPRINT",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS"})(dr||(dr={}));var Bo=class extends m{constructor(e,t){super(`WebRTC transport error: ${e}`,t??""),this.name="WebRTCTransportError"}};var xp=class extends Bo{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`,dr.ERR_DATA_CHANNEL),this.name="WebRTC/DataChannelError"}};function Ip(r,e){return new xp(r,e)}var vp=class extends Bo{constructor(e){super(`There was a problem with the Multiaddr which was passed in: ${e}`,dr.ERR_INVALID_MULTIADDR),this.name="WebRTC/InappropriateMultiaddrError"}};function gd(r){return new vp(r)}var Rp=class extends Bo{constructor(e){super(`There was a problem with a provided argument: ${e}`,dr.ERR_INVALID_PARAMETERS),this.name="WebRTC/InvalidArgumentError"}};function lc(r){return new Rp(r)}var Sp=class extends Bo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`,dr.ERR_INVALID_FINGERPRINT),this.name="WebRTC/InvalidFingerprintError"}};function Dp(r,e){return new Sp(r,e)}var _p=class extends Bo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`,dr.ERR_NOT_IMPLEMENTED),this.name="WebRTC/UnimplementedError"}};function Z9(r){return new _p(r)}var Ap=class extends Bo{constructor(e){super(`unsupported hash algorithm: ${e}`,dr.ERR_HASH_NOT_SUPPORTED),this.name="WebRTC/UnsupportedHashAlgorithmError"}};function J9(r){return new Ap(r)}var ey=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,s;n<o;n++)(s||!(n in e))&&(s||(s=Array.prototype.slice.call(e,0,n)),s[n]=e[n]);return r.concat(s||Array.prototype.slice.call(e))},ZI=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var JI=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var eD=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 tD=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var rD=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var nD=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,oD=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,ty=3,sD=[["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",nD]],ry=[["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 oy(r){return r?ny(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new rD:typeof navigator<"u"?ny(navigator.userAgent):cD()}function iD(r){return r!==""&&sD.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var s=o.exec(r);return!!s&&[n,s]},!1)}function ny(r){var e=iD(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new tD;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<ty&&(o=ey(ey([],o,!0),lD(ty-o.length),!0)):o=[];var s=o.join("."),i=aD(r),a=oD.exec(r);return a&&a[1]?new eD(t,s,i,a[1]):new ZI(t,s,i)}function aD(r){for(var e=0,t=ry.length;e<t;e++){var n=ry[e],o=n[0],s=n[1],i=s.exec(r);if(i)return o}return null}function cD(){var r=typeof process<"u"&&process.version;return r?new JI(process.version.slice(1)):null}function lD(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var sy=oy(),uc=sy!=null&&sy.name==="firefox",yd=async function*(){},wd=async r=>{},uD=30*1e3;function iy(r,e,t=uD,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=Z(),s=!1;r.bufferedAmountLowThreshold=0;let i=()=>{s||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",i,{once:!0}),r.addEventListener("bufferedamountlow",()=>{s=!0,r.removeEventListener("close",i),o.resolve()}),await zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}var Rs=class{log;peerConnection;remoteAddr;timeline;metrics;source=yd();sink=wd;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Yt;(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=()=>$e(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.flag!=null&&(s.uint32(8),r.Flag.codec().encode(o.flag,s)),o.message!=null&&(s.uint32(18),s.bytes(o.message)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.flag=r.Flag.codec().decode(o);break;case 2:i.message=o.bytes();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Yt||(Yt={}));var dD=16*1024*1024,fD=30*1e3,hD=5,pD=2,mD=16*1024,gD=5e3,yD=5e3,Tp=class extends Do{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(s){this.log.error("error receiving FIN_ACK",s)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(s=>{this.log.error("error ending stream",s)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=dt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??fD,this.maxBufferedAmount=e.maxBufferedAmount??dD,this.maxMessageSize=(e.maxMessageSize??mD)-hD-pD,this.receiveFinAck=Z(),this.finAckTimeout=e.closeTimeout??gD,this.openTimeout=e.openTimeout??yD,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 m("Unknown datachannel state","ERR_INVALID_STATE")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(s=>{this.log.error("error closing stream after channel closed",s)})},this.channel.onerror=o=>{let s=o.error;this.abort(s)},this.channel.onmessage=async o=>{let{data:s}=o;s===null||s.byteLength===0||this.incomingData.push(new Uint8Array(s,0,s.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Kt(this.incomingData)){let s=n.processIncomingProtobuf(o);s!=null&&n.sourcePush(new ue(s))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await ic(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Ro?new m(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`,"ERR_BUFFER_CLEAR_TIMEOUT"):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new m(`Invalid datachannel state - ${this.channel.readyState}`,"ERR_INVALID_STATE");this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await ic(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Yt.encode({message:n}),s=gr.single(o);await this._sendMessage(s),e.consume(t)}}async sendReset(){await this._sendFlag(Yt.Flag.RESET)}async sendCloseWrite(e){if(await this._sendFlag(Yt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await Ot(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorCode:"ERR_FIN_ACK_NOT_RECEIVED"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Yt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Yt.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===Yt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Yt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Yt.Flag.RESET&&this.reset(),t.flag===Yt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Yt.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=Yt.encode({flag:e}),n=gr.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s",e.toString(),o)}return!1}};function Mi(r){let{channel:e,direction:t}=r;return new Tp({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var ay="/webrtc",Ss=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??ay,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},s=Mi({channel:n,direction:"inbound",onEnd:i=>{o.onEnd(i)},logger:e.logger,...this.dataChannelOptions});o.stream=s,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(i=>i.stream.id!==s.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new kp(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},kp=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??ay,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=Mi({channel:n,direction:"inbound",onEnd:()=>{this.log("incoming channel %s ended with state %s",n.id,n.readyState),this.#e(o,n)},logger:this.logger,...this.dataChannelOptions});this.streams.push(o),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(o)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),iy(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=yd();sink=wd;newStream(){let e=this.peerConnection.createDataChannel("");this.log.trace("opened outgoing datachannel with channel id %s",e.id);let t=Mi({channel:e,direction:"outbound",onEnd:()=>{this.log("outgoing channel %s ended with state %s",e.id,e.readyState),this.#e(t,e)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(t),this.metrics?.increment({outgoing_stream:!0}),t}};var Fi=globalThis.RTCPeerConnection,Ed=globalThis.RTCSessionDescription,cy=globalThis.RTCIceCandidate;var Qt;(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=()=>$e(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{i.lengthDelimited!==!1&&s.fork(),o.type!=null&&(s.uint32(8),r.Type.codec().encode(o.type,s)),o.data!=null&&(s.uint32(18),s.string(o.data)),i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.type=r.Type.codec().decode(o);break;case 2:i.data=o.string();break;default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Qt||(Qt={}));var bd=async(r,e,t)=>{try{let n=Z();for(ED(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal})]);if(o==null)break;if(o.type!==Qt.Type.ICE_CANDIDATE)throw new m("ICE candidate message expected","ERR_NOT_ICE_CANDIDATE");let s=JSON.parse(o.data??"null");if(s===""||s===null){t.log.trace("end-of-candidates received");continue}let i=new cy(s);t.log.trace("%s received new ICE candidate",t.direction,i);try{await r.addIceCandidate(i)}catch(a){t.log.error("%s bad candidate received",t.direction,s,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0)throw n}};function wD(r){return uc?r.iceConnectionState:r.connectionState}function ED(r,e){r[uc?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(wD(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new m("RTCPeerConnection was closed","ERR_CONNECTION_CLOSED_BEFORE_CONNECTED"));break;default:break}}}async function ly({peerConnection:r,signal:e,metrics:t,multiaddr:n,connectionManager:o,transportManager:s,log:i}){let{baseAddr:a}=uy(n);t?.dialerEvents.increment({open:!0}),i.trace("dialing base address: %a",a);let c=a.getPeerId();if(c==null)throw new m("Relay peer was missing","ERR_INVALID_ADDRESS");let l=o.getConnections(ge(c)),d,u=!1;l.length===0?(d=await s.dial(a,{signal:e}),u=!0):d=l[0];try{let f=await d.newStream(xd,{signal:e,runOnTransientConnection:!0}),g=Je(f).pb(Qt);try{let h=r.createDataChannel("init");r.onicecandidate=({candidate:b})=>{let E=JSON.stringify(b?.toJSON()??null);i.trace("initiator sending ICE candidate %s",E),g.write({type:Qt.Type.ICE_CANDIDATE,data:E},{signal:e}).catch(S=>{i.error("error sending ICE candidate",S)})},r.onicecandidateerror=b=>{i.error("initiator ICE candidate error",b)};let p=await r.createOffer().catch(b=>{throw i.error("could not execute createOffer",b),new m("Failed to set createOffer","ERR_SDP_HANDSHAKE_FAILED")});i.trace("initiator send SDP offer %s",p.sdp),await g.write({type:Qt.Type.SDP_OFFER,data:p.sdp},{signal:e}),await r.setLocalDescription(p).catch(b=>{throw i.error("could not execute setLocalDescription",b),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")});let y=await g.read({signal:e});if(y.type!==Qt.Type.SDP_ANSWER)throw new m("Remote should send an SDP answer","ERR_SDP_HANDSHAKE_FAILED");i.trace("initiator receive SDP answer %s",y.data);let w=new Ed({type:"answer",sdp:y.data});return await r.setRemoteDescription(w).catch(b=>{throw i.error("could not execute setRemoteDescription",b),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")}),i.trace("initiator read candidates until connected"),await bd(r,g,{direction:"initiator",signal:e,log:i}),i.trace("initiator connected, closing init channel"),h.close(),i.trace("initiator closing signalling stream"),await g.unwrap().unwrap().close({signal:e}),i.trace("initiator connected to remote address %s",n),{remoteAddress:n}}catch(h){throw r.close(),f.abort(h),h}finally{r.onicecandidate=null,r.onicecandidateerror=null}}finally{if(u)try{await d.close({signal:e})}catch(f){d.abort(f)}}}var vd=class extends xe{peerId;transportManager;shutdownController;constructor(e,t){super(),this.peerId=e.peerId,this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){this.safeDispatchEvent("listening",{})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>Yr.matches(t)).map(t=>t.encapsulate(`/webrtc/p2p/${this.peerId}`))).flat()}async close(){this.shutdownController.abort(),this.safeDispatchEvent("close",{})}};async function dy({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let s=Je(e).pb(Qt);try{r.onicecandidate=({candidate:d})=>{let u=JSON.stringify(d?.toJSON()??null);o.trace("recipient sending ICE candidate %s",u),s.write({type:Qt.Type.ICE_CANDIDATE,data:u},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})};let a=await s.read({signal:t});if(a.type!==Qt.Type.SDP_OFFER)throw new m(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `,"ERR_SDP_HANDSHAKE_FAILED");o.trace("recipient receive SDP offer %s",a.data);let c=new Ed({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(d=>{throw o.error("could not execute setRemoteDescription",d),new m("Failed to set remoteDescription","ERR_SDP_HANDSHAKE_FAILED")});let l=await r.createAnswer().catch(d=>{throw o.error("could not execute createAnswer",d),new m("Failed to create answer","ERR_SDP_HANDSHAKE_FAILED")});o.trace("recipient send SDP answer %s",l.sdp),await s.write({type:Qt.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(d=>{throw o.error("could not execute setLocalDescription",d),new m("Failed to set localDescription","ERR_SDP_HANDSHAKE_FAILED")}),o.trace("recipient read candidates until connected"),await bd(r,s,{direction:"recipient",signal:t,log:o})}catch(a){if(r.connectionState!=="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 i=X(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",i),{remoteAddress:i}}var bD="/webrtc",xD="/p2p-circuit",xd="/webrtc-signaling/0.0.1",vD=30*1e3,Rd=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,ee(1/0,this.shutdownController.signal),e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}isStarted(){return this._started}async start(){await this.components.registrar.handle(xd,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnTransientConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(xd),this._started=!1}createListener(e){return new vd(this.components,{shutdownController:this.shutdownController})}[Symbol.toStringTag]="@libp2p/webrtc";[tn]=!0;filter(e){return e.filter(U4.exactMatch)}async dial(e,t){this.log.trace("dialing address: %a",e);let n=new Fi(this.init.rtcConfiguration),o=new Ss(this.components,{peerConnection:n,dataChannelOptions:this.init.dataChannel}),{remoteAddress:s}=await ly({peerConnection:n,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log}),i=new Rs(this.components,{peerConnection:n,timeline:{open:Date.now()},remoteAddr:s,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(i,{skipProtection:!0,skipEncryption:!0,muxerFactory:o});return this._closeOnShutdown(n,i),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??vD),o=new Fi(this.init.rtcConfiguration),s=new Ss(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:i}=await dy({peerConnection:o,connection:e,stream:t,signal:n,log:this.log}),a=new Rs(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:i,metrics:this.metrics?.listenerEvents});this._closeOnShutdown(o,a),await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:s}),await t.close({signal:n})}catch(i){throw t.abort(i),i}}_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 uy(r){let e=r.toString().split(bD+"/");if(e.length!==2)throw new m("webrtc protocol was not present in multiaddr",dr.ERR_INVALID_MULTIADDR);if(!e[0].includes(xD))throw new m("p2p-circuit protocol was not present in multiaddr",dr.ERR_INVALID_MULTIADDR);let t=X(e[0]),o=X("/"+e[1]).getPeerId();if(o==null)throw new m("destination peer id was missing",dr.ERR_INVALID_MULTIADDR);let s=t.protos().pop();if(s===void 0)throw new m("invalid multiaddr",dr.ERR_INVALID_MULTIADDR);return s.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:ge(o)}}var Kw=Ye(i3(),1);var Ow=Ye(i3(),1);var a3=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Lw(r,e){let t=r.getConfiguration().certificates?.at(0);if(t==null||t.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:Tk(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw Dp("","no fingerprint on local certificate");return n}var Dk=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Tk(r){return r.match(Dk)?.groups?.fingerprint}function kk(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function Ld(r){let t=r.stringTuples().filter(n=>n[0]===Mw).map(n=>n[1])[0];if(t===void 0||t==="")throw gd(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function c3(r){let e=a3.decode(r);return Ow.decode(e)}function Ck(r){let e=c3(Ld(r)),t=l3(e.name),n=e.digest.reduce((s,i)=>s+i.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw Dp(n,r.toString());return[`${t.toUpperCase()} ${o.join(":").toUpperCase()}`,n]}function l3(r){switch(r){case"sha1":return"sha-1";case"sha2-256":return"sha-256";case"sha2-512":return"sha-512";default:throw J9(r)}}function Nk(r,e){let{host:t,port:n}=r.toOptions(),o=kk(r),[s]=Ck(r);return`v=0
23
23
  o=- 0 0 IN ${o} ${t}
24
24
  s=-
25
25
  c=IN ${o} ${t}
@@ -34,24 +34,24 @@ a=fingerprint:${s}
34
34
  a=sctp-port:5000
35
35
  a=max-message-size:16384
36
36
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
37
- `}function Lw(r,e){return{type:"answer",sdp:Ck(r,e)}}function Bw(r,e){if(r.sdp===void 0)throw uc("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
37
+ `}function Bw(r,e){return{type:"answer",sdp:Nk(r,e)}}function Uw(r,e){if(r.sdp===void 0)throw lc("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
38
38
  a=ice-ufrag:`+e+`
39
39
  `).replace(/\na=ice-pwd:[^\n]*\n/,`
40
40
  a=ice-pwd:`+e+`
41
- `),r}var Mw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Fw=r=>[...Array(r)].map(()=>Mw.at(Math.floor(Math.random()*Mw.length))).join("");var Pk=1e4,Lse=Z("webrtc-direct").code,Uw=Z("certhash").code,Ld=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"})})}async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw j9("WebRTCTransport.createListener")}filter(e){return e.filter(B4.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[tn]=!0;async _connect(e,t){let n=new AbortController,o=n.signal,s=e.getPeerId();if(s===null)throw md("we need to have the remote's PeerId");let i=ge(s),a=u3(Od(e)),c=await Vi.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:d3(a.name)}),l=new Vi({certificates:[c]});try{let d=new Promise((R,k)=>{let O=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let L=`Data channel was never opened: state: ${O.readyState}`;this.log.error(L),this.metrics?.dialerEvents.increment({open_error:!0}),k(Tp("data",L))},Pk);O.onopen=L=>{clearTimeout(N),R(O)},O.onerror=L=>{clearTimeout(N);let Y=`Error opening a data channel for handshaking: ${L.target?.toString()??"not specified"}`;this.log.error(Y),this.metrics?.dialerEvents.increment({unknown_error:!0}),k(Tp("data",Y))}}),u="libp2p+webrtc+v1/"+Fw(32),f=await l.createOffer(),g=Bw(f,u);await l.setLocalDescription(g);let h=Lw(e,u);await l.setRemoteDescription(h);let p=await d,y=this.components.peerId,w=this.generateNoisePrologue(l,a.code,e),b=Ai({prologueBytes:w})(this.components),E=Fi({channel:p,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),S={...E,sink:E.sink.bind(E),source:async function*(){for await(let R of E.source)for(let k of R)yield k}()},_=new Ss(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),A=dc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(A,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":_.close().catch(R=>{this.log.error("error closing connection",R)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let D=new _s(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(y,S,i),await t.upgrader.upgradeOutbound(_,{skipProtection:!0,skipEncryption:!0,muxerFactory:D})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw uc("no local certificate");let o=Ow(e,{log:this.log});if(o==null)throw uc("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=B(s,"hex"),a=Vw.encode(i,t),c=l3.decode(Od(n)),l=B("libp2p-webrtc-noise:");return xe([l,a,c])}};function Kw(r){return e=>new Ld(e,r)}function $w(r){return e=>new vd(e,r)}var Hw=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",s)}function o(){n(),e()}function s(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",s)})};var qw=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Hw(r)}catch(s){if(s.message==="socket closed")break;throw s}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,s)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{r.close()})})});var Yw=Ye(Gw(),1);function zw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Qw=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(s)},l=d=>{a(()=>{i(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let s=new Yw.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=B(u.data)),zw(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&i(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield zw(i)?new Uint8Array(i):i}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var Xw=(r,e)=>{e=e??{};let t=Qw(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:qw(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var jw=WebSocket;var Lk={"http:":"ws:","https:":"wss:"},Zw="ws:",Jw=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Zw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Zw,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${s}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(Lk))t.protocol===n&&(t.protocol=o);return t};function eE(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Jw(r,t),o=new jw(n.toString(),e.websocket);return Xw(o,e)}function tE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Ti.matches(t)||ws.matches(t)})}function rE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return ws.matches(t)})}function nE(){throw new Error("WebSocket Servers can not be created in the browser!")}function oE(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o={log:n,async sink(s){try{await r.sink(async function*(){for await(let i of s)i instanceof Uint8Array?yield i:yield i.subarray()}())}catch(i){i.type!=="aborted"&&n.error(i)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();if(s.signal==null){let c=AbortSignal.timeout(500);s={...s,signal:c}}let a=()=>{let{host:c,port:l}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",c,l,Date.now()-i),this.abort(new m("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal?.addEventListener("abort",a);try{await r.close()}catch(c){n.error("error closing WebSocket gracefully",c),this.abort(c)}finally{s.signal?.removeEventListener("abort",a),o.timeline.close=Date.now()}},abort(s){let{host:i,port:a}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",i,a,s),r.destroy(),o.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{o.timeline.close==null&&(o.timeline.close=Date.now())},{once:!0}),o}var p3=class{log;init;logger;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.init=t}[Symbol.toStringTag]="@libp2p/websockets";[tn]=!0;async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=oE(n,e,{logger:this.logger});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){if(t?.signal?.aborted===!0)throw new jt;let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=j(),s=eE(pl(e),this.init);if(s.socket.addEventListener("error",()=>{let c=new m(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",c),o.reject(c)}),t.signal==null)return await Promise.race([s.connected(),o.promise]),this.log("connected %s",e),s;let i,a=new Promise((c,l)=>{if(i=()=>{l(new jt),s.close().catch(d=>{this.log.error("error closing raw socket",d)})},t?.signal?.aborted===!0){i();return}t?.signal?.addEventListener("abort",i)});try{await Promise.race([a,o.promise,s.connected()])}finally{i!=null&&t?.signal?.removeEventListener("abort",i)}return this.log("connected %s",e),s}createListener(e){return nE({logger:this.logger},{...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):L1||B1?rE(e):tE(e)}};function sE(r={}){return e=>new p3(e,r)}async function m3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=r.writable.getWriter(),c=r.readable.getReader();await a.ready;function l(){let h=n.findIndex(p=>p===g);h!==-1&&(n.splice(h,1),g.timeline.close=Date.now(),o?.(g))}let d=!1,u=!1;(async function(){let h=await a.closed.catch(p=>p);if(h!=null){let p=h.message;p.includes("aborted by the remote server")||p.includes("STOP_SENDING")||i.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}d=!0,d&&u&&l()})().catch(()=>{i.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await c.closed.catch(p=>p);h!=null&&i.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),u=!0,d&&u&&l()}().catch(()=>{i.error("WebTransport failed to cleanup closed stream")});let f=!1,g={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(h){d||(a.abort(h).catch(p=>{i.error("could not abort stream",p)}),d=!0),u=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),l()},async close(h){this.status="closing",await Promise.all([g.closeRead(h),g.closeWrite(h)]),l(),this.status="closed",this.timeline.close=Date.now()},async closeRead(h){if(!u){this.readStatus="closing";try{await c.cancel()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(d=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",u=!0}d&&l()},async closeWrite(h){if(!d){d=!0,this.writeStatus="closing";try{await a.close()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(u=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}u&&l()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let h=await c.read();if(h.done){u=!0,d&&l();return}yield new ue(h.value)}}(),sink:async function(h){if(f)throw new Error("sink already called on stream");f=!0;try{this.writeStatus="writing";for await(let p of h)if(p instanceof Uint8Array)await a.write(p);else for(let y of p)await a.write(y);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await g.closeWrite()}},log:i};return g}function g3(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function iE(r,e){return e.filter(n=>!!r.find(o=>J(n,o))).length===e.length}var Fk=Object.values(gr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Vk(r){return pr.decode(Fk.decode(r))}function aE(r){if(!qc.matches(r))throw new m("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===Z("certhash").code).map(([i,a])=>Vk(a??"")),n=e.filter(([i,a])=>i===Z("p2p").code).map(([i,a])=>ge(a??""))[0],o=r.toOptions(),s=o.host;return o.family===6&&s?.includes(":")&&(s=`[${s}]`),{url:`https://${s}:${o.port}`,certhashes:t,remotePeer:n}}var y3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[tn]=!0;async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:o,certhashes:s,remotePeer:i}=aE(e);if(i==null)throw new Error("Need a target peerid");if(s.length===0)throw new Error("Expected multiaddr to contain certhashes");let a,c,l=()=>{},d=!1,u=!1,f=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let g=new WebTransport(`${o}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:s.map(h=>({algorithm:"sha-256",value:h.digest}))});if(l=h=>{if(!d)try{this.metrics?.dialerEvents.increment({[h]:!0}),g.close()}catch(p){this.log.error("error closing wt session",p)}finally{c!=null&&(c.timeline.close=Date.now()),d=!0}},a=()=>{l(u?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),await Promise.race([g.closed,g.ready]),u=!0,this.metrics?.dialerEvents.increment({ready:!0}),g.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(g,n,i,s))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("Closing webtransport"),l("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...g3()},f=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(g),skipProtection:!0})}catch(g){throw this.log.error("caught wt session err",g),l(f?"upgrade_error":u?"noise_error":"ready_error"),g}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,o){let s=await e.createBidirectionalStream(),i=s.writable.getWriter(),a=s.readable.getReader();await i.ready;let c={source:async function*(){for(;;){let u=await a.read();if(u.value!=null&&(yield u.value),u.done)break}}(),sink:async function(u){for await(let f of u)f instanceof Uint8Array?await i.write(f):await i.write(f.subarray())}},l=Ai()(this.components),{remoteExtensions:d}=await l.secureOutbound(t,c,n);if(i.close().catch(u=>{this.log.error(`Failed to close authentication stream writer: ${u.message}`)}),a.cancel().catch(u=>{this.log.error(`Failed to close authentication stream reader: ${u.message}`)}),!iE(d?.webtransportCerthashes??[],o.map(u=>u.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config,o=this;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];return async function(){let c=e.incomingBidirectionalStreams.getReader();for(;;){let{done:l,value:d}=await c.read();if(l)break;if(i.length>=n.maxInboundStreams)d.writable.close().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await m3(d,String(t++),"inbound",i,s?.onStreamEnd,o.components.logger);i.push(u),s?.onIncomingStream?.(u)}}}().catch(()=>{this.log.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async c=>{let l=await e.createBidirectionalStream(),d=await m3(l,String(t++),s?.direction??"outbound",i,s?.onStreamEnd,o.components.logger);return i.push(d),d},close:async c=>{this.log("Closing webtransport muxer"),await Promise.all(i.map(async l=>l.close(c)))},abort:c=>{this.log("Aborting webtransport muxer with err:",c);for(let l of i)l.abort(c)},...g3()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(qc.exactMatch)}};function cE(r={}){return e=>new y3(e,r)}var w3=Ye(Su(),1);function lE(r,e){let t=e.map((n,o)=>({record:cn(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===Gt.ValidityType.EOL&&o.record.validityType===Gt.ValidityType.EOL){let a=w3.default.fromString(n.record.validity).toDate(),c=w3.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 Md="1.3.2",Fd="libp2p";var dE="4.1.0-7cd012a",fE="helia";var hE={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Vd(r={}){return{peerId:r.peerId,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[j2({discoverRelays:1}),$w(),Kw(),cE(),sE()],connectionEncryption:[Ai()],streamMuxers:[tg(),G9()],peerDiscovery:[yg(hE)],services:{autoNAT:sg(),dcutr:Ng(),delegatedRouting:()=>B5("https://delegated-ipfs.dev"),dht:E9({clientMode:!0,validators:{ipns:Ku},selectors:{ipns:lE}}),identify:Wg({agentVersion:`${fE}/${dE} ${Fd}/${Md} UserAgent=${globalThis.navigator.userAgent}`}),keychain:dd(r.keychain),ping:X9()}}}var It={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var Xi;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=re((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>te(i,o.codec()),o.decode=i=>ee(i,o.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=re((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),$d.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=$d.codec().decode(i,i.uint32());break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>te(i,o.codec()),o.decode=i=>ee(i,o.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=re((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),Kd.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.addresses.push(Kd.codec().decode(o,o.uint32()));break;case 2:i.protocols.push(o.string());break;case 4:i.publicKey=o.bytes();break;case 5:i.peerRecordEnvelope=o.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(o,o.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(o,o.uint32());i.tags.set(l.key,l.value);break}default:o.skipType(c&7);break}}return i})),n),r.encode=o=>te(o,r.codec()),r.decode=o=>ee(o,r.codec())})(Xi||(Xi={}));var Kd;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={multiaddr:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.multiaddr=t.bytes();break;case 2:o.isCertified=t.bool();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Kd||(Kd={}));var $d;(function(r){let e;r.codec=()=>(e==null&&(e=re((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)=>{let o={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.value=t.uint32();break;case 2:o.expiry=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})($d||($d={}));function ji(r,e){let t=Xi.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=u8({...r,publicKey:r.publicKey}));let n=new Map,o=BigInt(Date.now());for(let[s,i]of t.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:s,isCertified:i})=>({multiaddr:X(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var E3="/peers/";function Zi(r){if(!Ns(r)||r.type==null)throw new m("Invalid PeerId",It.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new Oe(`${E3}${e}`)}async function pE(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=X(o.multiaddr)),!jn(o.multiaddr))throw new m("Multiaddr was invalid",It.ERR_INVALID_PARAMETERS);if(!await e(r,o.multiaddr))continue;let s=o.isCertified??!1,i=o.multiaddr.toString(),a=n.get(i);a!=null?o.isCertified=a.isCertified||s:n.set(i,{multiaddr:o.multiaddr,isCertified:s})}return[...n.values()].sort((o,s)=>o.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:o,multiaddr:s})=>({isCertified:o,multiaddr:s.bytes}))}async function qd(r,e,t,n){if(e==null)throw new m("Invalid PeerData",It.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!J(e.publicKey,r.publicKey))throw new m("publicKey bytes do not match peer id publicKey bytes",It.ERR_INVALID_PARAMETERS);let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new m("peer id did not match existing peer id",It.ERR_INVALID_PARAMETERS);let s=o?.addresses??[],i=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)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Hd(u,{validate:mE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Hd(u,{validate:gE,map:yE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[f,g]of u)g==null?a.delete(f):a.set(f,g);a=Hd([...a.entries()],{validate:mE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),f=new Map(c);for(let[g,h]of u)h==null?f.delete(g):f.set(g,h);c=Hd([...f.entries()],{validate:gE,map:yE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d={addresses:await pE(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((u,f)=>u.localeCompare(f)),metadata:a,tags:c,publicKey:o?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function Hd(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(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function mE(r,e){if(typeof r!="string")throw new m("Metadata key must be a string",It.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new m("Metadata value must be a Uint8Array",It.ERR_INVALID_PARAMETERS)}function gE(r,e){if(typeof r!="string")throw new m("Tag name must be a string",It.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new m("Tag value must be an integer",It.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new m("Tag value must be between 0-100",It.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new m("Tag ttl must be an integer",It.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new m("Tag ttl must be between greater than 0",It.ERR_INVALID_PARAMETERS)}}function yE(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 Wd(r,e,t){let n=r.toString().split("/")[2],o=lt.decode(n),s=je(o),i=t.get(s);if(i!=null)return i;let a=ji(s,e);return t.set(s,a),a}function Kk(r,e){return r==null?{}:{prefix:E3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Wd(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Wd(n.key,n.value,e),Wd(o.key,o.value,e)))}}var Gd=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=qa({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(Zi(e))}async delete(e){if(this.peerId.equals(e))throw new m("Cannot delete self peer",It.ERR_INVALID_PARAMETERS);await this.datastore.delete(Zi(e))}async load(e){let t=await this.datastore.get(Zi(e));return ji(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await qd(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,s,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await qd(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await qd(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new it;for await(let{key:n,value:o}of this.datastore.query(Kk(e??{},t))){let s=Wd(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(Zi(e)),n=ji(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,o){let s=Xi.encode(t);return n!=null&&J(s,n)?{peer:ji(e,s),previous:o,updated:!1}:(await this.datastore.put(Zi(e),s),{peer:ji(e,s),previous:o,updated:!0})}};var zd=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 Gd(e,t)}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 eo(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 Qr.openAndCertify(e,dr.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let o=dr.createFromProtobuf(n.payload),s;try{s=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(s?.peerRecordEnvelope!=null){let i=await Qr.createFromProtobuf(s.peerRecordEnvelope),a=dr.createFromProtobuf(i.payload);if(a.seqNumber>=o.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,o.seqNumber),!1}return await this.patch(o.peerId,{peerRecordEnvelope:e,addresses:o.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!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 wE(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var $k=r=>r;function b3(r,e){let t=r.getPeerId();return t!=null&&ge(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var Yd=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??$k,this._updatePeerStoreAddresses=wE(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>X(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>X(e))}addObservedAddr(e){e=b3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=b3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=b3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>X(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var x3=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=>_c(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")}},Hk=["metrics","connectionProtector","dns"],qk=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function EE(r={}){let e=new x3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!qk.includes(o)){let i=e.components[o];if(i==null&&!Hk.includes(o))throw new m(`${o} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function bE(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!Ht(`${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 v3(r){try{let{address:e}=r.nodeAddress();return!!Ht(e)}catch{return!0}}function Wk(r,e){let t=v3(r.multiaddr),n=v3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Gk(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function zk(r,e){let t=Ho.exactMatch(r.multiaddr),n=Ho.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Ji(r,e){let t=Wk(r,e);if(t!==0)return t;let n=zk(r,e);return n!==0?n:Gk(r,e)}var Yk=32,{code:Qk}=Z("dnsaddr"),Ds=async function(e,t={}){let n=t.maxRecursiveDepth??Yk;if(n===0)throw new m("Max recursive depth reached","ERR_MAX_RECURSIVE_DEPTH_REACHED");let[,o]=e.stringTuples().find(([l])=>l===Qk)??[],i=await(t?.dns??ju()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[ur.TXT]}),a=e.getPeerId(),c=[];for(let l of i.Answer){let d=l.data.split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=X(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(g=>g.toString()))}else c.push(u.toString())}return c};var Wn;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(Wn||(Wn={}));var G;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(G||(G={}));var Xk={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ds},addressSorter:Ji},transportManager:{faultTolerance:Gn.FATAL_ALL}};async function xE(r){let e=Ui(Xk,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new m(Wn.ERR_PROTECTOR_REQUIRED,G.ERR_PROTECTOR_REQUIRED);if(!(await ht(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new m("Private key doesn't match peer id",G.ERR_INVALID_KEY);return e}function Qd(r){if(Ns(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:ge(t),r.forEach(n=>{if(!jn(n))throw new m("Invalid Multiaddr",G.ERR_INVALID_MULTIADDR);let o=n.getPeerId();if(o==null){if(e!=null)throw new m("Multiaddrs must all have the same peer id or have no peer id",G.ERR_INVALID_PARAMETERS)}else{let s=ge(o);if(e==null||!e.equals(s))throw new m("Multiaddrs must all have the same peer id or have no peer id",G.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var Xd="last-dial-failure";var jd=5,Zd=100,Jd=50,vE=1e3*60*7;var Ts={minConnections:jd,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:vE,autoDialDiscoveredPeersDebounce:10},ef=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??Ts.minConnections,this.autoDialPriority=t.autoDialPriority??Ts.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??Ts.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??Ts.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??Ts.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??Ts.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new Vt({concurrency:t.autoDialConcurrency??Ts.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",o=>{this.log.error("error during auto-dial",o.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(o=>{this.log.error(o)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(o=>{this.log.error(o)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new Ze(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),o=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),s=o.sort(()=>Math.random()>.5?1:-1),i=new it;for(let l of s)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((d,u)=>d+u.value,0));let c=s.sort((l,d)=>{let u=i.get(l.id)??0,f=i.get(d.id)??0;return u>f?-1:u<f?1:0}).filter(l=>{let d=l.metadata.get(Xd);if(d==null)return!0;let u=parseInt(P(d));return isNaN(u)?!0:Date.now()-u>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,o.length);for(let l of c)this.queue.add(async()=>{let d=this.connectionManager.getConnectionsMap().size;if(d>=this.minConnections){this.log("got enough connections now %d/%d",d,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(d=>{this.log.error("could not connect to peerStore stored peer",d)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var RE={maxConnections:Zd,allow:[]},tf=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??RE.maxConnections,this.allow=t.allow??RE.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=Math.max(t-this.maxConnections,0);if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;this.log("max connections limit exceeded %d/%d, pruning %d connection(s)",t,this.maxConnections,n);let o=new it;for(let a of e){let c=a.remotePeer;if(!o.has(c)){o.set(c,0);try{let l=await this.peerStore.get(c);o.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let s=e.sort((a,c)=>{let l=o.get(a.remotePeer)??0,d=o.get(c.remotePeer)??0;if(l>d)return 1;if(l<d)return-1;let u=a.timeline.open,f=c.timeline.open;return u<f?1:u>f?-1:0}),i=[];for(let a of s)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===n)break;await Promise.all(i.map(async a=>{try{await a.close()}catch(c){this.log.error(c)}})),this.events.safeDispatchEvent("connection:prune",{detail:i})}};async function SE(r,e){let t=!1;for(let o of $s.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var rf={addressSorter:Ji,maxParallelDials:Jd,maxPeerAddrsToDial:25,dialTimeout:3e4,resolvers:{dnsaddr:Ds}},nf=class{queue;components;addressSorter;maxPeerAddrsToDial;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??rf.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??rf.maxPeerAddrsToDial,this.dialTimeout=t.dialTimeout??rf.dialTimeout,this.connections=t.connections??new it,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,ie(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))$s.set(n,o);this.queue=new mn({concurrency:t.maxParallelDials??rf.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController,ie(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Qd(e),s=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(s!=null)return this.log("already connected to %a",s.remoteAddr),s;let i=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(i!=null){this.log("joining existing dial target for %p",n);for(let a of o)i.options.multiaddrs.add(a.toString());return i.join(t)}return this.log("creating dial target for %p",n,o.map(a=>a.toString())),this.queue.add(async a=>{let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new m("Peer had more than maxPeerAddrsToDial",G.ERR_TOO_MANY_ADDRESSES);d++;try{let g=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",f.multiaddr),g}catch(g){if(this.log.error("dial failed to %a",f.multiaddr,g),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[Xd]:B(Date.now().toString())}})}catch(h){this.log.error("could not update last dial failure key for %p",n,h)}if(c.aborted)throw new m(g.message,pn);u.push(g)}}throw u.length===1?u[0]:new Sc(u,"All multiaddr dials failed",G.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal})}createDialAbortController(e){let t=ot([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return ie(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:X(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new m("Tried to dial self",G.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new m("The dial request is blocked by gater.allowDialPeer",G.ERR_PEER_DIAL_INTERCEPTED);if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.code!==G.ERR_NOT_FOUND)throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.code!==G.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await SE(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(g=>({multiaddr:g,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.transportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),g=a.get(f);if(g!=null){g.isCertified=g.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new m("The dial request has no valid addresses",G.ERR_NO_VALID_ADDRESSES);let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=l.sort(this.addressSorter);if(d.length===0)throw new m("The connection gater denied all addresses in the dial request",G.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}};var tC=50,ks={minConnections:jd,maxConnections:Zd,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100},of=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??ks.maxConnections;let n=t.minConnections??ks.minConnections;if(this.maxConnections<n)throw new m("Connection Manager maxConnections must be greater than minConnections",G.ERR_INVALID_PARAMETERS);this.connections=new it,this.started=!1,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.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(o=>X(o)),this.deny=(t.deny??[]).map(o=>X(o)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??ks.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Mi({points:t.inboundConnectionThreshold??ks.inboundConnectionThreshold,duration:1}),this.autoDial=new ef({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??ks.autoDialConcurrency,autoDialPriority:t.autoDialPriority??ks.autoDialPriority,maxQueueLength:t.autoDialMaxQueueLength??ks.autoDialMaxQueueLength}),this.connectionPruner=new tf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new nf(e,{addressSorter:t.addressSorter??Ji,maxParallelDials:t.maxParallelDials??Jd,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??3e4,resolvers:t.resolvers??{dnsaddr:Ds},connections:this.connections})}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;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 s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??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 s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(q3)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,o=this.connections.get(n),s=!1;o!=null?o.push(t):(s=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,o=this.connections.get(n);o!=null&&o.length>1?(o=o.filter(s=>s.id!==t.id),this.connections.set(n,o)):o!=null&&(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.isStarted())throw new m("Not started",G.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=Qd(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??tC}),s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)a.id===o.id&&(i=!0);return i||s.push(o),o}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(s){o.abort(s)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>X(n))}))}};var sf=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}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 m("No content routers available",G.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new Ze;for await(let s of ft(...n.routers.map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available",G.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new m(Wn.NOT_STARTED_YET,G.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new m(Wn.NOT_STARTED_YET,G.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var af=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??[]}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available",G.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new m("Should not try to find self",G.ERR_FIND_SELF);let n=this,o=ft(...this.routers.map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),s;throw new m(Wn.NOT_FOUND,G.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available",G.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new Ze;for await(let s of Kn(async function*(){let i=ft(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)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}}()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}};var D3=32,T3=64,cf=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)}getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new m(`No handler registered for protocol ${e}`,G.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new m(`Handler already registered for protocol ${e}`,G.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let o=Ui.bind({ignoreUndefined:!0})({maxInboundStreams:D3,maxOutboundStreams:T3},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 m("invalid topology",G.ERR_INVALID_PARAMETERS);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 s=this.topologies.get(o);if(s!=null)for(let i of s.values())i.onDisconnect?.(t)}}).catch(n=>{n.code!==G.ERR_NOT_FOUND&&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(s=>!t.protocols.includes(s));for(let s of o){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())a.onDisconnect?.(t.id)}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let s of t){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.onConnect?.(o,n)}}};var lf=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=dl({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Gn.FATAL_ALL}add(e){let t=e[Symbol.toStringTag];if(t==null)throw new m("Transport must have a valid tag",G.ERR_INVALID_KEY);if(this.transports.has(t))throw new m(`There is already a transport with the tag ${t}`,G.ERR_DUPLICATE_TRANSPORT);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.transportForMultiaddr(e);if(n==null)throw new m(`No transport available for address ${String(e)}`,G.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(o){throw o.code==null&&(o.code=G.ERR_TRANSPORT_DIAL_FAILED),o}}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()}transportForMultiaddr(e){for(let t of this.transports.values())if(t.filter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new m("Not started",G.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let s=o.filter(e),i=[];for(let l of s){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(g=>g===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),i.push(d.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==Gn.NO_FATAL)throw new m(`Transport (${n}) could not listen on any available address`,G.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===Gn.FATAL_ALL)throw new m(n,G.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Dt="/multistream/1.0.0";var rC=B(`
42
- `);async function Cs(r,e,t){await r.write(e,t)}async function _E(r,e,t){await r.writeV(e,t)}async function nC(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==rC[0])throw e.log.error("Invalid mss message - missing newline",t),new m("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return t.sublist(0,-1)}async function Mo(r,e){let t=await nC(r,e);return P(t.subarray())}async function bc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return oC(r,e[0],t);let n=wr(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"]',Dt,o);let s=B(`${Dt}
41
+ `),r}var Fw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Vw=r=>[...Array(r)].map(()=>Fw.at(Math.floor(Math.random()*Fw.length))).join("");var Ok=1e4,Fse=J("webrtc-direct").code,Mw=J("certhash").code,Bd=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"})})}async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw Z9("WebRTCTransport.createListener")}filter(e){return e.filter(L4.exactMatch)}[Symbol.toStringTag]="@libp2p/webrtc-direct";[tn]=!0;async _connect(e,t){let n=new AbortController,o=n.signal,s=e.getPeerId();if(s===null)throw gd("we need to have the remote's PeerId");let i=ge(s),a=c3(Ld(e)),c=await Fi.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:l3(a.name)}),l=new Fi({certificates:[c]});try{let d=new Promise((R,k)=>{let O=l.createDataChannel("",{negotiated:!0,id:0}),N=setTimeout(()=>{let L=`Data channel was never opened: state: ${O.readyState}`;this.log.error(L),this.metrics?.dialerEvents.increment({open_error:!0}),k(Ip("data",L))},Ok);O.onopen=L=>{clearTimeout(N),R(O)},O.onerror=L=>{clearTimeout(N);let Y=`Error opening a data channel for handshaking: ${L.target?.toString()??"not specified"}`;this.log.error(Y),this.metrics?.dialerEvents.increment({unknown_error:!0}),k(Ip("data",Y))}}),u="libp2p+webrtc+v1/"+Vw(32),f=await l.createOffer(),g=Uw(f,u);await l.setLocalDescription(g);let h=Bw(e,u);await l.setRemoteDescription(h);let p=await d,y=this.components.peerId,w=this.generateNoisePrologue(l,a.code,e),b=_i({prologueBytes:w})(this.components),E=Mi({channel:p,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),S={...E,sink:E.sink.bind(E),source:async function*(){for await(let R of E.source)for(let k of R)yield k}()},_=new Rs(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),A=uc?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(A,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":_.close().catch(R=>{this.log.error("error closing connection",R)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let D=new Ss(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await b.secureInbound(y,S,i),await t.upgrader.upgradeOutbound(_,{skipProtection:!0,skipEncryption:!0,muxerFactory:D})}catch(d){throw l.close(),d}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw lc("no local certificate");let o=Lw(e,{log:this.log});if(o==null)throw lc("no local fingerprint found");let s=o.trim().toLowerCase().replaceAll(":",""),i=B(s,"hex"),a=Kw.encode(i,t),c=a3.decode(Ld(n)),l=B("libp2p-webrtc-noise:");return ve([l,a,c])}};function $w(r){return e=>new Bd(e,r)}function Hw(r){return e=>new Rd(e,r)}var qw=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",s)}function o(){n(),e()}function s(i){n(),t(i.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",s)})};var Ww=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await qw(r)}catch(s){if(s.message==="socket closed")break;throw s}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,s)=>{r.addEventListener("close",i=>{if(i.wasClean||i.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:i});s(a)}}),setTimeout(()=>{r.close()})})});var Qw=Ye(zw(),1);function Yw(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Xw=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((s,i)=>{if(n){s();return}if(o!=null){i(o);return}let a=d=>{r.removeEventListener("open",c),r.removeEventListener("error",l),d()},c=()=>{a(s)},l=d=>{a(()=>{i(d.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let s=new Qw.EventIterator(({push:i,stop:a,fail:c})=>{let l=u=>{let f=null;typeof u.data=="string"&&(f=B(u.data)),Yw(u.data)&&(f=new Uint8Array(u.data)),u.data instanceof Uint8Array&&(f=u.data),f!=null&&i(f)},d=u=>{c(u.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",d),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",d),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let i of s)yield Yw(i)?new Uint8Array(i):i}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",s=>{n||(o=s.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var jw=(r,e)=>{e=e??{};let t=Xw(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let i=new URL(r.url);n=i.hostname,o=parseInt(i.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:Ww(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(i=>{r.addEventListener("close",()=>{i()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Zw=WebSocket;var Bk={"http:":"ws:","https:":"wss:"},Jw="ws:",eE=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Jw}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Jw,o=e.host,s=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${s}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(Bk))t.protocol===n&&(t.protocol=o);return t};function tE(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=eE(r,t),o=new Zw(n.toString(),e.websocket);return jw(o,e)}function rE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return Di.matches(t)||ys.matches(t)})}function nE(r){return r.filter(e=>{if(e.protoCodes().includes(290))return!1;let t=e.decapsulateCode(421);return ys.matches(t)})}function oE(){throw new Error("WebSocket Servers can not be created in the browser!")}function sE(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o={log:n,async sink(s){try{await r.sink(async function*(){for await(let i of s)i instanceof Uint8Array?yield i:yield i.subarray()}())}catch(i){i.type!=="aborted"&&n.error(i)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(s={}){let i=Date.now();if(s.signal==null){let c=AbortSignal.timeout(500);s={...s,signal:c}}let a=()=>{let{host:c,port:l}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",c,l,Date.now()-i),this.abort(new m("Socket close timeout","ERR_SOCKET_CLOSE_TIMEOUT"))};s.signal?.addEventListener("abort",a);try{await r.close()}catch(c){n.error("error closing WebSocket gracefully",c),this.abort(c)}finally{s.signal?.removeEventListener("abort",a),o.timeline.close=Date.now()}},abort(s){let{host:i,port:a}=o.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",i,a,s),r.destroy(),o.timeline.close=Date.now()}};return r.socket.addEventListener("close",()=>{o.timeline.close==null&&(o.timeline.close=Date.now())},{once:!0}),o}var f3=class{log;init;logger;constructor(e,t){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.init=t}[Symbol.toStringTag]="@libp2p/websockets";[tn]=!0;async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=sE(n,e,{logger:this.logger});this.log("new outbound connection %s",o.remoteAddr);let s=await t.upgrader.upgradeOutbound(o);return this.log("outbound connection %s upgraded",o.remoteAddr),s}async _connect(e,t){if(t?.signal?.aborted===!0)throw new Cr;let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=Z(),s=tE(pl(e),this.init);if(s.socket.addEventListener("error",()=>{let c=new m(`Could not connect to ${e.toString()}`,"ERR_CONNECTION_FAILED");this.log.error("connection error:",c),o.reject(c)}),t.signal==null)return await Promise.race([s.connected(),o.promise]),this.log("connected %s",e),s;let i,a=new Promise((c,l)=>{if(i=()=>{l(new Cr),s.close().catch(d=>{this.log.error("error closing raw socket",d)})},t?.signal?.aborted===!0){i();return}t?.signal?.addEventListener("abort",i)});try{await Promise.race([a,o.promise,s.connected()])}finally{i!=null&&t?.signal?.removeEventListener("abort",i)}return this.log("connected %s",e),s}createListener(e){return oE({logger:this.logger},{...this.init,...e})}filter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):B1||U1?nE(e):rE(e)}};function iE(r={}){return e=>new f3(e,r)}async function h3(r,e,t,n,o,s){let i=s.forComponent(`libp2p:webtransport:stream:${t}:${e}`),a=r.writable.getWriter(),c=r.readable.getReader();await a.ready;function l(){let h=n.findIndex(p=>p===g);h!==-1&&(n.splice(h,1),g.timeline.close=Date.now(),o?.(g))}let d=!1,u=!1;(async function(){let h=await a.closed.catch(p=>p);if(h!=null){let p=h.message;p.includes("aborted by the remote server")||p.includes("STOP_SENDING")||i.error(`WebTransport writer closed unexpectedly: streamId=${e} err=${h.message}`)}d=!0,d&&u&&l()})().catch(()=>{i.error("WebTransport failed to cleanup closed stream")}),async function(){let h=await c.closed.catch(p=>p);h!=null&&i.error(`WebTransport reader closed unexpectedly: streamId=${e} err=${h.message}`),u=!0,d&&u&&l()}().catch(()=>{i.error("WebTransport failed to cleanup closed stream")});let f=!1,g={id:e,status:"open",writeStatus:"ready",readStatus:"ready",abort(h){d||(a.abort(h).catch(p=>{i.error("could not abort stream",p)}),d=!0),u=!0,this.status="aborted",this.writeStatus="closed",this.readStatus="closed",this.timeline.reset=this.timeline.close=this.timeline.closeRead=this.timeline.closeWrite=Date.now(),l()},async close(h){this.status="closing",await Promise.all([g.closeRead(h),g.closeWrite(h)]),l(),this.status="closed",this.timeline.close=Date.now()},async closeRead(h){if(!u){this.readStatus="closing";try{await c.cancel()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(d=!0)}this.timeline.closeRead=Date.now(),this.readStatus="closed",u=!0}d&&l()},async closeWrite(h){if(!d){d=!0,this.writeStatus="closing";try{await a.close()}catch(p){p.toString().includes("RESET_STREAM")===!0&&(u=!0)}this.timeline.closeWrite=Date.now(),this.writeStatus="closed"}u&&l()},direction:t,timeline:{open:Date.now()},metadata:{},source:async function*(){for(;;){let h=await c.read();if(h.done){u=!0,d&&l();return}yield new ue(h.value)}}(),sink:async function(h){if(f)throw new Error("sink already called on stream");f=!0;try{this.writeStatus="writing";for await(let p of h)if(p instanceof Uint8Array)await a.write(p);else for(let y of p)await a.write(y);this.writeStatus="done"}finally{this.timeline.closeWrite=Date.now(),this.writeStatus="closed",await g.closeWrite()}},log:i};return g}function p3(){return{source:{[Symbol.asyncIterator](){return{async next(){return new Promise(()=>{})}}}},sink:async r=>new Promise(()=>{})}}function aE(r,e){return e.filter(n=>!!r.find(o=>j(n,o))).length===e.length}var Vk=Object.values(pr).map(r=>r.decoder).reduce((r,e)=>r.or(e));function Kk(r){return fr.decode(Vk.decode(r))}function cE(r){if(!qc.matches(r))throw new m("Invalid multiaddr, was not a WebTransport address","ERR_INVALID_MULTIADDR");let e=r.stringTuples(),t=e.filter(([i,a])=>i===J("certhash").code).map(([i,a])=>Kk(a??"")),n=e.filter(([i,a])=>i===J("p2p").code).map(([i,a])=>ge(a??""))[0],o=r.toOptions(),s=o.host;return o.family===6&&s?.includes(":")&&(s=`[${s}]`),{url:`https://${s}:${o.port}`,certhashes:t,remotePeer:n}}var m3=class{log;components;config;metrics;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webtransport"),this.components=e,this.config={maxInboundStreams:t.maxInboundStreams??1e3},e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webtransport_dialer_events_total",{label:"event",help:"Total count of WebTransport dialer events by type"})})}[Symbol.toStringTag]="@libp2p/webtransport";[tn]=!0;async dial(e,t){t?.signal?.throwIfAborted(),this.log("dialing %s",e);let n=this.components.peerId;if(n===void 0)throw new Error("Need a local peerid");t=t??{};let{url:o,certhashes:s,remotePeer:i}=cE(e);if(i==null)throw new Error("Need a target peerid");if(s.length===0)throw new Error("Expected multiaddr to contain certhashes");let a,c,l=()=>{},d=!1,u=!1,f=!1;try{this.metrics?.dialerEvents.increment({pending:!0});let g=new WebTransport(`${o}/.well-known/libp2p-webtransport?type=noise`,{serverCertificateHashes:s.map(h=>({algorithm:"sha-256",value:h.digest}))});if(l=h=>{if(!d)try{this.metrics?.dialerEvents.increment({[h]:!0}),g.close()}catch(p){this.log.error("error closing wt session",p)}finally{c!=null&&(c.timeline.close=Date.now()),d=!0}},a=()=>{l(u?"noise_timeout":"ready_timeout")},t.signal?.addEventListener("abort",a,{once:!0}),await Promise.race([g.closed,g.ready]),u=!0,this.metrics?.dialerEvents.increment({ready:!0}),g.closed.catch(h=>{this.log.error("error on remote wt session close",h)}).finally(()=>{l("remote_close")}),!await this.authenticateWebTransport(g,n,i,s))throw new Error("Failed to authenticate webtransport");return this.metrics?.dialerEvents.increment({open:!0}),c={close:async()=>{this.log("Closing webtransport"),l("close")},abort:h=>{this.log("aborting webtransport due to passed err",h),l("abort")},remoteAddr:e,timeline:{open:Date.now()},log:this.components.logger.forComponent("libp2p:webtransport:maconn"),...p3()},f=!0,await t.upgrader.upgradeOutbound(c,{skipEncryption:!0,muxerFactory:this.webtransportMuxer(g),skipProtection:!0})}catch(g){throw this.log.error("caught wt session err",g),l(f?"upgrade_error":u?"noise_error":"ready_error"),g}finally{a!=null&&t.signal?.removeEventListener("abort",a)}}async authenticateWebTransport(e,t,n,o){let s=await e.createBidirectionalStream(),i=s.writable.getWriter(),a=s.readable.getReader();await i.ready;let c={source:async function*(){for(;;){let u=await a.read();if(u.value!=null&&(yield u.value),u.done)break}}(),sink:async function(u){for await(let f of u)f instanceof Uint8Array?await i.write(f):await i.write(f.subarray())}},l=_i()(this.components),{remoteExtensions:d}=await l.secureOutbound(t,c,n);if(i.close().catch(u=>{this.log.error(`Failed to close authentication stream writer: ${u.message}`)}),a.cancel().catch(u=>{this.log.error(`Failed to close authentication stream reader: ${u.message}`)}),!aE(d?.webtransportCerthashes??[],o.map(u=>u.bytes)))throw new Error("Our certhashes are not a subset of the remote's reported certhashes");return!0}webtransportMuxer(e){let t=0,n=this.config,o=this;return{protocol:"webtransport",createStreamMuxer:s=>{typeof s=="function"&&(s={onIncomingStream:s});let i=[];return async function(){let c=e.incomingBidirectionalStreams.getReader();for(;;){let{done:l,value:d}=await c.read();if(l)break;if(i.length>=n.maxInboundStreams)d.writable.close().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)}),d.readable.cancel().catch(u=>{o.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${u.message}`)});else{let u=await h3(d,String(t++),"inbound",i,s?.onStreamEnd,o.components.logger);i.push(u),s?.onIncomingStream?.(u)}}}().catch(()=>{this.log.error("WebTransport failed to receive incoming stream")}),{protocol:"webtransport",streams:i,newStream:async c=>{let l=await e.createBidirectionalStream(),d=await h3(l,String(t++),s?.direction??"outbound",i,s?.onStreamEnd,o.components.logger);return i.push(d),d},close:async c=>{this.log("Closing webtransport muxer"),await Promise.all(i.map(async l=>l.close(c)))},abort:c=>{this.log("Aborting webtransport muxer with err:",c);for(let l of i)l.abort(c)},...p3()}}}}createListener(e){throw new Error("Webtransport servers are not supported in Node or the browser")}filter(e){return e.filter(qc.exactMatch)}};function lE(r={}){return e=>new m3(e,r)}var g3=Ye(Su(),1);function uE(r,e){let t=e.map((n,o)=>({record:ln(n),index:o}));return t.sort((n,o)=>{let s=n.record.sequence,i=o.record.sequence;if(s>i)return-1;if(s<i)return 1;if(n.record.validityType===Wt.ValidityType.EOL&&o.record.validityType===Wt.ValidityType.EOL){let a=g3.default.fromString(n.record.validity).toDate(),c=g3.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 Fd="1.4.0",Vd="libp2p";var fE="4.1.0-9c8a2c0",hE="helia";var pE={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Kd(r={}){return{peerId:r.peerId,dns:r.dns,addresses:{listen:["/webrtc"]},transports:[Q2({discoverRelays:1}),Hw(),$w(),lE(),iE()],connectionEncryption:[_i()],streamMuxers:[rg(),z9()],peerDiscovery:[wg(pE)],services:{autoNAT:ig(),dcutr:Pg(),delegatedRouting:()=>L5("https://delegated-ipfs.dev"),dht:b9({clientMode:!0,validators:{ipns:Ku},selectors:{ipns:uE}}),identify:Gg({agentVersion:`${hE}/${fE} ${Vd}/${Fd} UserAgent=${globalThis.navigator.userAgent}`}),keychain:fd(r.keychain),ping:j9()}}}var It={ERR_INVALID_PARAMETERS:"ERR_INVALID_PARAMETERS"};var Qi;(function(r){let e;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&i.value.byteLength>0&&(a.uint32(18),a.bytes(i.value)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:"",value:new Uint8Array(0)},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=i.bytes();break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>re(i,o.codec()),o.decode=i=>te(i,o.codec())})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let s;o.codec=()=>(s==null&&(s=ne((i,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),i.key!=null&&i.key!==""&&(a.uint32(10),a.string(i.key)),i.value!=null&&(a.uint32(18),Hd.codec().encode(i.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(i,a)=>{let c={key:""},l=a==null?i.len:i.pos+a;for(;i.pos<l;){let d=i.uint32();switch(d>>>3){case 1:c.key=i.string();break;case 2:c.value=Hd.codec().decode(i,i.uint32());break;default:i.skipType(d&7);break}}return c})),s),o.encode=i=>re(i,o.codec()),o.decode=i=>te(i,o.codec())})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,s,i={})=>{if(i.lengthDelimited!==!1&&s.fork(),o.addresses!=null)for(let a of o.addresses)s.uint32(10),$d.codec().encode(a,s);if(o.protocols!=null)for(let a of o.protocols)s.uint32(18),s.string(a);if(o.publicKey!=null&&(s.uint32(34),s.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(s.uint32(42),s.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())s.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},s);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())s.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},s);i.lengthDelimited!==!1&&s.ldelim()},(o,s)=>{let i={addresses:[],protocols:[],metadata:new Map,tags:new Map},a=s==null?o.len:o.pos+s;for(;o.pos<a;){let c=o.uint32();switch(c>>>3){case 1:i.addresses.push($d.codec().decode(o,o.uint32()));break;case 2:i.protocols.push(o.string());break;case 4:i.publicKey=o.bytes();break;case 5:i.peerRecordEnvelope=o.bytes();break;case 6:{let l=r.Peer$metadataEntry.codec().decode(o,o.uint32());i.metadata.set(l.key,l.value);break}case 7:{let l=r.Peer$tagsEntry.codec().decode(o,o.uint32());i.tags.set(l.key,l.value);break}default:o.skipType(c&7);break}}return i})),n),r.encode=o=>re(o,r.codec()),r.decode=o=>te(o,r.codec())})(Qi||(Qi={}));var $d;(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)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={multiaddr:new Uint8Array(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.multiaddr=t.bytes();break;case 2:o.isCertified=t.bool();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})($d||($d={}));var Hd;(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)=>{let o={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let i=t.uint32();switch(i>>>3){case 1:o.value=t.uint32();break;case 2:o.expiry=t.uint64();break;default:t.skipType(i&7);break}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Hd||(Hd={}));function Xi(r,e){let t=Qi.decode(e);t.publicKey!=null&&r.publicKey==null&&(r=l8({...r,publicKey:r.publicKey}));let n=new Map,o=BigInt(Date.now());for(let[s,i]of t.tags.entries())i.expiry!=null&&i.expiry<o||n.set(s,i);return{...t,id:r,addresses:t.addresses.map(({multiaddr:s,isCertified:i})=>({multiaddr:X(s),isCertified:i??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var y3="/peers/";function ji(r){if(!Cs(r)||r.type==null)throw new m("Invalid PeerId",It.ERR_INVALID_PARAMETERS);let e=r.toCID().toString();return new Oe(`${y3}${e}`)}async function mE(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=X(o.multiaddr)),!Jn(o.multiaddr))throw new m("Multiaddr was invalid",It.ERR_INVALID_PARAMETERS);if(!await e(r,o.multiaddr))continue;let s=o.isCertified??!1,i=o.multiaddr.toString(),a=n.get(i);a!=null?o.isCertified=a.isCertified||s:n.set(i,{multiaddr:o.multiaddr,isCertified:s})}return[...n.values()].sort((o,s)=>o.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:o,multiaddr:s})=>({isCertified:o,multiaddr:s.bytes}))}async function Wd(r,e,t,n){if(e==null)throw new m("Invalid PeerData",It.ERR_INVALID_PARAMETERS);if(e.publicKey!=null&&r.publicKey!=null&&!j(e.publicKey,r.publicKey))throw new m("publicKey bytes do not match peer id publicKey bytes",It.ERR_INVALID_PARAMETERS);let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new m("peer id did not match existing peer id",It.ERR_INVALID_PARAMETERS);let s=o?.addresses??[],i=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)&&(s=[],e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses)),e.protocols!=null&&(i=new Set(e.protocols)),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=qd(u,{validate:gE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=qd(u,{validate:yE,map:wE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&s.push(...e.multiaddrs.map(u=>({isCertified:!1,multiaddr:u}))),e.addresses!=null&&s.push(...e.addresses),e.protocols!=null&&(i=new Set([...i,...e.protocols])),e.metadata!=null){let u=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[f,g]of u)g==null?a.delete(f):a.set(f,g);a=qd([...a.entries()],{validate:gE})}if(e.tags!=null){let u=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),f=new Map(c);for(let[g,h]of u)h==null?f.delete(g):f.set(g,h);c=qd([...f.entries()],{validate:yE,map:wE})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let d={addresses:await mE(r,n.addressFilter??(async()=>!0),s),protocols:[...i.values()].sort((u,f)=>u.localeCompare(f)),metadata:a,tags:c,publicKey:o?.id.publicKey??e.publicKey??r.publicKey,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function qd(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(([s],[i])=>s.localeCompare(i)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function gE(r,e){if(typeof r!="string")throw new m("Metadata key must be a string",It.ERR_INVALID_PARAMETERS);if(!(e instanceof Uint8Array))throw new m("Metadata value must be a Uint8Array",It.ERR_INVALID_PARAMETERS)}function yE(r,e){if(typeof r!="string")throw new m("Tag name must be a string",It.ERR_INVALID_PARAMETERS);if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new m("Tag value must be an integer",It.ERR_INVALID_PARAMETERS);if(e.value<0||e.value>100)throw new m("Tag value must be between 0-100",It.ERR_INVALID_PARAMETERS)}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new m("Tag ttl must be an integer",It.ERR_INVALID_PARAMETERS);if(e.ttl<0)throw new m("Tag ttl must be between greater than 0",It.ERR_INVALID_PARAMETERS)}}function wE(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 Gd(r,e,t){let n=r.toString().split("/")[2],o=ct.decode(n),s=Xe(o),i=t.get(s);if(i!=null)return i;let a=Xi(s,e);return t.set(s,a),a}function $k(r,e){return r==null?{}:{prefix:y3,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Gd(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Gd(n.key,n.value,e),Gd(o.key,o.value,e)))}}var zd=class{peerId;datastore;lock;addressFilter;constructor(e,t={}){this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ha({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(ji(e))}async delete(e){if(this.peerId.equals(e))throw new m("Cannot delete self peer",It.ERR_INVALID_PARAMETERS);await this.datastore.delete(ji(e))}async load(e){let t=await this.datastore.get(ji(e));return Xi(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Wd(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,s,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Wd(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),s=await Wd(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,s,n,o)}async*all(e){let t=new st;for await(let{key:n,value:o}of this.datastore.query($k(e??{},t))){let s=Gd(n,o,t);s.id.equals(this.peerId)||(yield s)}}async#e(e){try{let t=await this.datastore.get(ji(e)),n=Xi(e,t);return{existingBuf:t,existingPeer:n}}catch(t){if(t.code!=="ERR_NOT_FOUND")throw t}return{}}async#t(e,t,n,o){let s=Qi.encode(t);return n!=null&&j(s,n)?{peer:Xi(e,s),previous:o,updated:!1}:(await this.datastore.put(ji(e),s),{peer:Xi(e,s),previous:o,updated:!0})}};var Yd=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 zd(e,t)}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 ro(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 Qr.openAndCertify(e,lr.DOMAIN);if(t?.equals(n.peerId)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,n.peerId),!1;let o=lr.createFromProtobuf(n.payload),s;try{s=await this.get(n.peerId)}catch(i){if(i.code!=="ERR_NOT_FOUND")throw i}if(s?.peerRecordEnvelope!=null){let i=await Qr.createFromProtobuf(s.peerRecordEnvelope),a=lr.createFromProtobuf(i.payload);if(a.seqNumber>=o.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",a.seqNumber,o.seqNumber),!1}return await this.patch(o.peerId,{peerRecordEnvelope:e,addresses:o.multiaddrs.map(i=>({isCertified:!0,multiaddr:i}))}),!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 EE(r,e){let t;return function(){let n=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(n,e)}}var Hk=r=>r;function w3(r,e){let t=r.getPeerId();return t!=null&&ge(t).equals(e)&&(r=r.decapsulate(X(`/p2p/${e.toString()}`))),r}var Qd=class{log;components;listen;announce;observed;announceFilter;constructor(e,t={}){let{listen:n=[],announce:o=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.observed=new Map,this.announceFilter=t.announceFilter??Hk,this._updatePeerStoreAddresses=EE(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}_updatePeerStoreAddresses(){let e=this.getAnnounceAddrs().concat(this.components.transportManager.getAddrs()).concat([...this.observed.entries()].filter(([t,n])=>n.confident).map(([t])=>X(t))).map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>X(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>X(e))}getObservedAddrs(){return Array.from(this.observed).map(([e])=>X(e))}addObservedAddr(e){e=w3(e,this.components.peerId);let t=e.toString();this.observed.has(t)||this.observed.set(t,{confident:!1})}confirmObservedAddr(e){e=w3(e,this.components.peerId);let t=e.toString(),o=(this.observed.get(t)??{confident:!1}).confident;this.observed.set(t,{confident:!0}),o||this._updatePeerStoreAddresses()}removeObservedAddr(e){e=w3(e,this.components.peerId);let t=e.toString();this.observed.delete(t)}getAddresses(){let e=this.getAnnounceAddrs().map(n=>n.toString());e.length===0&&(e=this.components.transportManager.getAddrs().map(n=>n.toString())),e=e.concat(Array.from(this.observed).filter(([n,o])=>o.confident).map(([n])=>n));let t=new Set(e);return this.announceFilter(Array.from(t).map(n=>X(n))).map(n=>n.protos().pop()?.path===!0||n.getPeerId()===this.components.peerId.toString()?n:n.encapsulate(`/p2p/${this.components.peerId.toString()}`))}};var E3=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=no())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>_c(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")}},qk=["metrics","connectionProtector","dns"],Wk=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function bE(r={}){let e=new E3(r);return new Proxy(e,{get(n,o,s){if(typeof o=="string"&&!Wk.includes(o)){let i=e.components[o];if(i==null&&!qk.includes(o))throw new m(`${o} not set`,"ERR_SERVICE_MISSING");return i}return Reflect.get(n,o,s)},set(n,o,s){return typeof o=="string"?e.components[o]=s:Reflect.set(n,o,s),!0}})}function xE(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{let t=e.stringTuples();return t[0][0]===4||t[0][0]===41?!!$t(`${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 b3(r){try{let{address:e}=r.nodeAddress();return!!$t(e)}catch{return!0}}function Gk(r,e){let t=b3(r.multiaddr),n=b3(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function zk(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function Yk(r,e){let t=wn.exactMatch(r.multiaddr),n=wn.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Zi(r,e){let t=Gk(r,e);if(t!==0)return t;let n=Yk(r,e);return n!==0?n:zk(r,e)}var Qk=32,{code:Xk}=J("dnsaddr"),Is=async function(e,t={}){let n=t.maxRecursiveDepth??Qk;if(n===0)throw new m("Max recursive depth reached","ERR_MAX_RECURSIVE_DEPTH_REACHED");let[,o]=e.stringTuples().find(([l])=>l===Xk)??[],i=await(t?.dns??ju()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[cr.TXT]}),a=e.getPeerId(),c=[];for(let l of i.Answer){let d=l.data.split("=")[1];if(d==null||a!=null&&!d.includes(a))continue;let u=X(d);if(d.startsWith("/dnsaddr")){let f=await u.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(g=>g.toString()))}else c.push(u.toString())}return c};var zn;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.ERR_PROTECTOR_REQUIRED="Private network is enforced, but no protector was provided",r.NOT_FOUND="Not found"})(zn||(zn={}));var G;(function(r){r.ERR_PROTECTOR_REQUIRED="ERR_PROTECTOR_REQUIRED",r.ERR_PEER_DIAL_INTERCEPTED="ERR_PEER_DIAL_INTERCEPTED",r.ERR_CONNECTION_INTERCEPTED="ERR_CONNECTION_INTERCEPTED",r.ERR_INVALID_PROTOCOLS_FOR_STREAM="ERR_INVALID_PROTOCOLS_FOR_STREAM",r.ERR_CONNECTION_ENDED="ERR_CONNECTION_ENDED",r.ERR_CONNECTION_FAILED="ERR_CONNECTION_FAILED",r.ERR_NODE_NOT_STARTED="ERR_NODE_NOT_STARTED",r.ERR_ALREADY_ABORTED="ERR_ALREADY_ABORTED",r.ERR_TOO_MANY_ADDRESSES="ERR_TOO_MANY_ADDRESSES",r.ERR_NO_VALID_ADDRESSES="ERR_NO_VALID_ADDRESSES",r.ERR_RELAYED_DIAL="ERR_RELAYED_DIAL",r.ERR_DIALED_SELF="ERR_DIALED_SELF",r.ERR_DISCOVERED_SELF="ERR_DISCOVERED_SELF",r.ERR_DUPLICATE_TRANSPORT="ERR_DUPLICATE_TRANSPORT",r.ERR_ENCRYPTION_FAILED="ERR_ENCRYPTION_FAILED",r.ERR_HOP_REQUEST_FAILED="ERR_HOP_REQUEST_FAILED",r.ERR_INVALID_KEY="ERR_INVALID_KEY",r.ERR_INVALID_MESSAGE="ERR_INVALID_MESSAGE",r.ERR_INVALID_PARAMETERS="ERR_INVALID_PARAMETERS",r.ERR_INVALID_PEER="ERR_INVALID_PEER",r.ERR_MUXER_UNAVAILABLE="ERR_MUXER_UNAVAILABLE",r.ERR_NOT_FOUND="ERR_NOT_FOUND",r.ERR_TRANSPORT_UNAVAILABLE="ERR_TRANSPORT_UNAVAILABLE",r.ERR_TRANSPORT_DIAL_FAILED="ERR_TRANSPORT_DIAL_FAILED",r.ERR_UNSUPPORTED_PROTOCOL="ERR_UNSUPPORTED_PROTOCOL",r.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED="ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED",r.ERR_INVALID_MULTIADDR="ERR_INVALID_MULTIADDR",r.ERR_SIGNATURE_NOT_VALID="ERR_SIGNATURE_NOT_VALID",r.ERR_FIND_SELF="ERR_FIND_SELF",r.ERR_NO_ROUTERS_AVAILABLE="ERR_NO_ROUTERS_AVAILABLE",r.ERR_CONNECTION_NOT_MULTIPLEXED="ERR_CONNECTION_NOT_MULTIPLEXED",r.ERR_NO_DIAL_TOKENS="ERR_NO_DIAL_TOKENS",r.ERR_INVALID_CMS="ERR_INVALID_CMS",r.ERR_MISSING_KEYS="ERR_MISSING_KEYS",r.ERR_NO_KEY="ERR_NO_KEY",r.ERR_INVALID_KEY_NAME="ERR_INVALID_KEY_NAME",r.ERR_INVALID_KEY_TYPE="ERR_INVALID_KEY_TYPE",r.ERR_KEY_ALREADY_EXISTS="ERR_KEY_ALREADY_EXISTS",r.ERR_INVALID_KEY_SIZE="ERR_INVALID_KEY_SIZE",r.ERR_KEY_NOT_FOUND="ERR_KEY_NOT_FOUND",r.ERR_OLD_KEY_NAME_INVALID="ERR_OLD_KEY_NAME_INVALID",r.ERR_NEW_KEY_NAME_INVALID="ERR_NEW_KEY_NAME_INVALID",r.ERR_PASSWORD_REQUIRED="ERR_PASSWORD_REQUIRED",r.ERR_PEM_REQUIRED="ERR_PEM_REQUIRED",r.ERR_CANNOT_READ_KEY="ERR_CANNOT_READ_KEY",r.ERR_MISSING_PRIVATE_KEY="ERR_MISSING_PRIVATE_KEY",r.ERR_MISSING_PUBLIC_KEY="ERR_MISSING_PUBLIC_KEY",r.ERR_INVALID_OLD_PASS_TYPE="ERR_INVALID_OLD_PASS_TYPE",r.ERR_INVALID_NEW_PASS_TYPE="ERR_INVALID_NEW_PASS_TYPE",r.ERR_INVALID_PASS_LENGTH="ERR_INVALID_PASS_LENGTH",r.ERR_NOT_IMPLEMENTED="ERR_NOT_IMPLEMENTED",r.ERR_WRONG_PING_ACK="ERR_WRONG_PING_ACK",r.ERR_INVALID_RECORD="ERR_INVALID_RECORD",r.ERR_ALREADY_SUCCEEDED="ERR_ALREADY_SUCCEEDED",r.ERR_NO_HANDLER_FOR_PROTOCOL="ERR_NO_HANDLER_FOR_PROTOCOL",r.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS",r.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS="ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS",r.ERR_CONNECTION_DENIED="ERR_CONNECTION_DENIED",r.ERR_TRANSFER_LIMIT_EXCEEDED="ERR_TRANSFER_LIMIT_EXCEEDED"})(G||(G={}));var jk={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Is},addressSorter:Zi},transportManager:{faultTolerance:Yn.FATAL_ALL}};async function vE(r){let e=Bi(jk,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new m(zn.ERR_PROTECTOR_REQUIRED,G.ERR_PROTECTOR_REQUIRED);if(!(await ft(e.privateKey.public.bytes,e.privateKey.bytes)).equals(e.peerId))throw new m("Private key doesn't match peer id",G.ERR_INVALID_KEY);return e}function Xd(r){if(Cs(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:ge(t),r.forEach(n=>{if(!Jn(n))throw new m("Invalid Multiaddr",G.ERR_INVALID_MULTIADDR);let o=n.getPeerId();if(o==null){if(e!=null)throw new m("Multiaddrs must all have the same peer id or have no peer id",G.ERR_INVALID_PARAMETERS)}else{let s=ge(o);if(e==null||!e.equals(s))throw new m("Multiaddrs must all have the same peer id or have no peer id",G.ERR_INVALID_PARAMETERS)}})}return{peerId:e,multiaddrs:r}}var jd="last-dial-failure";var Zd=5,Jd=100,ef=50,RE=1e3*60*7;var Ds={minConnections:Zd,maxQueueLength:100,autoDialConcurrency:25,autoDialPriority:0,autoDialInterval:5e3,autoDialPeerRetryThreshold:RE,autoDialDiscoveredPeersDebounce:10},tf=class{connectionManager;peerStore;queue;minConnections;autoDialPriority;autoDialIntervalMs;autoDialMaxQueueLength;autoDialPeerRetryThresholdMs;autoDialDiscoveredPeersDebounce;autoDialInterval;started;running;log;constructor(e,t){this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.minConnections=t.minConnections??Ds.minConnections,this.autoDialPriority=t.autoDialPriority??Ds.autoDialPriority,this.autoDialIntervalMs=t.autoDialInterval??Ds.autoDialInterval,this.autoDialMaxQueueLength=t.maxQueueLength??Ds.maxQueueLength,this.autoDialPeerRetryThresholdMs=t.autoDialPeerRetryThreshold??Ds.autoDialPeerRetryThreshold,this.autoDialDiscoveredPeersDebounce=t.autoDialDiscoveredPeersDebounce??Ds.autoDialDiscoveredPeersDebounce,this.log=e.logger.forComponent("libp2p:connection-manager:auto-dial"),this.started=!1,this.running=!1,this.queue=new Vt({concurrency:t.autoDialConcurrency??Ds.autoDialConcurrency,metricName:"libp2p_autodial_queue",metrics:e.metrics}),this.queue.addEventListener("error",o=>{this.log.error("error during auto-dial",o.detail)}),e.events.addEventListener("connection:close",()=>{this.autoDial().catch(o=>{this.log.error(o)})});let n;e.events.addEventListener("peer:discovery",()=>{clearTimeout(n),n=setTimeout(()=>{this.autoDial().catch(o=>{this.log.error(o)})},this.autoDialDiscoveredPeersDebounce)})}isStarted(){return this.started}start(){this.started=!0}afterStart(){this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})}stop(){this.queue.clear(),clearTimeout(this.autoDialInterval),this.started=!1,this.running=!1}async autoDial(){if(!this.started||this.running)return;let e=this.connectionManager.getConnectionsMap(),t=e.size;if(t>=this.minConnections){this.minConnections>0&&this.log.trace("have enough connections %d/%d",t,this.minConnections);return}if(this.queue.size>this.autoDialMaxQueueLength){this.log("not enough connections %d/%d but auto dial queue is full",t,this.minConnections),this.sheduleNextAutodial();return}this.running=!0,this.log("not enough connections %d/%d - will dial peers to increase the number of connections",t,this.minConnections);let n=new je(this.connectionManager.getDialQueue().map(l=>l.peerId).filter(Boolean)),o=await this.peerStore.all({filters:[l=>l.addresses.length===0?(this.log.trace("not autodialing %p because they have no addresses",l.id),!1):e.has(l.id)?(this.log.trace("not autodialing %p because they are already connected",l.id),!1):n.has(l.id)?(this.log.trace("not autodialing %p because they are already being dialed",l.id),!1):this.queue.has(l.id)?(this.log.trace("not autodialing %p because they are already being autodialed",l.id),!1):!0]}),s=o.sort(()=>Math.random()>.5?1:-1),i=new st;for(let l of s)i.has(l.id)||i.set(l.id,[...l.tags.values()].reduce((d,u)=>d+u.value,0));let c=s.sort((l,d)=>{let u=i.get(l.id)??0,f=i.get(d.id)??0;return u>f?-1:u<f?1:0}).filter(l=>{let d=l.metadata.get(jd);if(d==null)return!0;let u=parseInt(P(d));return isNaN(u)?!0:Date.now()-u>this.autoDialPeerRetryThresholdMs});this.log("selected %d/%d peers to dial",c.length,o.length);for(let l of c)this.queue.add(async()=>{let d=this.connectionManager.getConnectionsMap().size;if(d>=this.minConnections){this.log("got enough connections now %d/%d",d,this.minConnections),this.queue.clear();return}this.log("connecting to a peerStore stored peer %p",l.id),await this.connectionManager.openConnection(l.id,{priority:this.autoDialPriority})},{peerId:l.id}).catch(d=>{this.log.error("could not connect to peerStore stored peer",d)});this.running=!1,this.sheduleNextAutodial()}sheduleNextAutodial(){this.started&&(this.autoDialInterval=setTimeout(()=>{this.autoDial().catch(e=>{this.log.error("error while autodialing",e)})},this.autoDialIntervalMs))}};var SE={maxConnections:Jd,allow:[]},rf=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??SE.maxConnections,this.allow=t.allow??SE.allow,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),e.events.addEventListener("connection:open",()=>{this.maybePruneConnections().catch(n=>{this.log.error(n)})})}async maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length,n=Math.max(t-this.maxConnections,0);if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;this.log("max connections limit exceeded %d/%d, pruning %d connection(s)",t,this.maxConnections,n);let o=new st;for(let a of e){let c=a.remotePeer;if(!o.has(c)){o.set(c,0);try{let l=await this.peerStore.get(c);o.set(c,[...l.tags.values()].reduce((d,u)=>d+u.value,0))}catch(l){l.code!=="ERR_NOT_FOUND"&&this.log.error("error loading peer tags",l)}}}let s=e.sort((a,c)=>{let l=o.get(a.remotePeer)??0,d=o.get(c.remotePeer)??0;if(l>d)return 1;if(l<d)return-1;let u=a.timeline.open,f=c.timeline.open;return u<f?1:u>f?-1:0}),i=[];for(let a of s)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>a.remoteAddr.toString().startsWith(l.toString()))||i.push(a),i.length===n)break;await Promise.all(i.map(async a=>{try{await a.close()}catch(c){this.log.error(c)}})),this.events.safeDispatchEvent("connection:prune",{detail:i})}};async function _E(r,e){let t=!1;for(let o of Vs.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}var Ec={addressSorter:Zi,maxParallelDials:ef,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Is}},nf=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter??Ec.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Ec.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Ec.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Ec.dialTimeout,this.connections=t.connections??new st,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal);for(let[n,o]of Object.entries(t.resolvers??{}))Vs.set(n,o);this.queue=new mn({concurrency:t.maxParallelDials??Ec.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{this.log.error("error in dial queue",n.detail)})}start(){this.shutDownController=new AbortController,ee(1/0,this.shutDownController.signal)}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=Xd(e),s=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(s!=null)return this.log("already connected to %a",s.remoteAddr),s;let i=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(i!=null){this.log("joining existing dial target for %p",n);for(let a of o)i.options.multiaddrs.add(a.toString());return i.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new m("Dial queue is full","ERR_DIAL_QUEUE_FULL");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),this.queue.add(async a=>{let c=this.createDialAbortController(a?.signal),l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),l.map(({multiaddr:d})=>d.toString()).forEach(d=>{a?.multiaddrs.add(d)})}catch(d){throw c.clear(),d}try{let d=0,u=[];for(let f of l){if(d===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",d,n),new m("Peer had more than maxPeerAddrsToDial",G.ERR_TOO_MANY_ADDRESSES);d++;try{let g=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});return this.log("dial to %a succeeded",f.multiaddr),g}catch(g){if(this.log.error("dial failed to %a",f.multiaddr,g),n!=null)try{await this.components.peerStore.patch(n,{metadata:{[jd]:B(Date.now().toString())}})}catch(h){this.log.error("could not update last dial failure key for %p",n,h)}if(c.aborted)throw new m(g.message,pn);u.push(g)}}throw u.length===1?u[0]:new Sc(u,"All multiaddr dials failed",G.ERR_TRANSPORT_DIAL_FAILED)}finally{c.clear()}},{peerId:n,priority:t.priority,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal})}createDialAbortController(e){let t=ot([AbortSignal.timeout(this.dialTimeout),this.shutDownController.signal,e]);return ee(1/0,t),t}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(u=>({multiaddr:X(u),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new m("Tried to dial self",G.ERR_DIALED_SELF);if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new m("The dial request is blocked by gater.allowDialPeer",G.ERR_PEER_DIAL_INTERCEPTED);if(o.length===0){this.log("loading multiaddrs for %p",e);try{let u=await this.components.peerStore.get(e);o.push(...u.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(u){if(u.code!==G.ERR_NOT_FOUND)throw u}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let u=await this.components.peerRouting.findPeer(e);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...u.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(u){u.code!==G.ERR_NO_ROUTERS_AVAILABLE&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,u)}}}let s=(await Promise.all(o.map(async u=>{let f=await _E(u.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(u.multiaddr)?u:f.map(g=>({multiaddr:g,isCertified:!1}))}))).flat();if(e!=null){let u=`/p2p/${e.toString()}`;s=s.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(u),isCertified:f.isCertified}:f)}let i=s.filter(u=>{if(this.components.transportManager.transportForMultiaddr(u.multiaddr)==null)return!1;let f=u.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let u of i){let f=u.multiaddr.toString(),g=a.get(f);if(g!=null){g.isCertified=g.isCertified||u.isCertified||!1;continue}a.set(f,u)}let c=[...a.values()];if(c.length===0)throw new m("The dial request has no valid addresses",G.ERR_NO_VALID_ADDRESSES);let l=[];for(let u of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(u.multiaddr)||l.push(u);let d=l.sort(this.addressSorter);if(d.length===0)throw new m("The connection gater denied all addresses in the dial request",G.ERR_NO_VALID_ADDRESSES);return this.log.trace("addresses for %p before filtering",e??"unknown peer",s.map(({multiaddr:u})=>u.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",d.map(({multiaddr:u})=>u.toString())),d}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnTransientConnection===!1?n.find(o=>!wn.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var rC=50,Ts={minConnections:Zd,maxConnections:Jd,inboundConnectionThreshold:5,maxIncomingPendingConnections:10,autoDialConcurrency:25,autoDialPriority:0,autoDialMaxQueueLength:100},of=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;maxConnections;dialQueue;autoDial;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??Ts.maxConnections;let n=t.minConnections??Ts.minConnections;if(this.maxConnections<n)throw new m("Connection Manager maxConnections must be greater than minConnections",G.ERR_INVALID_PARAMETERS);this.connections=new st,this.started=!1,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.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),this.allow=(t.allow??[]).map(o=>X(o)),this.deny=(t.deny??[]).map(o=>X(o)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??Ts.maxIncomingPendingConnections,this.inboundConnectionRateLimiter=new Ui({points:t.inboundConnectionThreshold??Ts.inboundConnectionThreshold,duration:1}),this.autoDial=new tf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{minConnections:n,autoDialConcurrency:t.autoDialConcurrency??Ts.autoDialConcurrency,autoDialPriority:t.autoDialPriority??Ts.autoDialPriority,maxQueueLength:t.autoDialMaxQueueLength??Ts.autoDialMaxQueueLength}),this.connectionPruner=new rf({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:this.allow}),this.dialQueue=new nf(e,{addressSorter:t.addressSorter??Zi,maxParallelDials:t.maxParallelDials??ef,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Is},connections:this.connections})}isStarted(){return this.started}async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,outbound:0};for(let t of this.connections.values())for(let n of t)n.direction==="inbound"?e.inbound++:e.outbound++;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 s=`${o.direction} ${o.protocol??"unnegotiated"}`;e[s]=(e[s]??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 s={};for(let i of o.streams){let a=`${i.direction} ${i.protocol??"unnegotiated"}`;s[a]=(s[a]??0)+1}for(let[i,a]of Object.entries(s))e[i]=e[i]??[],e[i].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((i,a)=>i-a);let s=Math.floor(o.length*.9);t[n]=o[s]}return t}}),this.dialQueue.start(),this.autoDial.start(),this.started=!0,this.log("started")}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(H3)]});await Promise.all(e.map(async t=>{await this.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)}),this.autoDial.afterStart()}async stop(){this.dialQueue.stop(),this.autoDial.stop();let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}let n=t.remotePeer,o=this.connections.get(n),s=!1;o!=null?o.push(t):(s=!0,this.connections.set(n,[t])),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),s&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e;if(!this.started)return;let n=t.remotePeer,o=this.connections.get(n);o!=null&&o.length>1?(o=o.filter(s=>s.id!==t.id),this.connections.set(n,o)):o!=null&&(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.isStarted())throw new m("Not started",G.ERR_NODE_NOT_STARTED);t.signal?.throwIfAborted();let{peerId:n}=Xd(e);if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>!c.transient);if(a!=null)return this.log("had an existing non-transient connection to %p",n),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??rC}),s=this.connections.get(o.remotePeer);s==null&&(s=[],this.connections.set(o.remotePeer,s));let i=!1;for(let a of s)a.id===o.id&&(i=!0);return i||s.push(o),o}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(s){o.abort(s)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>e.remoteAddr.toString().startsWith(o.toString())))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>X(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var sf=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e}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 m("No content routers available",G.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new je;for await(let s of bt(...n.routers.map(i=>i.findProviders(e,t))))s!=null&&(s.multiaddrs.length>0&&await this.components.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}async provide(e,t={}){if(this.routers.length===0)throw new m("No content routers available",G.ERR_NO_ROUTERS_AVAILABLE);await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new m(zn.NOT_STARTED_YET,G.ERR_NODE_NOT_STARTED);await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new m(zn.NOT_STARTED_YET,G.ERR_NODE_NOT_STARTED);return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var af=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??[]}async findPeer(e,t){if(this.routers.length===0)throw new m("No peer routers available",G.ERR_NO_ROUTERS_AVAILABLE);if(e.toString()===this.peerId.toString())throw new m("Should not try to find self",G.ERR_FIND_SELF);let n=this,o=bt(...this.routers.map(s=>async function*(){try{yield await s.findPeer(e,t)}catch(i){n.log.error(i)}}()));for await(let s of o)if(s!=null)return s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),s;throw new m(zn.NOT_FOUND,G.ERR_NOT_FOUND)}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new m("No peer routers available",G.ERR_NO_ROUTERS_AVAILABLE);let n=this,o=new je;for await(let s of Hn(async function*(){let i=bt(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of i)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}}()))s!=null&&(s.multiaddrs.length>0&&await this.peerStore.merge(s.id,{multiaddrs:s.multiaddrs}),!o.has(s.id)&&(o.add(s.id),yield s))}};var I3=32,D3=64,cf=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)}getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new m(`No handler registered for protocol ${e}`,G.ERR_NO_HANDLER_FOR_PROTOCOL);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e))throw new m(`Handler already registered for protocol ${e}`,G.ERR_PROTOCOL_HANDLER_ALREADY_REGISTERED);let o=Bi.bind({ignoreUndefined:!0})({maxInboundStreams:I3,maxOutboundStreams:D3},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 m("invalid topology",G.ERR_INVALID_PARAMETERS);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 s=this.topologies.get(o);if(s!=null)for(let i of s.values())i.onDisconnect?.(t)}}).catch(n=>{n.code!==G.ERR_NOT_FOUND&&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(s=>!t.protocols.includes(s));for(let s of o){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())a.onDisconnect?.(t.id)}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let s of t){let i=this.topologies.get(s);if(i!=null)for(let a of i.values())n.transient&&a.notifyOnTransient!==!0||a.onConnect?.(o,n)}}};var lf=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=dl({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Yn.FATAL_ALL}add(e){let t=e[Symbol.toStringTag];if(t==null)throw new m("Transport must have a valid tag",G.ERR_INVALID_KEY);if(this.transports.has(t))throw new m(`There is already a transport with the tag ${t}`,G.ERR_DUPLICATE_TRANSPORT);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.transportForMultiaddr(e);if(n==null)throw new m(`No transport available for address ${String(e)}`,G.ERR_TRANSPORT_UNAVAILABLE);try{return await n.dial(e,{...t,upgrader:this.components.upgrader})}catch(o){throw o.code==null&&(o.code=G.ERR_TRANSPORT_DIAL_FAILED),o}}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()}transportForMultiaddr(e){for(let t of this.transports.values())if(t.filter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new m("Not started",G.ERR_NODE_NOT_STARTED);if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let s=o.filter(e),i=[];for(let l of s){this.log("creating listener for %s on %a",n,l);let d=o.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(n)??[];u==null&&(u=[],this.listeners.set(n,u)),u.push(d),d.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:d})}),d.addEventListener("close",()=>{let f=u.findIndex(g=>g===d);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:d})}),i.push(d.listen(l))}if(i.length===0){t.push(n);continue}if((await Promise.allSettled(i)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==Yn.NO_FATAL)throw new m(`Transport (${n}) could not listen on any available address`,G.ERR_NO_VALID_ADDRESSES)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===Yn.FATAL_ALL)throw new m(n,G.ERR_NO_VALID_ADDRESSES);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Dt="/multistream/1.0.0";var nC=B(`
42
+ `);async function ks(r,e,t){await r.write(e,t)}async function AE(r,e,t){await r.writeV(e,t)}async function oC(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==nC[0])throw e.log.error("Invalid mss message - missing newline",t),new m("missing newline","ERR_INVALID_MULTISTREAM_SELECT_MESSAGE");return t.sublist(0,-1)}async function Fo(r,e){let t=await oC(r,e);return P(t.subarray())}async function bc(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return sC(r,e[0],t);let n=yr(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"]',Dt,o);let s=B(`${Dt}
43
43
  `),i=B(`${o}
44
- `);await _E(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await Mo(n,t);if(t.log.trace('select: read "%s"',a),a===Dt&&(t.log.trace("select: reading protocol response"),a=await Mo(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 Cs(n,B(`${c}
45
- `),t),t.log.trace("select: reading protocol response");let l=await Mo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}function oC(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=j(),c=!1,l=!1,d=j(),u=!1,f=!1,g=j(),h=wr({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:E}=h.unwrap();await E(async function*(){let S=!1;for await(let _ of b){if(l&&await d.promise,c)yield _;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Dt,e,_.byteLength);let A=`${e}
44
+ `);await AE(n,[s,i],t),t.log.trace("select: reading multistream-select header");let a=await Fo(n,t);if(t.log.trace('select: read "%s"',a),a===Dt&&(t.log.trace("select: reading protocol response"),a=await Fo(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 ks(n,B(`${c}
45
+ `),t),t.log.trace("select: reading protocol response");let l=await Fo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}function sC(r,e,t){let n=r.sink.bind(r),o=r.source,s=!1,i=!1,a=Z(),c=!1,l=!1,d=Z(),u=!1,f=!1,g=Z(),h=yr({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async b=>{let{sink:E}=h.unwrap();await E(async function*(){let S=!1;for await(let _ of b){if(l&&await d.promise,c)yield _;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Dt,e,_.byteLength);let A=`${e}
46
46
  `;yield new ue(Uint8Array.from([19]),B(`${Dt}
47
47
  `),Ve(A.length),B(A),_).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Dt,e,_.byteLength),c=!0,l=!1,d.resolve(),p().catch(D=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,D)})}S=!0}S||await p()}())};async function p(){if(i){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}i=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await y()),u||(t.log.trace("optimistic: doing read protocol for %s stream",e),await w())}finally{i=!1,s=!0,a.resolve()}}async function y(){if(l){await d.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Dt,e),await h.writeV([B(`${Dt}
48
48
  `),B(`${e}
49
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Dt,e)}finally{c=!0,l=!1,d.resolve()}}async function w(){if(f){await g.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Mo(h,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Dt&&(b=await Mo(h,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}finally{u=!0,f=!1,g.resolve()}}if(r.source=async function*(){await p(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*h.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async E=>{s||await p().catch(S=>{t.log.error("could not negotiate protocol before close read",S)}),await b(E)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async E=>{s||await p().catch(S=>{t.log.error("could not negotiate protocol before close write",S)}),await b(E)}}if(r.close!=null){let b=r.close.bind(r);r.close=async E=>{let S=[];l&&S.push(d.promise),f&&S.push(g.promise),S.length>0?await Lt(Promise.all(S),E?.signal):(s=!0,i=!1,a.resolve()),await b(E)}}return{stream:r,protocol:e}}async function xc(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=wr(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Mo(n,t);if(t.log.trace('handle: read "%s"',o),o===Dt){t.log.trace('handle: respond with "%s" for "%s"',Dt,o),await Cs(n,B(`${Dt}
50
- `),t),t.log.trace('handle: responded with "%s" for "%s"',Dt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Cs(n,B(`${o}
51
- `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let s=new ue(...e.map(i=>yr.single(B(`${i}
49
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Dt,e)}finally{c=!0,l=!1,d.resolve()}}async function w(){if(f){await g.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let b=await Fo(h,t);if(t.log.trace('optimistic: read multistream select header "%s"',b),b===Dt&&(b=await Fo(h,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',b,e),b!==e)throw new m("protocol selection failed","ERR_UNSUPPORTED_PROTOCOL")}finally{u=!0,f=!1,g.resolve()}}if(r.source=async function*(){await p(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*h.unwrap().source}(),r.closeRead!=null){let b=r.closeRead.bind(r);r.closeRead=async E=>{s||await p().catch(S=>{t.log.error("could not negotiate protocol before close read",S)}),await b(E)}}if(r.closeWrite!=null){let b=r.closeWrite.bind(r);r.closeWrite=async E=>{s||await p().catch(S=>{t.log.error("could not negotiate protocol before close write",S)}),await b(E)}}if(r.close!=null){let b=r.close.bind(r);r.close=async E=>{let S=[];l&&S.push(d.promise),f&&S.push(g.promise),S.length>0?await Ot(Promise.all(S),E?.signal):(s=!0,i=!1,a.resolve()),await b(E)}}return{stream:r,protocol:e}}async function xc(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=yr(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Fo(n,t);if(t.log.trace('handle: read "%s"',o),o===Dt){t.log.trace('handle: respond with "%s" for "%s"',Dt,o),await ks(n,B(`${Dt}
50
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',Dt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await ks(n,B(`${o}
51
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let s=new ue(...e.map(i=>gr.single(B(`${i}
52
52
  `))),B(`
53
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await Cs(n,s,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log('handle: respond with "na" for "%s"',o),await Cs(n,B(`na
54
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var iC=500,C3=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;transient;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:s,abort:i,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.transient=e.transient??!1,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=s,this._abort=i,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[H3]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new m("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.status==="closed")throw new m("the connection is closed","ERR_CONNECTION_CLOSED");if(Array.isArray(e)||(e=[e]),this.transient&&t?.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_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(iC);ie(1/0,t),e={...e,signal:t}}try{this.log.trace("closing all streams"),await Promise.all(this.streams.map(async t=>t.close(e))),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.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this.streams.forEach(t=>{t.abort(e)}),this.log.error("all streams aborted",this.streams.length),this._abort(e),this.timeline.close=Date.now(),this.status="closed"}};function IE(r){return new C3(r)}var aC=3e4;function cC(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.code!==G.ERR_NO_HANDLER_FOR_PROTOCOL)throw t}return D3}function lC(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.code!==G.ERR_NO_HANDLER_FOR_PROTOCOL)throw n}return t.maxOutboundStreams??T3}function DE(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var uf=class{components;connectionEncryption;muxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncryption=new Map,t.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,t.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e4,this.events=e.events}async shouldBlockConnection(e,t,n){let o=this.components.connectionGater[n];if(o!==void 0&&await o(e,t))throw new m(`The multiaddr connection is blocked by gater.${n}`,G.ERR_CONNECTION_INTERCEPTED)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new m("connection denied",G.ERR_CONNECTION_DENIED);let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new m("inbound upgrade timeout",pn))};l.addEventListener("abort",d,{once:!0}),ie(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new m("The multiaddr connection is blocked by gater.acceptConnection",G.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the inbound connection upgrade");let u=e;if(t?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the inbound connection"),u=await f.protect(e))}try{if(o=u,t?.skipEncryption!==!0){({conn:o,remotePeer:s,protocol:c}=await this._encryptInbound(u));let f={...u,...o};await this.shouldBlockConnection(s,f,"denyInboundEncryptedConnection")}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new m("inbound connection that skipped encryption must have a peer id",G.ERR_INVALID_MULTIADDR);let g=ge(f);c="native",s=g}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.muxers.size>0){let f=await this._multiplexInbound({...u,...o},this.muxers);a=f.muxerFactory,i=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection",f),f}return await this.shouldBlockConnection(s,e,"denyInboundUpgradedConnection"),e.log("successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,transient:t?.transient})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=ge(n),await this.shouldBlockConnection(o,e,"denyOutboundConnection"));let s,i,a,c,l;this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the outbound connection upgrade");let d=e;if(t?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(d=await u.protect(e))}try{if(s=d,t?.skipEncryption!==!0){({conn:s,remotePeer:i,protocol:c}=await this._encryptOutbound(d,o));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new m("Encryption was skipped but no peer id was passed",G.ERR_INVALID_PEER);c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.muxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.muxers);l=u.muxerFactory,a=u.stream}}catch(u){throw e.log.error("failed to upgrade outbound connection",u),await e.close(u),u}return await this.shouldBlockConnection(i,e,"denyOutboundUpgradedConnection"),e.log("successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:l,remotePeer:i,transient:t?.transient})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,transient:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:h=>{u!=null&&Promise.resolve().then(async()=>{let p=this.components.registrar.getProtocols(),{stream:y,protocol:w}=await xc(h,p,{log:h.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",w);let b=cC(w,this.components.registrar);if(DE(w,"inbound",u)===b){let S=new m(`Too many inbound protocol streams for protocol "${w}" - limit ${b}`,G.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS);throw h.abort(S),S}h.source=y.source,h.sink=y.sink,h.protocol=w,y.closeWrite!=null&&(h.closeWrite=y.closeWrite),y.closeRead!=null&&(h.closeRead=y.closeRead),y.close!=null&&(h.close=y.close),await this.components.peerStore.merge(i,{protocols:[w]}),this.components.metrics?.trackProtocolStream(h,u),this._onStream({connection:u,stream:h,protocol:w})}).catch(async p=>{u.log.error("error handling incoming stream id %s",h.id,p.message,p.code,p.stack),h.timeline.close==null&&await h.close()})}}),d=async(h,p={})=>{if(l==null)throw new m("Stream is not multiplexed",G.ERR_MUXER_UNAVAILABLE);u.log("starting new stream for protocols %s",h);let y=await l.newStream();u.log.trace("started new stream %s for protocols %s",y.id,h);try{if(p.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",h);let _=AbortSignal.timeout(aC);ie(1/0,_),p={...p,signal:_}}y.log.trace("selecting protocol from protocols %s",h);let{stream:w,protocol:b}=await bc(y,h,{...p,log:y.log,yieldBytes:!0});y.log("selected protocol %s",b);let E=lC(b,this.components.registrar,p);if(DE(b,"outbound",u)>=E){let _=new m(`Too many outbound protocol streams for protocol "${b}" - limit ${E}`,G.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw y.abort(_),_}return await this.components.peerStore.merge(i,{protocols:[b]}),y.source=w.source,y.sink=w.sink,y.protocol=b,w.closeWrite!=null&&(y.closeWrite=w.closeWrite),w.closeRead!=null&&(y.closeRead=w.closeRead),w.close!=null&&(y.close=w.close),this.components.metrics?.trackProtocolStream(y,u),y}catch(w){throw u.log.error("could not create new stream for protocols %s",h,w),y.timeline.close==null&&y.abort(w),w.code!=null?w:new m(String(w),G.ERR_UNSUPPORTED_PROTOCOL)}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(h=>{u.log.error("error piping data through muxer",h)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...h)=>(u!=null&&h[1]==="close"&&h[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(p){u.log.error("error closing connection after timeline close",p)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(p=>{u.log.error("error thrown while dispatching connection:close event",p)}),Reflect.set(...h))}),o.timeline.upgraded=Date.now();let g=()=>{throw new m("connection is not multiplexed",G.ERR_CONNECTION_NOT_MULTIPLEXED)};return u=IE({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,transient:c,logger:this.components.logger,newStream:d??g,getStreams:()=>l!=null?l.streams:[],close:async h=>{l!=null&&(u.log.trace("close muxer"),await l.close(h)),u.log.trace("close maconn"),await o.close(h),u.log.trace("closed maconn")},abort:h=>{o.abort(h),l?.abort(h)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.transient&&i.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");s({connection:t,stream:n})}async _encryptInbound(e){let t=Array.from(this.connectionEncryption.keys());e.log("handling inbound crypto protocol selection",t);try{let{stream:n,protocol:o}=await xc(e,t,{log:e.log}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using",o),{...await s.secureInbound(this.components.peerId,n),protocol:o}}catch(n){throw e.log.error("encrypting inbound connection to %p failed",n),new m(n.message,G.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncryption.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await bc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncryption.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %p using %s",t,i),{...await i.secureOutbound(this.components.peerId,o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",o),new m(o.message,G.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,t){let n=Array.from(t.keys());e.log("outbound selecting muxer %s",n);try{e.log.trace("selecting stream muxer from %s",n);let{stream:o,protocol:s}=await bc(e,n,{log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new m(String(o),G.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await xc(e,n,{log:e.log}),i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new m(String(o),G.ERR_MUXER_UNAVAILABLE)}}};var N3=class extends Re{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new Re,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new wt(a.type,{detail:a.detail}));return c||l},ie(1/0,t),this.peerId=e.peerId,this.logger=e.logger??to(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=EE({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Fd,version:Md},logger:this.logger,events:t,datastore:e.datastore??new hs,connectionGater:bE(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new zd(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new uf(this.components,{connectionEncryption:(e.connectionEncryption??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),muxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager.inboundUpgradeTimeout}),this.configureComponent("transportManager",new lf(this.components,e.transportManager)),this.configureComponent("connectionManager",new of(this.components,e.connectionManager)),this.configureComponent("registrar",new cf(this.components)),this.configureComponent("addressManager",new Yd(this.components,e.addresses));let s=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new af(this.components,{routers:s}));let i=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new sf(this.components,{routers:i})),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[Jr]!=null&&(this.log("registering service %s for content routing",a),i.push(l[Jr])),l[en]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[en])),l[Vo]!=null&&(this.log("registering service %s for peer discovery",a),l[Vo].addEventListener?.("peer",d=>{this.#e(d)}))}}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 Ze;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 m("no protocols were provided to open a stream",G.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(t=Array.isArray(t)?t:[t],t.length===0)throw new m("no protocols were provided to open a stream",G.ERR_INVALID_PROTOCOLS_FOR_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={}){jn(e)&&(e=ge(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.code!==G.ERR_NOT_FOUND)throw s}let n=xe([B("/pk/"),e.multihash.digest]),o=await this.contentRouting.get(n,t);return qr(o),await this.peerStore.patch(e,{publicKey:o}),o}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)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error(new Error(G.ERR_DISCOVERED_SELF));return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function TE(r={}){let e=r.peerId??=await v1();if(e.privateKey==null)throw new m("peer id was missing private key","ERR_MISSING_PRIVATE_KEY");return r.privateKey??=await Sr(e.privateKey),new N3(await xE(r))}async function kE(r={}){let e=await TE(r);return r.start!==!1&&await e.start(),e}async function CE(r){let e=r.libp2p?.peerId,t=r.logger??to(),n=new Oe("/pkcs8/self"),o;e==null&&r.datastore!=null&&(o=dd(r.keychain)({datastore:r.datastore,logger:t}),await r.datastore.has(n)&&(r.libp2p=r.libp2p??{},r.libp2p.peerId=await o.exportPeerId("self")));let s=Vd(r);s.datastore=s.datastore??r.datastore,r=r??{};let i=await kE({...s,...r.libp2p,start:!1});return e==null&&o!=null&&!await r.datastore.has(n)&&await o.importPeer("self",i.peerId),i}async function uC(r={}){let e=r.datastore??new hs,t=r.blockstore??new Ka,n;dC(r.libp2p)?n=r.libp2p:n=await CE({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new i1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Mh(),Uh()],routers:[$0(n)]});return r.start!==!1&&await o.start(),o}function dC(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Rc(fC);})();
53
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await ks(n,s,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log('handle: respond with "na" for "%s"',o),await ks(n,B(`na
54
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var aC=500,k3=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;transient;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:s,abort:i,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.transient=e.transient??!1,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=s,this._abort=i,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[$3]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new m("the connection is being closed","ERR_CONNECTION_BEING_CLOSED");if(this.status==="closed")throw new m("the connection is closed","ERR_CONNECTION_CLOSED");if(Array.isArray(e)||(e=[e]),this.transient&&t?.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_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(aC);ee(1/0,t),e={...e,signal:t}}try{this.log.trace("closing all streams"),await Promise.all(this.streams.map(async t=>t.close(e))),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.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this.streams.forEach(t=>{t.abort(e)}),this.log.error("all streams aborted",this.streams.length),this._abort(e),this.timeline.close=Date.now(),this.status="closed"}};function DE(r){return new k3(r)}var cC=3e4;function lC(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.code!==G.ERR_NO_HANDLER_FOR_PROTOCOL)throw t}return I3}function uC(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.code!==G.ERR_NO_HANDLER_FOR_PROTOCOL)throw n}return t.maxOutboundStreams??D3}function TE(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var uf=class{components;connectionEncryption;muxers;inboundUpgradeTimeout;events;constructor(e,t){this.components=e,this.connectionEncryption=new Map,t.connectionEncryption.forEach(n=>{this.connectionEncryption.set(n.protocol,n)}),this.muxers=new Map,t.muxers.forEach(n=>{this.muxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??2e3,this.events=e.events}async shouldBlockConnection(e,t,n){let o=this.components.connectionGater[n];if(o!==void 0&&await o(e,t))throw new m(`The multiaddr connection is blocked by gater.${n}`,G.ERR_CONNECTION_INTERCEPTED)}async upgradeInbound(e,t){if(!await this.components.connectionManager.acceptIncomingConnection(e))throw new m("connection denied",G.ERR_CONNECTION_DENIED);let o,s,i,a,c,l=AbortSignal.timeout(this.inboundUpgradeTimeout),d=()=>{e.abort(new m("inbound upgrade timeout",pn))};l.addEventListener("abort",d,{once:!0}),ee(1/0,l);try{if(await this.components.connectionGater.denyInboundConnection?.(e)===!0)throw new m("The multiaddr connection is blocked by gater.acceptConnection",G.ERR_CONNECTION_INTERCEPTED);this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the inbound connection upgrade");let u=e;if(t?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the inbound connection"),u=await f.protect(e))}try{if(o=u,t?.skipEncryption!==!0){({conn:o,remotePeer:s,protocol:c}=await this._encryptInbound(u));let f={...u,...o};await this.shouldBlockConnection(s,f,"denyInboundEncryptedConnection")}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new m("inbound connection that skipped encryption must have a peer id",G.ERR_INVALID_MULTIADDR);let g=ge(f);c="native",s=g}if(i=o,t?.muxerFactory!=null)a=t.muxerFactory;else if(this.muxers.size>0){let f=await this._multiplexInbound({...u,...o},this.muxers);a=f.muxerFactory,i=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection",f),f}return await this.shouldBlockConnection(s,e,"denyInboundUpgradedConnection"),e.log("successfully upgraded inbound connection"),this._createConnection({cryptoProtocol:c,direction:"inbound",maConn:e,upgradedConn:i,muxerFactory:a,remotePeer:s,transient:t?.transient})}finally{l.removeEventListener("abort",d),this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=ge(n),await this.shouldBlockConnection(o,e,"denyOutboundConnection"));let s,i,a,c,l;this.components.metrics?.trackMultiaddrConnection(e),e.log("starting the outbound connection upgrade");let d=e;if(t?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(d=await u.protect(e))}try{if(s=d,t?.skipEncryption!==!0){({conn:s,remotePeer:i,protocol:c}=await this._encryptOutbound(d,o));let u={...d,...s};await this.shouldBlockConnection(i,u,"denyOutboundEncryptedConnection")}else{if(o==null)throw new m("Encryption was skipped but no peer id was passed",G.ERR_INVALID_PEER);c="native",i=o}if(a=s,t?.muxerFactory!=null)l=t.muxerFactory;else if(this.muxers.size>0){let u=await this._multiplexOutbound({...d,...s},this.muxers);l=u.muxerFactory,a=u.stream}}catch(u){throw e.log.error("failed to upgrade outbound connection",u),await e.close(u),u}return await this.shouldBlockConnection(i,e,"denyOutboundUpgradedConnection"),e.log("successfully upgraded outbound connection"),this._createConnection({cryptoProtocol:c,direction:"outbound",maConn:e,upgradedConn:a,muxerFactory:l,remotePeer:i,transient:t?.transient})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:s,remotePeer:i,muxerFactory:a,transient:c}=e,l,d,u;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:h=>{u!=null&&Promise.resolve().then(async()=>{let p=this.components.registrar.getProtocols(),{stream:y,protocol:w}=await xc(h,p,{log:h.log,yieldBytes:!1});if(u==null)return;u.log("incoming stream opened on %s",w);let b=lC(w,this.components.registrar);if(TE(w,"inbound",u)===b){let S=new m(`Too many inbound protocol streams for protocol "${w}" - limit ${b}`,G.ERR_TOO_MANY_INBOUND_PROTOCOL_STREAMS);throw h.abort(S),S}h.source=y.source,h.sink=y.sink,h.protocol=w,y.closeWrite!=null&&(h.closeWrite=y.closeWrite),y.closeRead!=null&&(h.closeRead=y.closeRead),y.close!=null&&(h.close=y.close),await this.components.peerStore.merge(i,{protocols:[w]}),this.components.metrics?.trackProtocolStream(h,u),this._onStream({connection:u,stream:h,protocol:w})}).catch(async p=>{u.log.error("error handling incoming stream id %s",h.id,p.message,p.code,p.stack),h.timeline.close==null&&await h.close()})}}),d=async(h,p={})=>{if(l==null)throw new m("Stream is not multiplexed",G.ERR_MUXER_UNAVAILABLE);u.log("starting new stream for protocols %s",h);let y=await l.newStream();u.log.trace("started new stream %s for protocols %s",y.id,h);try{if(p.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",h);let _=AbortSignal.timeout(cC);ee(1/0,_),p={...p,signal:_}}y.log.trace("selecting protocol from protocols %s",h);let{stream:w,protocol:b}=await bc(y,h,{...p,log:y.log,yieldBytes:!0});y.log("selected protocol %s",b);let E=uC(b,this.components.registrar,p);if(TE(b,"outbound",u)>=E){let _=new m(`Too many outbound protocol streams for protocol "${b}" - limit ${E}`,G.ERR_TOO_MANY_OUTBOUND_PROTOCOL_STREAMS);throw y.abort(_),_}return await this.components.peerStore.merge(i,{protocols:[b]}),y.source=w.source,y.sink=w.sink,y.protocol=b,w.closeWrite!=null&&(y.closeWrite=w.closeWrite),w.closeRead!=null&&(y.closeRead=w.closeRead),w.close!=null&&(y.close=w.close),this.components.metrics?.trackProtocolStream(y,u),y}catch(w){throw u.log.error("could not create new stream for protocols %s",h,w),y.timeline.close==null&&y.abort(w),w.code!=null?w:new m(String(w),G.ERR_UNSUPPORTED_PROTOCOL)}},Promise.all([l.sink(s.source),s.sink(l.source)]).catch(h=>{u.log.error("error piping data through muxer",h)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...h)=>(u!=null&&h[1]==="close"&&h[2]!=null&&f.close==null&&(async()=>{try{u.status==="open"&&await u.close()}catch(p){u.log.error("error closing connection after timeline close",p)}finally{this.events.safeDispatchEvent("connection:close",{detail:u})}})().catch(p=>{u.log.error("error thrown while dispatching connection:close event",p)}),Reflect.set(...h))}),o.timeline.upgraded=Date.now();let g=()=>{throw new m("connection is not multiplexed",G.ERR_CONNECTION_NOT_MULTIPLEXED)};return u=DE({remoteAddr:o.remoteAddr,remotePeer:i,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,transient:c,logger:this.components.logger,newStream:d??g,getStreams:()=>l!=null?l.streams:[],close:async h=>{l!=null&&(u.log.trace("close muxer"),await l.close(h)),u.log.trace("close maconn"),await o.close(h),u.log.trace("closed maconn")},abort:h=>{o.abort(h),l?.abort(h)}}),this.events.safeDispatchEvent("connection:open",{detail:u}),u}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:s,options:i}=this.components.registrar.getHandler(o);if(t.transient&&i.runOnTransientConnection!==!0)throw new m("Cannot open protocol stream on transient connection","ERR_TRANSIENT_CONNECTION");s({connection:t,stream:n})}async _encryptInbound(e){let t=Array.from(this.connectionEncryption.keys());e.log("handling inbound crypto protocol selection",t);try{let{stream:n,protocol:o}=await xc(e,t,{log:e.log}),s=this.connectionEncryption.get(o);if(s==null)throw new Error(`no crypto module found for ${o}`);return e.log("encrypting inbound connection using",o),{...await s.secureInbound(this.components.peerId,n),protocol:o}}catch(n){throw e.log.error("encrypting inbound connection to %p failed",n),new m(n.message,G.ERR_ENCRYPTION_FAILED)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncryption.keys());e.log("selecting outbound crypto protocol",n);try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:s}=await bc(e,n,{log:e.log,yieldBytes:!0}),i=this.connectionEncryption.get(s);if(i==null)throw new Error(`no crypto module found for ${s}`);return e.log("encrypting outbound connection to %p using %s",t,i),{...await i.secureOutbound(this.components.peerId,o,t),protocol:s}}catch(o){throw e.log.error("encrypting outbound connection to %p failed",o),new m(o.message,G.ERR_ENCRYPTION_FAILED)}}async _multiplexOutbound(e,t){let n=Array.from(t.keys());e.log("outbound selecting muxer %s",n);try{e.log.trace("selecting stream muxer from %s",n);let{stream:o,protocol:s}=await bc(e,n,{log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new m(String(o),G.ERR_MUXER_UNAVAILABLE)}}async _multiplexInbound(e,t){let n=Array.from(t.keys());e.log("inbound handling muxers %s",n);try{let{stream:o,protocol:s}=await xc(e,n,{log:e.log}),i=t.get(s);return{stream:o,muxerFactory:i}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new m(String(o),G.ERR_MUXER_UNAVAILABLE)}}};var C3=class extends xe{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new xe,n=t.dispatchEvent.bind(t);t.dispatchEvent=a=>{let c=n(a),l=this.dispatchEvent(new yt(a.type,{detail:a.detail}));return c||l},ee(1/0,t),this.peerId=e.peerId,this.logger=e.logger??no(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=this.components=bE({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:e.nodeInfo??{name:Vd,version:Fd},logger:this.logger,events:t,datastore:e.datastore??new fs,connectionGater:xE(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",new Yd(o,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),o.events.addEventListener("peer:update",a=>{if(a.detail.previous==null){let c={id:a.detail.peer.id,multiaddrs:a.detail.peer.addresses.map(l=>l.multiaddr)};o.events.safeDispatchEvent("peer:discovery",{detail:c})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(o)),this.components.upgrader=new uf(this.components,{connectionEncryption:(e.connectionEncryption??[]).map((a,c)=>this.configureComponent(`connection-encryption-${c}`,a(this.components))),muxers:(e.streamMuxers??[]).map((a,c)=>this.configureComponent(`stream-muxers-${c}`,a(this.components))),inboundUpgradeTimeout:e.connectionManager.inboundUpgradeTimeout}),this.configureComponent("transportManager",new lf(this.components,e.transportManager)),this.configureComponent("connectionManager",new of(this.components,e.connectionManager)),this.configureComponent("registrar",new cf(this.components)),this.configureComponent("addressManager",new Qd(this.components,e.addresses));let s=(e.peerRouters??[]).map((a,c)=>this.configureComponent(`peer-router-${c}`,a(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new af(this.components,{routers:s}));let i=(e.contentRouters??[]).map((a,c)=>this.configureComponent(`content-router-${c}`,a(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new sf(this.components,{routers:i})),(e.peerDiscovery??[]).forEach((a,c)=>{this.configureComponent(`peer-discovery-${c}`,a(this.components)).addEventListener("peer",d=>{this.#e(d)})}),e.transports?.forEach((a,c)=>{this.components.transportManager.add(this.configureComponent(`transport-${c}`,a(this.components)))}),e.services!=null)for(let a of Object.keys(e.services)){let c=e.services[a],l=c(this.components);if(l==null){this.log.error("service factory %s returned null or undefined instance",a);continue}this.services[a]=l,this.configureComponent(a,l),l[Jr]!=null&&(this.log("registering service %s for content routing",a),i.push(l[Jr])),l[en]!=null&&(this.log("registering service %s for peer routing",a),s.push(l[en])),l[Ko]!=null&&(this.log("registering service %s for peer discovery",a),l[Ko].addEventListener?.("peer",d=>{this.#e(d)}))}}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 je;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 m("no protocols were provided to open a stream",G.ERR_INVALID_PROTOCOLS_FOR_STREAM);if(t=Array.isArray(t)?t:[t],t.length===0)throw new m("no protocols were provided to open a stream",G.ERR_INVALID_PROTOCOLS_FOR_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={}){Jn(e)&&(e=ge(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.code!==G.ERR_NOT_FOUND)throw s}let n=ve([B("/pk/"),e.multihash.digest]),o=await this.contentRouting.get(n,t);return qr(o),await this.peerStore.patch(e,{publicKey:o}),o}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(new Error(G.ERR_DISCOVERED_SELF));return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function kE(r={}){let e=r.peerId??=await R1();if(e.privateKey==null)throw new m("peer id was missing private key","ERR_MISSING_PRIVATE_KEY");return r.privateKey??=await Rr(e.privateKey),new C3(await vE(r))}async function CE(r={}){let e=await kE(r);return r.start!==!1&&await e.start(),e}async function NE(r){let e=r.libp2p?.peerId,t=r.logger??no(),n=new Oe("/pkcs8/self"),o;e==null&&r.datastore!=null&&(o=fd(r.keychain)({datastore:r.datastore,logger:t}),await r.datastore.has(n)&&(r.libp2p=r.libp2p??{},r.libp2p.peerId=await o.exportPeerId("self")));let s=Kd(r);s.datastore=s.datastore??r.datastore,r=r??{};let i=await CE({...s,...r.libp2p,start:!1});return e==null&&o!=null&&!await r.datastore.has(n)&&await o.importPeer("self",i.peerId),i}async function dC(r={}){let e=r.datastore??new fs,t=r.blockstore??new Ka,n;fC(r.libp2p)?n=r.libp2p:n=await NE({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new a1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[Mh(),Uh()],routers:[$0(n)]});return r.start!==!1&&await o.start(),o}function fC(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return Rc(hC);})();
55
55
  /*! Bundled license information:
56
56
 
57
57
  pvtsutils/build/index.js: