helia 5.3.0-c0bf36e → 5.3.0-cd1eb58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,22 +1,46 @@
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 rE=Object.create;var ll=Object.defineProperty;var nE=Object.getOwnPropertyDescriptor;var oE=Object.getOwnPropertyNames;var iE=Object.getPrototypeOf,sE=Object.prototype.hasOwnProperty;var Ct=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Xe=(r,e)=>{for(var t in e)ll(r,t,{get:e[t],enumerable:!0})},X4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of oE(e))!sE.call(r,o)&&o!==t&&ll(r,o,{get:()=>e[o],enumerable:!(n=nE(e,o))||n.enumerable});return r};var Br=(r,e,t)=>(t=r!=null?rE(iE(r)):{},X4(e||!r||!r.__esModule?ll(t,"default",{value:r,enumerable:!0}):t,r)),aE=r=>X4(ll({},"__esModule",{value:!0}),r);var W6=Ct((VF,ip)=>{"use strict";var oI=Object.prototype.hasOwnProperty,Gt="~";function Ja(){}Object.create&&(Ja.prototype=Object.create(null),new Ja().__proto__||(Gt=!1));function iI(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function z6(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new iI(t,n||r,o),s=Gt?Gt+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function mu(r,e){--r._eventsCount===0?r._events=new Ja:delete r._events[e]}function Mt(){this._events=new Ja,this._eventsCount=0}Mt.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)oI.call(t,n)&&e.push(Gt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Mt.prototype.listeners=function(e){var t=Gt?Gt+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Mt.prototype.listenerCount=function(e){var t=Gt?Gt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Mt.prototype.emit=function(e,t,n,o,i,s){var a=Gt?Gt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,h;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];c[d].fn.apply(c[d].context,u)}}return!0};Mt.prototype.on=function(e,t,n){return z6(this,e,t,n,!1)};Mt.prototype.once=function(e,t,n){return z6(this,e,t,n,!0)};Mt.prototype.removeListener=function(e,t,n,o){var i=Gt?Gt+e:e;if(!this._events[i])return this;if(!t)return mu(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&mu(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:mu(this,i)}return this};Mt.prototype.removeAllListeners=function(e){var t;return e?(t=Gt?Gt+e:e,this._events[t]&&mu(this,t)):(this._events=new Ja,this._eventsCount=0),this};Mt.prototype.off=Mt.prototype.removeListener;Mt.prototype.addListener=Mt.prototype.on;Mt.prefixed=Gt;Mt.EventEmitter=Mt;typeof ip<"u"&&(ip.exports=Mt)});var Z6=Ct((lV,X6)=>{X6.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var B5=Ct(fc=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,f;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,f=c&255,[l,u,d,f].join(".")},s=function(c){var l,u,d,f,h,p;for(l=[],d=f=0;f<=3&&c.length!==0;d=++f){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],u=p[1],c=c.substring(u),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,u,d,f,h;for(f=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),h=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)f=f*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")f=f*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")f=f*l+(10+t(c[d])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");d++}if(d===h)throw new Error("empty octet");return[f,d]},r=function(){function c(l,u){var d,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(p=l.split("/",2),l=p[0],u=p[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(g){throw d=g,new Error("Invalid mask: "+u)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(g){throw d=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var u,d,f;for(f=s(this.first),d=s(this.last),u=0;f<=d;)l(a(f),f,u),u++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),fc.ip2long=s,fc.long2ip=a,fc.Netmask=r}).call(fc)});var yd=Ct((Xz,Pm)=>{var Yz=function(){typeof Pm<"u"&&(Pm.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var A=S-S%1;return A==0&&(S<0||S===0&&1/S!=1/0)?-0:A},u=g.prototype,d=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=I(0,1,2,3,0,4),g.fromInt64LE=I(3,2,1,0,4,0),g.fromString=function(L){var A,F=new g,L=(L+="").replace(/^\s*[+\-]?\d+/,function(K){var K=+K,C=1970+(K-1970)%400;return F.year=K-C,C}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(U,K,C){return K<0&&(C*=-1),A=6e4*(60*+K+ +C),""}).replace(/\.\d+$/,function(U){return F.nano=+(U+c).substr(1,9),""}).split(/\D+/);if(1<L.length?L[1]--:L[1]=0,F.time=A=Date.UTC.apply(Date,L)-(A||0),isNaN(A))throw new TypeError("Invalid Date");return m(F)},g.fromTimeT=function(S){return x(S,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(S){return this.nano+=+S||0,this},u.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},u.getTimeT=function(){var A=m(this),S=Math.floor(A.time/1e3),A=A.year;return A&&(S+=A*t*r/e),S},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return y(m(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(S){var A=this,F=A.toDate(),L={H:function(){return D(F.getUTCHours())},L:function(){return R(F.getUTCMilliseconds(),3)},M:function(){return D(F.getUTCMinutes())},N:function(){return R(A.getNano(),9)},S:function(){return D(F.getUTCSeconds())},Y:function(){var U=A.getYear();return 999999<U?"+"+U:9999<U?"+"+R(U,6):0<=U?R(U,4):-999999<=U?"-"+R(-U,6):U},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return D(F.getUTCDate())},e:function(){return function(U){return(9<U?"":" ")+(0|U)}(F.getUTCDate())},m:function(){return D(F.getUTCMonth()+1)}};return function U(K){return K.replace(/%./g,function(C){var v=C[1],k=p[v],v=L[v];return k?U(k):v?v():C})}(S||d)},u.writeInt64BE=w(0,1,2,3,0,4),u.writeInt64LE=w(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,A,F){var L=this;if(!(L instanceof g))return new g(S,A,F);L.time=+S||0,L.nano=+A||0,L.year=+F||0,m(L)}function m(S){var A,F,L,U=S.year,K=S.time,C=S.nano,k=((C<0||a<=C)&&(C-=(F=Math.floor(C/a))*a,K+=F,F=1),U%e);return(K<-i||i<K||k)&&((A=l(K/o))&&(U+=A*e,K-=A*o),(L=y(K)).setUTCFullYear(k+L.getUTCFullYear()),L=(K=+L)+(A=l((U-=k)/e))*o,A&&-i<=L&&L<=i&&(U-=A*e,K=L),F=1),F&&(S.year=U,S.time=K,S.nano=C),S}function y(S){var A=new Date(0);return A.setTime(S),A}function x(U,L){U=+U||0;var F=l((L=(L|0)*s)/n)+l(U/n),L=L%n+U%n,U=l(L/n);return U&&(F+=U,L-=U*n),new g(1e3*L,0,F*e)}function w(S,A,F,L,U,K){return function(k,v){var _=m(this);k=k||new Array(8),M(k,v|=0);var T=Math.floor(_.time/1e3),_=_.year*(t*r/e),E=l(_/s)+l(T/s),_=_%s+T%s,T=Math.floor(_/s);return T&&(E+=T,_-=T*s),C(k,v+U,E),C(k,v+K,_),k};function C(k,v,E){k[v+S]=E>>24&255,k[v+A]=E>>16&255,k[v+F]=E>>8&255,k[v+L]=255&E}}function I(S,A,F,L,U,K){return function(k,v){M(k,v|=0);var E=C(k,v+U);return x(C(k,v+K),E)};function C(k,v){return 16777216*k[v+S]+(k[v+A]<<16|k[v+F]<<8|k[v+L])}}function M(S,A){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<A+8)throw new RangeError("Out of range")}function D(S){return(9<S?"":"0")+(0|S)}function R(S,A){return(c+(0|S)).substr(-A)}}()});var Ky=Ct((ise,$y)=>{"use strict";$y.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var Qy=Ct((Wy,Gy)=>{"use strict";var hf=Ky(),{hasOwnProperty:qy}=Object.prototype,{propertyIsEnumerable:Tk}=Object,ia=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),_k=Wy,Hy={concatArrays:!1,ignoreUndefined:!1},pf=r=>{let e=[];for(let t in r)qy.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)Tk.call(r,n)&&e.push(n)}return e};function sa(r){return Array.isArray(r)?Ck(r):hf(r)?kk(r):r}function Ck(r){let e=r.slice(0,0);return pf(r).forEach(t=>{ia(e,t,sa(r[t]))}),e}function kk(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return pf(r).forEach(t=>{ia(e,t,sa(r[t]))}),e}var zy=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?ia(r,o,$3(r[o],e[o],n)):ia(r,o,sa(e[o])))}),r),Pk=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)qy.call(i,a)&&(s.push(String(a)),i===r?ia(n,o++,i[a]):ia(n,o++,sa(i[a])));n=zy(n,i,pf(i).filter(a=>!s.includes(a)),t)}),n};function $3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?Pk(r,e,t):!hf(e)||!hf(r)?sa(e):zy(r,e,pf(e),t)}Gy.exports=function(...r){let e=$3(sa(Hy),this!==_k&&this||{},Hy),t={_:{}};for(let n of r)if(n!==void 0){if(!hf(n))throw new TypeError("`"+n+"` is not an Option Object");t=$3(t,{_:n},e)}return t._}});var Zy=Ct((ase,Xy)=>{"use strict";function Rk(r){return r>=55296&&r<=56319}function Dk(r){return r>=56320&&r<=57343}Xy.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],Rk(s)&&Dk(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var Jy=Ct((cse,jy)=>{"use strict";function Lk(r){return r>=55296&&r<=56319}function Nk(r){return r>=56320&&r<=57343}jy.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),Nk(o)?i!=null&&Lk(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var tw=Ct((lse,ew)=>{"use strict";var Ok=Zy(),Mk=Jy();ew.exports=Ok.bind(null,Mk)});var ow=Ct((use,nw)=>{"use strict";var Bk=tw(),Uk=/[\/\?<>\\:\*\|"]/g,Fk=/[\x00-\x1f\x80-\x9f]/g,Vk=/^\.+$/,$k=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Kk=/[\. ]+$/;function rw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(Uk,e).replace(Fk,e).replace(Vk,e).replace($k,e).replace(Kk,e);return Bk(t,255)}nw.exports=function(r,e){var t=e&&e.replacement||"",n=rw(r,t);return t===""?n:rw(n,"")}});var iw=Ct(la=>{"use strict";var qk="[object ArrayBuffer]",Zn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===qk}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},K3="string",zk=/^[0-9a-f\s]+$/i,Wk=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Gk=/^[a-zA-Z0-9-_]+$/,gf=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Zn.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Nr=class{static toString(e,t=!1){let n=Zn.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},yf=class r{static isHex(e){return typeof e===K3&&zk.test(e)}static isBase64(e){return typeof e===K3&&Wk.test(e)}static isBase64Url(e){return typeof e===K3&&Gk.test(e)}static ToString(e,t="utf8"){let n=Zn.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return Nr.toString(n,!0);case"utf16":case"utf16be":return Nr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return Nr.fromString(e,!0);case"utf16":case"utf16be":return Nr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Zn.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return gf.fromString(e);case"utf16":case"utf16be":return Nr.fromString(e);case"utf16le":case"usc2":return Nr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return gf.toString(e);case"utf16":case"utf16be":return Nr.toString(e);case"utf16le":case"usc2":return Nr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Zn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Zn.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return Nr.toString(e,t)}static FromUtf16String(e,t=!1){return Nr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};yf.DEFAULT_UTF8_ENCODING="utf8";function Qk(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function Yk(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function Xk(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}la.BufferSourceConverter=Zn;la.Convert=yf;la.assign=Qk;la.combine=Yk;la.isEqual=Xk});var Kb=Ct(Th=>{"use strict";Object.defineProperty(Th,"__esModule",{value:!0});var p4=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},Ih=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new p4;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};Th.EventIterator=Ih;Th.default=Ih});var Hb=Ct(rl=>{"use strict";Object.defineProperty(rl,"__esModule",{value:!0});var m4=Kb();rl.EventIterator=m4.EventIterator;function $P(r,e,t){return new m4.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}rl.subscribe=$P;rl.default=m4.EventIterator});var Nx=Ct((vfe,Lx)=>{function Mr(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}Lx.exports=Mr;Mr.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Mr.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Mr.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Mr.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Mr.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Mr.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Mr.prototype.start=Mr.prototype.try;Mr.prototype.errors=function(){return this._errors};Mr.prototype.attempts=function(){return this._attempts};Mr.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var Ox=Ct(Yi=>{var TR=Nx();Yi.operation=function(r){var e=Yi.timeouts(r);return new TR(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Yi.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};Yi.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};Yi.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=Yi.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var Bx=Ct((Afe,Mx)=>{Mx.exports=Ox()});var GR={};Xe(GR,{DEFAULT_SESSION_MAX_PROVIDERS:()=>Tp,DEFAULT_SESSION_MIN_PROVIDERS:()=>Ip,InsufficientProvidersError:()=>cc,NoRoutersAvailableError:()=>Po,UnknownCodecError:()=>uc,UnknownHashAlgorithmError:()=>lc,createHelia:()=>zR,libp2pDefaults:()=>Ph});var Z4=Symbol.for("@libp2p/connection");var hn=Symbol.for("@libp2p/content-routing");var Xo=Symbol.for("@libp2p/peer-discovery");var ul=Symbol.for("@libp2p/peer-id");function dl(r){return!!r?.[ul]}var pn=Symbol.for("@libp2p/peer-routing");var io="keep-alive";var so=Symbol.for("@libp2p/transport");var Zo;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(Zo||(Zo={}));var Kt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},fl=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}};var P=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},kn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},wa=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var hl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Zi=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},ji=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},mn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},pl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},jo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ce=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},Ji=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},ao=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},ml=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},co=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Pn=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},he=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},gl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},gn=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Ur=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Rn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Jo=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},es=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},yl=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},lo=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Fr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var me=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function wl(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function mt(...r){let e=[];for(let t of r)wl(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function kt(...r){let e=[];for(let t of r)wl(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Ae=Symbol.for("@libp2p/service-capabilities"),dr=Symbol.for("@libp2p/service-dependencies");function le(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var bl=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},ts=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new bl(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new bl(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var w0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Pt(r={}){return cE(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function cE(r,e){e=e??{};let t=e.onEnd,n=new ts,o,i,s,a=J(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((m,y)=>{i=x=>{i=null,n.push(x);try{m(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=m=>i!=null?i(m):(n.push(m),o),u=m=>(n=new ts,i!=null?i({error:m}):(n.push({error:m}),o)),d=m=>{if(s)return o;if(e?.objectMode!==!0&&m?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:m})},f=m=>s?o:(s=!0,m!=null?u(m):l({done:!0})),h=()=>(n=new ts,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async m=>{let y=m?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let x,w;y!=null&&(x=new Promise((I,M)=>{w=()=>{M(new w0)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,x])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(m){return g.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(m){return g.end(m),t!=null&&(t(m),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:m=>g.onEmpty(m)},o}var b0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function lt(r,e,t,n){let o=new b0(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(f){a(),s(f);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var xl=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},El=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var vl=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function et(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new vl(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new vl(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Sl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=J(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Kt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function lE(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Al=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=lE(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new Kt),this.cleanup())}async join(e={}){let t=new Sl(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await et(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var Ht=class extends me{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new El;let n=new Al(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Kt)}),this.clear()}async onEmpty(e){this.size!==0&&await lt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await lt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await lt(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Pt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new Kt("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var gt=class extends Ht{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function uE(r){return r[Symbol.asyncIterator]!=null}function dE(r){if(uE(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Rt=dE;function ae(r=0){return new Uint8Array(r)}function Be(r=0){return new Uint8Array(r)}var fE=Math.pow(2,7),hE=Math.pow(2,14),pE=Math.pow(2,21),x0=Math.pow(2,28),E0=Math.pow(2,35),v0=Math.pow(2,42),S0=Math.pow(2,49),_e=128,Dt=127;function ue(r){if(r<fE)return 1;if(r<hE)return 2;if(r<pE)return 3;if(r<x0)return 4;if(r<E0)return 5;if(r<v0)return 6;if(r<S0)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function A0(r,e,t=0){switch(ue(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function mE(r,e,t=0){switch(ue(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function I0(r,e){let t=r[e],n=0;if(n+=t&Dt,t<_e||(t=r[e+1],n+=(t&Dt)<<7,t<_e)||(t=r[e+2],n+=(t&Dt)<<14,t<_e)||(t=r[e+3],n+=(t&Dt)<<21,t<_e)||(t=r[e+4],n+=(t&Dt)*x0,t<_e)||(t=r[e+5],n+=(t&Dt)*E0,t<_e)||(t=r[e+6],n+=(t&Dt)*v0,t<_e)||(t=r[e+7],n+=(t&Dt)*S0,t<_e))return n;throw new RangeError("Could not decode varint")}function gE(r,e){let t=r.get(e),n=0;if(n+=t&Dt,t<_e||(t=r.get(e+1),n+=(t&Dt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Dt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Dt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Dt)*x0,t<_e)||(t=r.get(e+5),n+=(t&Dt)*E0,t<_e)||(t=r.get(e+6),n+=(t&Dt)*v0,t<_e)||(t=r.get(e+7),n+=(t&Dt)*S0,t<_e))return n;throw new RangeError("Could not decode varint")}function De(r,e,t=0){return e==null&&(e=Be(ue(r))),e instanceof Uint8Array?A0(r,e,t):mE(r,e,t)}function yt(r,e=0){return r instanceof Uint8Array?I0(r,e):gE(r,e)}function ke(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Be(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function j(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var J4=Symbol.for("@achingbrain/uint8arraylist");function j4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function rs(r){return!!r?.[J4]}var ee=class r{bufs;length;[J4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(rs(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(rs(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=j4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=j4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(rs(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return ke(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:ke(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!rs(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Be(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=ae(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=ae(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=ae(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Be(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=ae(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=ae(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=ae(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=ae(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=ae(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!j(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var Il=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},ns=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Tl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},ba=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function _l(r){return r[Symbol.asyncIterator]!=null}function eg(r,e){if(r.byteLength>e)throw new ns("Message length too long")}var kl=r=>{let e=ue(r),t=Be(e);return De(r,t),kl.bytes=e,t};kl.bytes=0;function Vr(r,e){e=e??{};let t=e.lengthEncoder??kl,n=e?.maxDataLength??4194304;function*o(i){eg(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return _l(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}Vr.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??kl,n=e?.maxDataLength??4194304;return eg(r,n),new ee(t(r.byteLength),r)};var ei;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ei||(ei={}));var T0=r=>{let e=yt(r);return T0.bytes=ue(e),e};T0.bytes=0;function Dn(r,e){let t=new ee,n=ei.LENGTH,o=-1,i=e?.lengthDecoder??T0,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ei.LENGTH)try{if(o=i(t),o<0)throw new Il("Invalid message length");if(o>a)throw new ns("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ei.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Tl("Message length length too long");break}throw l}if(n===ei.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ei.LENGTH}}}return _l(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ba("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new ba("Unexpected end of input")}()}Dn.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Dn(n,{...e??{},onLength:i=>{t=i}})};function bE(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var os=bE;function xE(r){return r[Symbol.asyncIterator]!=null}function EE(r,e){let t=0;if(xE(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=os(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var jt=EE;function vE(r){return r[Symbol.asyncIterator]!=null}async function SE(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)e.push(n)})),e.end()}catch(t){e.end(t)}}async function*AE(r){let e=Pt({objectMode:!0});SE(r,e).catch(()=>{}),yield*e}function*IE(r){for(let e of r)yield*e}function TE(...r){let e=[];for(let t of r)vE(t)||e.push(t);return e.length===r.length?IE(e):AE(r)}var qt=TE;function ut(r,...e){if(r==null)throw new Error("Empty pipeline");if(C0(r)){let n=r;r=()=>n.source}else if(rg(r)||tg(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&C0(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)C0(t[n])&&(t[n]=CE(t[n]));return _E(...t)}var _E=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},tg=r=>r?.[Symbol.asyncIterator]!=null,rg=r=>r?.[Symbol.iterator]!=null,C0=r=>r==null?!1:r.sink!=null&&r.source!=null,CE=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Pt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(tg(i))o=async function*(){yield*i,n.end()};else if(rg(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return qt(n,o())}return r.source};function kE(r){return r[Symbol.asyncIterator]!=null}function PE(r,e){return kE(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var uo=PE;var W=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var xa="/ipfs/bitswap/1.2.0";var k0=new Float32Array([-0]),fo=new Uint8Array(k0.buffer);function ng(r,e,t){k0[0]=r,e[t]=fo[0],e[t+1]=fo[1],e[t+2]=fo[2],e[t+3]=fo[3]}function og(r,e){return fo[0]=r[e],fo[1]=r[e+1],fo[2]=r[e+2],fo[3]=r[e+3],k0[0]}var P0=new Float64Array([-0]),Lt=new Uint8Array(P0.buffer);function ig(r,e,t){P0[0]=r,e[t]=Lt[0],e[t+1]=Lt[1],e[t+2]=Lt[2],e[t+3]=Lt[3],e[t+4]=Lt[4],e[t+5]=Lt[5],e[t+6]=Lt[6],e[t+7]=Lt[7]}function sg(r,e){return Lt[0]=r[e],Lt[1]=r[e+1],Lt[2]=r[e+2],Lt[3]=r[e+3],Lt[4]=r[e+4],Lt[5]=r[e+5],Lt[6]=r[e+6],Lt[7]=r[e+7],P0[0]}var RE=BigInt(Number.MAX_SAFE_INTEGER),DE=BigInt(Number.MIN_SAFE_INTEGER),fr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return ti;if(e<RE&&e>DE)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>ag&&(o=0n,++n>ag&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return ti;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):ti}},ti=new fr(0,0);ti.toBigInt=function(){return 0n};ti.zzEncode=ti.zzDecode=function(){return this};ti.length=function(){return 1};var ag=4294967296n;function cg(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function lg(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function R0(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function $r(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Pl(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var D0=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,$r(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw $r(this,4);return Pl(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw $r(this,4);return Pl(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw $r(this,4);let e=og(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw $r(this,4);let e=sg(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw $r(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return lg(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw $r(this,e);this.pos+=e}else do if(this.pos>=this.len)throw $r(this);while((this.buf[this.pos++]&128)!==0);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new fr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw $r(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw $r(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw $r(this,8);let e=Pl(this.buf,this.pos+=4),t=Pl(this.buf,this.pos+=4);return new fr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=I0(this.buf,this.pos);return this.pos+=ue(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function L0(r){return new D0(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=L0(r);return e.decode(n,void 0,t)}var F0={};Xe(F0,{base10:()=>UE});var qL=new Uint8Array(0);function dg(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function Kr(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function fg(r){return new TextEncoder().encode(r)}function hg(r){return new TextDecoder().decode(r)}function LE(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function d(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var g=0,m=0,y=0,x=p.length;y!==x&&p[y]===0;)y++,g++;for(var w=(x-y)*u+1>>>0,I=new Uint8Array(w);y!==x;){for(var M=p[y],D=0,R=w-1;(M!==0||D<m)&&R!==-1;R--,D++)M+=256*I[R]>>>0,I[R]=M%a>>>0,M=M/a>>>0;if(M!==0)throw new Error("Non-zero carry");m=D,y++}for(var S=w-m;S!==w&&I[S]===0;)S++;for(var A=c.repeat(g);S<w;++S)A+=r.charAt(I[S]);return A}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var m=0,y=0;p[g]===c;)m++,g++;for(var x=(p.length-g)*l+1>>>0,w=new Uint8Array(x);p[g];){var I=t[p.charCodeAt(g)];if(I===255)return;for(var M=0,D=x-1;(I!==0||M<y)&&D!==-1;D--,M++)I+=a*w[D]>>>0,w[D]=I%256>>>0,I=I/256>>>0;if(I!==0)throw new Error("Non-zero carry");y=M,g++}if(p[g]!==" "){for(var R=x-y;R!==x&&w[R]===0;)R++;for(var S=new Uint8Array(m+(x-R)),A=m;R!==x;)S[A++]=w[R++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var NE=LE,OE=NE,pg=OE;var O0=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},M0=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return mg(this,e)}},B0=class{decoders;constructor(e){this.decoders=e}or(e){return mg(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function mg(r,e){return new B0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var U0=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new O0(e,t,n),this.decoder=new M0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function is({name:r,prefix:e,encode:t,decode:n}){return new U0(r,e,t,n)}function ho({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=pg(t,r);return is({prefix:e,name:r,encode:n,decode:i=>Kr(o(i))})}function ME(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function BE(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function je({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return is({prefix:e,name:r,encode(o){return BE(o,n,t)},decode(o){return ME(o,n,t,r)}})}var UE=ho({prefix:"9",name:"base10",alphabet:"0123456789"});var V0={};Xe(V0,{base16:()=>FE,base16upper:()=>VE});var FE=je({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),VE=je({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var $0={};Xe($0,{base2:()=>$E});var $E=je({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var K0={};Xe(K0,{base256emoji:()=>WE});var gg=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),KE=gg.reduce((r,e,t)=>(r[t]=e,r),[]),HE=gg.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function qE(r){return r.reduce((e,t)=>(e+=KE[t],e),"")}function zE(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=HE[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var WE=is({prefix:"\u{1F680}",name:"base256emoji",encode:qE,decode:zE});var H0={};Xe(H0,{base32:()=>at,base32hex:()=>XE,base32hexpad:()=>jE,base32hexpadupper:()=>JE,base32hexupper:()=>ZE,base32pad:()=>QE,base32padupper:()=>YE,base32upper:()=>GE,base32z:()=>ev});var at=je({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),GE=je({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),QE=je({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),YE=je({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),XE=je({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),ZE=je({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),jE=je({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),JE=je({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),ev=je({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var q0={};Xe(q0,{base36:()=>yn,base36upper:()=>tv});var yn=ho({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),tv=ho({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var z0={};Xe(z0,{base58btc:()=>be,base58flickr:()=>rv});var be=ho({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),rv=ho({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var W0={};Xe(W0,{base64:()=>ot,base64pad:()=>nv,base64url:()=>Ea,base64urlpad:()=>ov});var ot=je({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),nv=je({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),Ea=je({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),ov=je({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var G0={};Xe(G0,{base8:()=>iv});var iv=je({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Q0={};Xe(Q0,{identity:()=>sv});var sv=is({prefix:"\0",name:"identity",encode:r=>hg(r),decode:r=>fg(r)});var Rl={};Xe(Rl,{code:()=>Y0,decode:()=>dv,encode:()=>uv,name:()=>lv});var av=new TextEncoder,cv=new TextDecoder,lv="json",Y0=512;function uv(r){return av.encode(JSON.stringify(r))}function dv(r){return JSON.parse(cv.decode(r))}var ss={};Xe(ss,{code:()=>ri,decode:()=>pv,encode:()=>hv,name:()=>fv});var fv="raw",ri=85;function hv(r){return Kr(r)}function pv(r){return Kr(r)}var j0={};Xe(j0,{identity:()=>Jt});var He={};Xe(He,{Digest:()=>ni,create:()=>Nt,decode:()=>ve,equals:()=>Z0,hasCode:()=>Lv});var mv=bg,yg=128,gv=127,yv=~gv,wv=Math.pow(2,31);function bg(r,e,t){e=e||[],t=t||0;for(var n=t;r>=wv;)e[t++]=r&255|yg,r/=128;for(;r&yv;)e[t++]=r&255|yg,r>>>=7;return e[t]=r|0,bg.bytes=t-n+1,e}var bv=X0,xv=128,wg=127;function X0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw X0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&wg)<<o:(s&wg)*Math.pow(2,o),o+=7}while(s>=xv);return X0.bytes=i-n,t}var Ev=Math.pow(2,7),vv=Math.pow(2,14),Sv=Math.pow(2,21),Av=Math.pow(2,28),Iv=Math.pow(2,35),Tv=Math.pow(2,42),_v=Math.pow(2,49),Cv=Math.pow(2,56),kv=Math.pow(2,63),Pv=function(r){return r<Ev?1:r<vv?2:r<Sv?3:r<Av?4:r<Iv?5:r<Tv?6:r<_v?7:r<Cv?8:r<kv?9:10},Rv={encode:mv,decode:bv,encodingLength:Pv},Dv=Rv,va=Dv;function Sa(r,e=0){return[va.decode(r,e),va.decode.bytes]}function as(r,e,t=0){return va.encode(r,e,t),e}function cs(r){return va.encodingLength(r)}function Nt(r,e){let t=e.byteLength,n=cs(r),o=n+cs(t),i=new Uint8Array(o+t);return as(r,i,0),as(t,i,n),i.set(e,o),new ni(r,t,e,i)}function ve(r){let e=Kr(r),[t,n]=Sa(e),[o,i]=Sa(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new ni(t,o,s,e)}function Z0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&dg(r.bytes,t.bytes)}}var ni=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function Lv(r,e){return r.code===e}var xg=0,Nv="identity",Eg=Kr;function Ov(r){return Nt(xg,Eg(r))}var Jt={code:xg,name:Nv,encode:Eg,digest:Ov};var t2={};Xe(t2,{sha256:()=>Qe,sha512:()=>Ll});function e2({name:r,code:e,encode:t}){return new J0(r,e,t)}var J0=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Nt(this.code,t):t.then(n=>Nt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function Sg(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Qe=e2({name:"sha2-256",code:18,encode:Sg("SHA-256")}),Ll=e2({name:"sha2-512",code:19,encode:Sg("SHA-512")});function Ag(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Bv(t,r2(r),e??be.encoder);default:return Uv(t,r2(r),e??at.encoder)}}var Ig=new WeakMap;function r2(r){let e=Ig.get(r);if(e==null){let t=new Map;return Ig.set(r,t),t}return e}var Q=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Aa)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==Fv)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Nt(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Z0(e.multihash,n.multihash)}toString(e){return Ag(this,e)}toJSON(){return{"/":Ag(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??Tg(n,o,i.bytes))}else if(t[Vv]===!0){let{version:n,multihash:o,code:i}=t,s=ve(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Aa)throw new Error(`Version 0 CID must use dag-pb (code: ${Aa}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Tg(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Aa,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=Kr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new ni(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,f]=Sa(e.subarray(t));return t+=f,d},o=n(),i=Aa;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=Mv(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return r2(i).set(n,e),i}};function Mv(r,e){switch(r[0]){case"Q":{let t=e??be;return[be.prefix,t.decode(`${be.prefix}${r}`)]}case be.prefix:{let t=e??be;return[be.prefix,t.decode(r)]}case at.prefix:{let t=e??at;return[at.prefix,t.decode(r)]}case yn.prefix:{let t=e??yn;return[yn.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Bv(r,e,t){let{prefix:n}=t;if(n!==be.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function Uv(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var Aa=112,Fv=18;function Tg(r,e,t){let n=cs(r),o=n+cs(e),i=new Uint8Array(o+t.byteLength);return as(r,i,0),as(e,i,n),i.set(t,o),i}var Vv=Symbol.for("@ipld/js-cid/CID");var oi={...Q0,...$0,...G0,...F0,...V0,...H0,...q0,...z0,...W0,...K0},_N={...t2,...j0};function Cg(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var _g=Cg("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),n2=Cg("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Be(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),$v={utf8:_g,"utf-8":_g,hex:oi.base16,latin1:n2,ascii:n2,binary:n2,...oi},Nl=$v;function N(r,e="utf8"){let t=Nl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function o2(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Be(s);o+s>e&&(n=Be(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var ii=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function i2(){}var a2=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},Kv=o2();function Hv(r){return globalThis.Buffer!=null?Be(r):Kv(r)}var Ta=class{len;head;tail;states;constructor(){this.len=0,this.head=new ii(i2,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ii(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new c2((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Ol,10,fr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=fr.fromBigInt(e);return this._push(Ol,t.length(),t)}uint64Number(e){return this._push(A0,ue(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=fr.fromBigInt(e).zzEncode();return this._push(Ol,t.length(),t)}sint64Number(e){let t=fr.fromNumber(e).zzEncode();return this._push(Ol,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(s2,1,e?1:0)}fixed32(e){return this._push(Ia,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=fr.fromBigInt(e);return this._push(Ia,4,t.lo)._push(Ia,4,t.hi)}fixed64Number(e){let t=fr.fromNumber(e);return this._push(Ia,4,t.lo)._push(Ia,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(ng,4,e)}double(e){return this._push(ig,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(s2,1,0):this.uint32(t)._push(zv,t,e)}string(e){let t=cg(e);return t!==0?this.uint32(t)._push(R0,t,e):this._push(s2,1,0)}fork(){return this.states=new a2(this),this.head=this.tail=new ii(i2,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new ii(i2,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=Hv(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function s2(r,e,t){e[t]=r&255}function qv(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var c2=class extends ii{next;constructor(e,t){super(qv,e,t),this.next=void 0}};function Ol(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function Ia(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function zv(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Ta.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(Wv,e,r),this},Ta.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(Gv,e,r),this});function Wv(r,e,t){e.set(r,t)}function Gv(r,e,t){r.length<40?R0(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(N(r),t)}function l2(){return new Ta}function re(r,e){let t=l2();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var ls;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(ls||(ls={}));function Ml(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function qe(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Ml("enum",ls.VARINT,t,n)}function ne(r,e){return Ml("message",ls.LENGTH_DELIMITED,r,e)}var Ue=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},_a=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var tt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(tt||(tt={}));var u2;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(u2||(u2={}));(function(r){r.codec=()=>qe(u2)})(tt||(tt={}));var us;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),tt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ae(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=tt.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(us||(us={}));var Bl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),us.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new Ue('Decode error - map field "entries" had too many elements');i.entries.push(us.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Bl||(Bl={}));var ds;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:ae(0),data:ae(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ds||(ds={}));var Sr;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Sr||(Sr={}));var Ul;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(Ul||(Ul={}));(function(r){r.codec=()=>qe(Ul)})(Sr||(Sr={}));var fs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&Ul[t.type]!==0&&(n.uint32(16),Sr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ae(0),type:Sr.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Sr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fs||(fs={}));var si;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Bl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),ds.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),fs.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=Bl.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new Ue('Decode error - map field "blocks" had too many elements');i.blocks.push(ds.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new Ue('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(fs.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(si||(si={}));function kg(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var Fl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var Qv=4193648,Yv=Qv+16;function*Pg(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=si.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=d2(o,l.blocks,a,e,u,Xv);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=d2(n,l.blockPresences,s,e,u,Zv)),s+=d,u=h;let g=f;if({added:d,hasMore:f,newSize:h}=d2(t,l.wantlist.entries,i,e,u,jv),i+=d,u=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield si.encode(l),c)break}}function d2(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>Yv)throw new Fl("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function Xv(r){return f2(3,ds.encode(r))}function Zv(r){return f2(4,fs.encode(r))}function jv(r){return f2(1,us.encode(r))}function f2(r,e){let t=ue(r),n=ue(e.byteLength);return t+n+e.byteLength}var Vl=class extends me{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[xa],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new gt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new gn(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await ut(t,s=>Dn(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=si.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new W("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Rt(jt(uo(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=kg(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new P("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new W("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,xa,i);await a.closeRead();try{await ut(Pg(s,this.maxOutgoingMessageSize),c=>Vr(c),a),await a.close(i)}catch(c){i?.onProgress?.(new W("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Ur("Network isn't running");t?.onProgress?.(new W("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),lt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(xa))return!0;throw new Pn(`${e} did not support ${xa}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function po(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function aS(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function hs(r,...e){if(!aS(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ai(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");po(r.outputLen),po(r.blockLen)}function ps(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Rg(r,e){hs(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var ci=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function li(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function Hr(r,e){return r<<32-e|r>>>e}function $l(r,e){return r<<e|r>>>32-e>>>0}var cS=async()=>{};async function Dg(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await cS(),n+=i)}}function Lg(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function qr(r){return typeof r=="string"&&(r=Lg(r)),hs(r),r}function h2(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];hs(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var ms=class{clone(){return this._cloneInto()}};function Ng(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function gs(r){let e=n=>r().update(qr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function ui(r=32){if(ci&&typeof ci.getRandomValues=="function")return ci.getRandomValues(new Uint8Array(r));if(ci&&typeof ci.randomBytes=="function")return ci.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function lS(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function Kl(r,e,t){return r&e^~r&t}function Hl(r,e,t){return r&e^r&t^e&t}var mo=class extends ms{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=li(this.buffer)}update(e){ps(this);let{view:t,buffer:n,blockLen:o}=this;e=qr(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=li(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ps(this),Rg(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;lS(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=li(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var ql=BigInt(4294967295),p2=BigInt(32);function Og(r,e=!1){return e?{h:Number(r&ql),l:Number(r>>p2&ql)}:{h:Number(r>>p2&ql)|0,l:Number(r&ql)|0}}function uS(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=Og(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var dS=(r,e)=>BigInt(r>>>0)<<p2|BigInt(e>>>0),fS=(r,e,t)=>r>>>t,hS=(r,e,t)=>r<<32-t|e>>>t,pS=(r,e,t)=>r>>>t|e<<32-t,mS=(r,e,t)=>r<<32-t|e>>>t,gS=(r,e,t)=>r<<64-t|e>>>t-32,yS=(r,e,t)=>r>>>t-32|e<<64-t,wS=(r,e)=>e,bS=(r,e)=>r,xS=(r,e,t)=>r<<t|e>>>32-t,ES=(r,e,t)=>e<<t|r>>>32-t,vS=(r,e,t)=>e<<t-32|r>>>64-t,SS=(r,e,t)=>r<<t-32|e>>>64-t;function AS(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var IS=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),TS=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,_S=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),CS=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,kS=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),PS=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var RS={fromBig:Og,split:uS,toBig:dS,shrSH:fS,shrSL:hS,rotrSH:pS,rotrSL:mS,rotrBH:gS,rotrBL:yS,rotr32H:wS,rotr32L:bS,rotlSH:xS,rotlSL:ES,rotlBH:vS,rotlBL:SS,add:AS,add3L:IS,add3H:TS,add4L:_S,add4H:CS,add5H:PS,add5L:kS},de=RS;var[DS,LS]=de.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),go=new Uint32Array(80),yo=new Uint32Array(80),m2=class extends mo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=m|0}process(e,t){for(let w=0;w<16;w++,t+=4)go[w]=e.getUint32(t),yo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let I=go[w-15]|0,M=yo[w-15]|0,D=de.rotrSH(I,M,1)^de.rotrSH(I,M,8)^de.shrSH(I,M,7),R=de.rotrSL(I,M,1)^de.rotrSL(I,M,8)^de.shrSL(I,M,7),S=go[w-2]|0,A=yo[w-2]|0,F=de.rotrSH(S,A,19)^de.rotrBH(S,A,61)^de.shrSH(S,A,6),L=de.rotrSL(S,A,19)^de.rotrBL(S,A,61)^de.shrSL(S,A,6),U=de.add4L(R,L,yo[w-7],yo[w-16]),K=de.add4H(U,D,F,go[w-7],go[w-16]);go[w]=K|0,yo[w]=U|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:y,Hl:x}=this;for(let w=0;w<80;w++){let I=de.rotrSH(d,f,14)^de.rotrSH(d,f,18)^de.rotrBH(d,f,41),M=de.rotrSL(d,f,14)^de.rotrSL(d,f,18)^de.rotrBL(d,f,41),D=d&h^~d&g,R=f&p^~f&m,S=de.add5L(x,M,R,LS[w],yo[w]),A=de.add5H(S,y,I,D,DS[w],go[w]),F=S|0,L=de.rotrSH(n,o,28)^de.rotrBH(n,o,34)^de.rotrBH(n,o,39),U=de.rotrSL(n,o,28)^de.rotrBL(n,o,34)^de.rotrBL(n,o,39),K=n&i^n&a^i&a,C=o&s^o&c^s&c;y=g|0,x=m|0,g=h|0,m=p|0,h=d|0,p=f|0,{h:d,l:f}=de.add(l|0,u|0,A|0,F|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let k=de.add3L(F,U,C);n=de.add3H(k,A,L,K),o=k|0}({h:n,l:o}=de.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=de.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=de.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=de.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=de.add(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=de.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=de.add(this.Gh|0,this.Gl|0,g|0,m|0),{h:y,l:x}=de.add(this.Hh|0,this.Hl|0,y|0,x|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,g,m,y,x)}roundClean(){go.fill(0),yo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var wo=gs(()=>new m2);var Gl={};Xe(Gl,{aInRange:()=>wt,abool:()=>zr,abytes:()=>ys,bitGet:()=>FS,bitLen:()=>b2,bitMask:()=>ka,bitSet:()=>VS,bytesToHex:()=>Nn,bytesToNumberBE:()=>On,bytesToNumberLE:()=>Wr,concatBytes:()=>Bn,createHmacDrbg:()=>x2,ensureBytes:()=>Le,equalBytes:()=>BS,hexToBytes:()=>fi,hexToNumber:()=>w2,inRange:()=>Ca,isBytes:()=>bo,memoized:()=>hi,notImplemented:()=>KS,numberToBytesBE:()=>xo,numberToBytesLE:()=>Mn,numberToHexUnpadded:()=>di,numberToVarBytesBE:()=>MS,utf8ToBytes:()=>US,validateObject:()=>Ar});var zl=BigInt(0),Wl=BigInt(1),NS=BigInt(2);function bo(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function ys(r){if(!bo(r))throw new Error("Uint8Array expected")}function zr(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var OS=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Nn(r){ys(r);let e="";for(let t=0;t<r.length;t++)e+=OS[r[t]];return e}function di(r){let e=r.toString(16);return e.length&1?"0"+e:e}function w2(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?zl:BigInt("0x"+r)}var Ln={_0:48,_9:57,A:65,F:70,a:97,f:102};function Mg(r){if(r>=Ln._0&&r<=Ln._9)return r-Ln._0;if(r>=Ln.A&&r<=Ln.F)return r-(Ln.A-10);if(r>=Ln.a&&r<=Ln.f)return r-(Ln.a-10)}function fi(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=Mg(r.charCodeAt(i)),a=Mg(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function On(r){return w2(Nn(r))}function Wr(r){return ys(r),w2(Nn(Uint8Array.from(r).reverse()))}function xo(r,e){return fi(r.toString(16).padStart(e*2,"0"))}function Mn(r,e){return xo(r,e).reverse()}function MS(r){return fi(di(r))}function Le(r,e,t){let n;if(typeof e=="string")try{n=fi(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(bo(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function Bn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ys(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function BS(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function US(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var g2=r=>typeof r=="bigint"&&zl<=r;function Ca(r,e,t){return g2(r)&&g2(e)&&g2(t)&&e<=r&&r<t}function wt(r,e,t,n){if(!Ca(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function b2(r){let e;for(e=0;r>zl;r>>=Wl,e+=1);return e}function FS(r,e){return r>>BigInt(e)&Wl}function VS(r,e,t){return r|(t?Wl:zl)<<BigInt(e)}var ka=r=>(NS<<BigInt(r-1))-Wl,y2=r=>new Uint8Array(r),Bg=r=>Uint8Array.from(r);function x2(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=y2(r),o=y2(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=y2())=>{o=a(Bg([0]),d),n=a(),d.length!==0&&(o=a(Bg([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,f=[];for(;d<e;){n=a();let h=n.slice();f.push(h),d+=n.length}return Bn(...f)};return(d,f)=>{s(),c(d);let h;for(;!(h=f(l()));)c();return s(),h}}var $S={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||bo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function Ar(r,e,t={}){let n=(o,i,s)=>{let a=$S[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}var KS=()=>{throw new Error("not implemented")};function hi(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var ct=BigInt(0),ze=BigInt(1),pi=BigInt(2),HS=BigInt(3),E2=BigInt(4),Ug=BigInt(5),Fg=BigInt(8),qS=BigInt(9),zS=BigInt(16);function Ie(r,e){let t=r%e;return t>=ct?t:e+t}function v2(r,e,t){if(e<ct)throw new Error("invalid exponent, negatives unsupported");if(t<=ct)throw new Error("invalid modulus");if(t===ze)return ct;let n=ze;for(;e>ct;)e&ze&&(n=n*r%t),r=r*r%t,e>>=ze;return n}function Fe(r,e,t){let n=r;for(;e-- >ct;)n*=n,n%=t;return n}function Ql(r,e){if(r===ct)throw new Error("invert: expected non-zero number");if(e<=ct)throw new Error("invert: expected positive modulus, got "+e);let t=Ie(r,e),n=e,o=ct,i=ze,s=ze,a=ct;for(;t!==ct;){let l=n/t,u=n%t,d=o-s*l,f=i-a*l;n=t,t=u,o=s,i=a,s=d,a=f}if(n!==ze)throw new Error("invert: does not exist");return Ie(o,e)}function WS(r){let e=(r-ze)/pi,t,n,o;for(t=r-ze,n=0;t%pi===ct;t/=pi,n++);for(o=pi;o<r&&v2(o,e,r)!==r-ze;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+ze)/E2;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+ze)/pi;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=a.pow(c,i),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let g=a.sqr(f);h<l&&!a.eql(g,a.ONE);h++)g=a.sqr(g);let p=a.pow(u,ze<<BigInt(l-h-1));u=a.sqr(p),d=a.mul(d,p),f=a.mul(f,u),l=h}return d}}function GS(r){if(r%E2===HS){let e=(r+ze)/E2;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%Fg===Ug){let e=(r-Ug)/Fg;return function(n,o){let i=n.mul(o,pi),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,pi),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%zS,WS(r)}var Vg=(r,e)=>(Ie(r,e)&ze)===ze,QS=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function S2(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=QS.reduce((n,o)=>(n[o]="function",n),e);return Ar(r,t)}function YS(r,e,t){if(t<ct)throw new Error("invalid exponent, negatives unsupported");if(t===ct)return r.ONE;if(t===ze)return e;let n=r.ONE,o=e;for(;t>ct;)t&ze&&(n=r.mul(n,o)),o=r.sqr(o),t>>=ze;return n}function XS(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function A2(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function Eo(r,e,t=!1,n={}){if(r<=ct)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=A2(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:ka(o),ZERO:ct,ONE:ze,create:c=>Ie(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return ct<=c&&c<r},is0:c=>c===ct,isOdd:c=>(c&ze)===ze,neg:c=>Ie(-c,r),eql:(c,l)=>c===l,sqr:c=>Ie(c*c,r),add:(c,l)=>Ie(c+l,r),sub:(c,l)=>Ie(c-l,r),mul:(c,l)=>Ie(c*l,r),pow:(c,l)=>YS(a,c,l),div:(c,l)=>Ie(c*Ql(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>Ql(c,r),sqrt:n.sqrt||(c=>(s||(s=GS(r)),s(a,c))),invertBatch:c=>XS(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Mn(c,i):xo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Wr(c):On(c)}});return Object.freeze(a)}function $g(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function I2(r){let e=$g(r);return e+Math.ceil(e/2)}function Kg(r,e,t=!1){let n=r.length,o=$g(e),i=I2(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Wr(r):On(r),a=Ie(s,e-ze)+ze;return t?Mn(a,o):xo(a,o)}var Hg=BigInt(0),Yl=BigInt(1);function T2(r,e){let t=e.negate();return r?t:e}function qg(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function _2(r,e){qg(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function ZS(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function jS(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var C2=new WeakMap,zg=new WeakMap;function k2(r){return zg.get(r)||1}function Xl(r,e){return{constTimeNegate:T2,hasPrecomputes(t){return k2(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>Hg;)n&Yl&&(o=o.add(i)),i=i.double(),n>>=Yl;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=_2(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let{windows:i,windowSize:s}=_2(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let f=0;f<i;f++){let h=f*s,p=Number(o&l);o>>=d,p>s&&(p-=u,o+=Yl);let g=h,m=h+Math.abs(p)-1,y=f%2!==0,x=p<0;p===0?c=c.add(T2(y,n[g])):a=a.add(T2(x,n[m]))}return{p:a,f:c}},wNAFUnsafe(t,n,o,i=r.ZERO){let{windows:s,windowSize:a}=_2(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let f=d*a;if(o===Hg)break;let h=Number(o&c);if(o>>=u,h>a&&(h-=l,o+=Yl),h===0)continue;let p=n[f+Math.abs(h)-1];h<0&&(p=p.negate()),i=i.add(p)}return i},getPrecomputes(t,n,o){let i=C2.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&C2.set(n,o(i))),i},wNAFCached(t,n,o){let i=k2(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=k2(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){qg(n,e),zg.set(t,n),C2.delete(t)}}}function Zl(r,e,t,n){if(ZS(t,r),jS(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=b2(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=(1<<s)-1,c=new Array(a+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let h=0;h<n.length;h++){let p=n[h],g=Number(p>>BigInt(d)&BigInt(a));c[g]=c[g].add(t[h])}let f=o;for(let h=c.length-1,p=o;h>0;h--)p=p.add(c[h]),f=f.add(p);if(u=u.add(f),d!==0)for(let h=0;h<s;h++)u=u.double()}return u}function Pa(r){return S2(r.Fp),Ar(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...A2(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Gr=BigInt(0),er=BigInt(1),jl=BigInt(2),JS=BigInt(8),eA={zip215:!0};function tA(r){let e=Pa(r);return Ar(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function Wg(r){let e=tA(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=jl<<BigInt(a*8)-er,u=t.create,d=Eo(e.n,e.nBitLength),f=e.uvRatio||((v,E)=>{try{return{isValid:!0,value:t.sqrt(v*t.inv(E))}}catch{return{isValid:!1,value:Gr}}}),h=e.adjustScalarBytes||(v=>v),p=e.domain||((v,E,_)=>{if(zr("phflag",_),E.length||_)throw new Error("Contexts/pre-hash are not supported");return v});function g(v,E){wt("coordinate "+v,E,Gr,l)}function m(v){if(!(v instanceof w))throw new Error("ExtendedPoint expected")}let y=hi((v,E)=>{let{ex:_,ey:T,ez:H}=v,q=v.is0();E==null&&(E=q?JS:t.inv(H));let X=u(_*E),ce=u(T*E),se=u(H*E);if(q)return{x:Gr,y:er};if(se!==er)throw new Error("invZ was invalid");return{x:X,y:ce}}),x=hi(v=>{let{a:E,d:_}=e;if(v.is0())throw new Error("bad point: ZERO");let{ex:T,ey:H,ez:q,et:X}=v,ce=u(T*T),se=u(H*H),fe=u(q*q),Ee=u(fe*fe),Oe=u(ce*E),Me=u(fe*u(Oe+se)),Ke=u(Ee+u(_*u(ce*se)));if(Me!==Ke)throw new Error("bad point: equation left != right (1)");let _t=u(T*H),Zt=u(q*X);if(_t!==Zt)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(E,_,T,H){this.ex=E,this.ey=_,this.ez=T,this.et=H,g("x",E),g("y",_),g("z",T),g("t",H),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(E){if(E instanceof w)throw new Error("extended point not allowed");let{x:_,y:T}=E||{};return g("x",_),g("y",T),new w(_,T,er,u(_*T))}static normalizeZ(E){let _=t.invertBatch(E.map(T=>T.ez));return E.map((T,H)=>T.toAffine(_[H])).map(w.fromAffine)}static msm(E,_){return Zl(w,d,E,_)}_setWindowSize(E){D.setWindowSize(this,E)}assertValidity(){x(this)}equals(E){m(E);let{ex:_,ey:T,ez:H}=this,{ex:q,ey:X,ez:ce}=E,se=u(_*ce),fe=u(q*H),Ee=u(T*ce),Oe=u(X*H);return se===fe&&Ee===Oe}is0(){return this.equals(w.ZERO)}negate(){return new w(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:E}=e,{ex:_,ey:T,ez:H}=this,q=u(_*_),X=u(T*T),ce=u(jl*u(H*H)),se=u(E*q),fe=_+T,Ee=u(u(fe*fe)-q-X),Oe=se+X,Me=Oe-ce,Ke=se-X,_t=u(Ee*Me),Zt=u(Oe*Ke),$t=u(Ee*Ke),fn=u(Me*Oe);return new w(_t,Zt,fn,$t)}add(E){m(E);let{a:_,d:T}=e,{ex:H,ey:q,ez:X,et:ce}=this,{ex:se,ey:fe,ez:Ee,et:Oe}=E;if(_===BigInt(-1)){let H4=u((q-H)*(fe+se)),q4=u((q+H)*(fe-se)),y0=u(q4-H4);if(y0===Gr)return this.double();let z4=u(X*jl*Oe),W4=u(ce*jl*Ee),G4=W4+z4,Q4=q4+H4,Y4=W4-z4,jx=u(G4*y0),Jx=u(Q4*Y4),eE=u(G4*Y4),tE=u(y0*Q4);return new w(jx,Jx,tE,eE)}let Me=u(H*se),Ke=u(q*fe),_t=u(ce*T*Oe),Zt=u(X*Ee),$t=u((H+q)*(se+fe)-Me-Ke),fn=Zt-_t,Cn=Zt+_t,ya=u(Ke-_*Me),Qx=u($t*fn),Yx=u(Cn*ya),Xx=u($t*ya),Zx=u(fn*Cn);return new w(Qx,Yx,Zx,Xx)}subtract(E){return this.add(E.negate())}wNAF(E){return D.wNAFCached(this,E,w.normalizeZ)}multiply(E){let _=E;wt("scalar",_,er,n);let{p:T,f:H}=this.wNAF(_);return w.normalizeZ([T,H])[0]}multiplyUnsafe(E,_=w.ZERO){let T=E;return wt("scalar",T,Gr,n),T===Gr?M:this.is0()||T===er?this:D.wNAFCachedUnsafe(this,T,w.normalizeZ,_)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return D.unsafeLadder(this,n).is0()}toAffine(E){return y(this,E)}clearCofactor(){let{h:E}=e;return E===er?this:this.multiplyUnsafe(E)}static fromHex(E,_=!1){let{d:T,a:H}=e,q=t.BYTES;E=Le("pointHex",E,q),zr("zip215",_);let X=E.slice(),ce=E[q-1];X[q-1]=ce&-129;let se=Wr(X),fe=_?l:t.ORDER;wt("pointHex.y",se,Gr,fe);let Ee=u(se*se),Oe=u(Ee-er),Me=u(T*Ee-H),{isValid:Ke,value:_t}=f(Oe,Me);if(!Ke)throw new Error("Point.fromHex: invalid y coordinate");let Zt=(_t&er)===er,$t=(ce&128)!==0;if(!_&&_t===Gr&&$t)throw new Error("Point.fromHex: x=0 and x_0=1");return $t!==Zt&&(_t=u(-_t)),w.fromAffine({x:_t,y:se})}static fromPrivateKey(E){return A(E).point}toRawBytes(){let{x:E,y:_}=this.toAffine(),T=Mn(_,t.BYTES);return T[T.length-1]|=E&er?128:0,T}toHex(){return Nn(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,er,u(e.Gx*e.Gy)),w.ZERO=new w(Gr,er,er,Gr);let{BASE:I,ZERO:M}=w,D=Xl(w,a*8);function R(v){return Ie(v,n)}function S(v){return R(Wr(v))}function A(v){let E=t.BYTES;v=Le("private key",v,E);let _=Le("hashed private key",i(v),2*E),T=h(_.slice(0,E)),H=_.slice(E,2*E),q=S(T),X=I.multiply(q),ce=X.toRawBytes();return{head:T,prefix:H,scalar:q,point:X,pointBytes:ce}}function F(v){return A(v).pointBytes}function L(v=new Uint8Array,...E){let _=Bn(...E);return S(i(p(_,Le("context",v),!!o)))}function U(v,E,_={}){v=Le("message",v),o&&(v=o(v));let{prefix:T,scalar:H,pointBytes:q}=A(E),X=L(_.context,T,v),ce=I.multiply(X).toRawBytes(),se=L(_.context,ce,q,v),fe=R(X+se*H);wt("signature.s",fe,Gr,n);let Ee=Bn(ce,Mn(fe,t.BYTES));return Le("result",Ee,t.BYTES*2)}let K=eA;function C(v,E,_,T=K){let{context:H,zip215:q}=T,X=t.BYTES;v=Le("signature",v,2*X),E=Le("message",E),_=Le("publicKey",_,X),q!==void 0&&zr("zip215",q),o&&(E=o(E));let ce=Wr(v.slice(X,2*X)),se,fe,Ee;try{se=w.fromHex(_,q),fe=w.fromHex(v.slice(0,X),q),Ee=I.multiplyUnsafe(ce)}catch{return!1}if(!q&&se.isSmallOrder())return!1;let Oe=L(H,fe.toRawBytes(),se.toRawBytes(),E);return fe.add(se.multiplyUnsafe(Oe)).subtract(Ee).clearCofactor().equals(w.ZERO)}return I._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:U,verify:C,ExtendedPoint:w,utils:{getExtendedPublicKey:A,randomPrivateKey:()=>s(t.BYTES),precompute(v=8,E=w.BASE){return E._setWindowSize(v),E.multiply(BigInt(3)),E}}}}var ws=BigInt(0),P2=BigInt(1);function rA(r){return Ar(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function Gg(r){let e=rA(r),{P:t}=e,n=x=>Ie(x,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(x=>x),c=e.powPminus2||(x=>v2(x,t-BigInt(2),t));function l(x,w,I){let M=n(x*(w-I));return w=n(w-M),I=n(I+M),[w,I]}let u=(e.a-BigInt(2))/BigInt(4);function d(x,w){wt("u",x,ws,t),wt("scalar",w,ws,t);let I=w,M=x,D=P2,R=ws,S=x,A=P2,F=ws,L;for(let K=BigInt(o-1);K>=ws;K--){let C=I>>K&P2;F^=C,L=l(F,D,S),D=L[0],S=L[1],L=l(F,R,A),R=L[0],A=L[1],F=C;let k=D+R,v=n(k*k),E=D-R,_=n(E*E),T=v-_,H=S+A,q=S-A,X=n(q*k),ce=n(H*E),se=X+ce,fe=X-ce;S=n(se*se),A=n(M*n(fe*fe)),D=n(v*_),R=n(T*(v+n(u*T)))}L=l(F,D,S),D=L[0],S=L[1],L=l(F,R,A),R=L[0],A=L[1];let U=c(R);return n(D*U)}function f(x){return Mn(n(x),i)}function h(x){let w=Le("u coordinate",x,i);return s===32&&(w[31]&=127),Wr(w)}function p(x){let w=Le("scalar",x),I=w.length;if(I!==i&&I!==s){let M=""+i+" or "+s;throw new Error("invalid scalar, expected "+M+" bytes, got "+I)}return Wr(a(w))}function g(x,w){let I=h(w),M=p(x),D=d(I,M);if(D===ws)throw new Error("invalid private or public key received");return f(D)}let m=f(e.Gu);function y(x){return g(x,m)}return{scalarMult:g,scalarMultBase:y,getSharedSecret:(x,w)=>g(x,w),getPublicKey:x=>y(x),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:m}}var Ra=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Qg=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),rM=BigInt(0),nA=BigInt(1),Yg=BigInt(2),oA=BigInt(3),iA=BigInt(5),sA=BigInt(8);function Xg(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Ra,a=r*r%i*r%i,c=Fe(a,Yg,i)*a%i,l=Fe(c,nA,i)*r%i,u=Fe(l,iA,i)*l%i,d=Fe(u,e,i)*u%i,f=Fe(d,t,i)*d%i,h=Fe(f,n,i)*f%i,p=Fe(h,o,i)*h%i,g=Fe(p,o,i)*h%i,m=Fe(g,e,i)*u%i;return{pow_p_5_8:Fe(m,Yg,i)*r%i,b2:a}}function Zg(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function aA(r,e){let t=Ra,n=Ie(e*e*e,t),o=Ie(n*n*e,t),i=Xg(r*o).pow_p_5_8,s=Ie(r*n*i,t),a=Ie(e*s*s,t),c=s,l=Ie(s*Qg,t),u=a===r,d=a===Ie(-r,t),f=a===Ie(-r*Qg,t);return u&&(s=c),(d||f)&&(s=l),Vg(s,t)&&(s=Ie(-s,t)),{isValid:u||d,value:s}}var cA=Eo(Ra,void 0,!0),lA={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:cA,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:sA,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:wo,randomBytes:ui,adjustScalarBytes:Zg,uvRatio:aA},Da=Wg(lA);var La=Gg({P:Ra,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Ra,{pow_p_5_8:t,b2:n}=Xg(r);return Ie(Fe(t,oA,e)*n,e)},adjustScalarBytes:Zg,randomBytes:ui});var bs=32,wn=64,R2=32;function jg(){let r=Da.utils.randomPrivateKey(),e=Da.getPublicKey(r);return{privateKey:uA(r,e),publicKey:e}}function Jg(r,e){let t=r.subarray(0,R2);return Da.sign(e instanceof Uint8Array?e:e.subarray(),t)}function e6(r,e,t){return Da.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function uA(r,e){let t=new Uint8Array(wn);for(let n=0;n<R2;n++)t[n]=r[n],t[R2+n]=e[n];return t}var Na=class{type="Ed25519";raw;constructor(e){this.raw=Es(e,bs)}toMultihash(){return Jt.digest(Ot(this))}toCID(){return Q.createV1(114,this.toMultihash())}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return e6(this.raw,t,e)}},xs=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Es(e,wn),this.publicKey=new Na(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return Jg(this.raw,e)}};function D2(r){if(r.length>wn){r=Es(r,wn+bs);let n=r.subarray(0,wn),o=r.subarray(wn,r.length);return new xs(n,o)}r=Es(r,wn);let e=r.subarray(0,wn),t=r.subarray(bs);return new xs(e,t)}function L2(r){return r=Es(r,bs),new Na(r)}async function r6(){let{privateKey:r,publicKey:e}=jg();return new xs(r,e)}function Es(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new P(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Ye;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Ye||(Ye={}));var N2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(N2||(N2={}));(function(r){r.codec=()=>qe(N2)})(Ye||(Ye={}));var bn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ye.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Ye.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(bn||(bn={}));var Oa;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ye.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Ye.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Oa||(Oa={}));var Fa={};Xe(Fa,{MAX_RSA_KEY_SIZE:()=>F2,generateRSAKeyPair:()=>H2,jwkToJWKKeyPair:()=>p6,jwkToPkcs1:()=>vA,jwkToPkix:()=>$2,jwkToRSAPrivateKey:()=>h6,pkcs1ToJwk:()=>d6,pkcs1ToRSAPrivateKey:()=>ru,pkixToJwk:()=>f6,pkixToRSAPublicKey:()=>K2});var dA=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),vo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),So=new Uint32Array(64),O2=class extends mo{constructor(){super(64,32,8,!1),this.A=vo[0]|0,this.B=vo[1]|0,this.C=vo[2]|0,this.D=vo[3]|0,this.E=vo[4]|0,this.F=vo[5]|0,this.G=vo[6]|0,this.H=vo[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)So[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=So[d-15],h=So[d-2],p=Hr(f,7)^Hr(f,18)^f>>>3,g=Hr(h,17)^Hr(h,19)^h>>>10;So[d]=g+So[d-7]+p+So[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=Hr(a,6)^Hr(a,11)^Hr(a,25),h=u+f+Kl(a,c,l)+dA[d]+So[d]|0,g=(Hr(n,2)^Hr(n,13)^Hr(n,22))+Hl(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){So.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ir=gs(()=>new O2);function O(r,e="utf8"){let t=Nl[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var fA=parseInt("11111",2),B2=parseInt("10000000",2),hA=parseInt("01111111",2),o6={2:pA,3:yA,5:gA,6:mA,16:M2,22:M2,48:M2};function Ma(r,e={offset:0}){let t=r[e.offset]&fA;if(e.offset++,o6[t]!=null)return o6[t](r,e);throw new Error("No decoder for tag "+t)}function Jl(r,e){let t=0;if((r[e.offset]&B2)===B2){let n=r[e.offset]&hA,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function M2(r,e){Jl(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Ma(r,e);if(n===null)break;t.push(n)}return t}function pA(r,e){let t=Jl(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function mA(r,e){let t=Jl(r,e);return e.offset+=t,["oid-unimplemented"]}function gA(r,e){return e.offset++,null}function yA(r,e){let t=Jl(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return Ma(o,{offset:0})}function wA(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ee;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function U2(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=wA(r.byteLength);return new ee(Uint8Array.from([e.byteLength|B2]),e)}function Tr(r){let e=new ee,t=parseInt("10000000",2);return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ee(Uint8Array.from([2]),U2(e),e)}function i6(r){let e=Uint8Array.from([0]),t=new ee(e,r);return new ee(Uint8Array.from([3]),U2(t),t)}function eu(r){let e=new ee;for(let t of r)e.append(t);return new ee(Uint8Array.from([48]),U2(e),e)}function zt(r){if(isNaN(r)||r<=0)throw new P("random bytes length must be a Number bigger than 0");return ui(r)}var Ba=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Ua=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},tu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var s6={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new tu("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var tr=s6;async function a6(r){let e=await tr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await bA(e);return{privateKey:t[0],publicKey:t[1]}}async function c6(r,e){let t=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await tr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function l6(r,e,t){let n=await tr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return tr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function bA(r){if(r.privateKey==null||r.publicKey==null)throw new P("Private and public key are required");return Promise.all([tr.get().subtle.exportKey("jwk",r.privateKey),tr.get().subtle.exportKey("jwk",r.publicKey)])}function u6(r){if(r.kty!=="RSA")throw new P("invalid key type");if(r.n==null)throw new P("invalid key modulus");return N(r.n,"base64url").length*8}var vs=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Fa.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return Q.createV1(114,this._multihash)}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return l6(this._key,t,e)}},Va=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Fa.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return c6(this._key,e)}};var F2=8192,V2=18,xA=1062,EA=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function d6(r){let e=Ma(r);return{n:O(e[1],"base64url"),e:O(e[2],"base64url"),d:O(e[3],"base64url"),p:O(e[4],"base64url"),q:O(e[5],"base64url"),dp:O(e[6],"base64url"),dq:O(e[7],"base64url"),qi:O(e[8],"base64url"),kty:"RSA"}}function vA(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new P("JWK was missing components");return eu([Tr(Uint8Array.from([0])),Tr(N(r.n,"base64url")),Tr(N(r.e,"base64url")),Tr(N(r.d,"base64url")),Tr(N(r.p,"base64url")),Tr(N(r.q,"base64url")),Tr(N(r.dp,"base64url")),Tr(N(r.dq,"base64url")),Tr(N(r.qi,"base64url"))]).subarray()}function f6(r){let e=Ma(r,{offset:0});return{kty:"RSA",n:O(e[1][0],"base64url"),e:O(e[1][1],"base64url")}}function $2(r){if(r.n==null||r.e==null)throw new P("JWK was missing components");return eu([EA,i6(eu([Tr(N(r.n,"base64url")),Tr(N(r.e,"base64url"))]))]).subarray()}function ru(r){let e=d6(r);return h6(e)}function K2(r,e){if(r.byteLength>=xA)throw new kn("Key size is too large");let t=f6(r);if(e==null){let n=Ir(bn.encode({Type:Ye.RSA,Data:r}));e=Nt(V2,n)}return new vs(t,e)}function h6(r){if(u6(r)>F2)throw new P("Key size is too large");let e=p6(r),t=Ir(bn.encode({Type:Ye.RSA,Data:$2(e.publicKey)})),n=Nt(V2,t);return new Va(e.privateKey,new vs(e.publicKey,n))}async function H2(r){if(r>F2)throw new P("Key size is too large");let e=await a6(r),t=Ir(bn.encode({Type:Ye.RSA,Data:$2(e.publicKey)})),n=Nt(V2,t);return new Va(e.privateKey,new vs(e.publicKey,n))}function p6(r){if(r==null)throw new P("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var nu=class extends ms{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ai(e);let n=qr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return ps(this),this.iHash.update(e),this}digestInto(e){ps(this),hs(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ao=(r,e,t)=>new nu(r,e).update(t).digest();Ao.create=(r,e)=>new nu(r,e);function m6(r){r.lowS!==void 0&&zr("lowS",r.lowS),r.prehash!==void 0&&zr("prehash",r.prehash)}function SA(r){let e=Pa(r);Ar(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:AA,hexToBytes:IA}=Gl,q2=class extends Error{constructor(e=""){super(e)}},Un={Err:q2,_tlv:{encode:(r,e)=>{let{Err:t}=Un;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=di(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?di(o.length/2|128):"";return di(r)+i+o+e},decode(r,e){let{Err:t}=Un,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Un;if(r<Fn)throw new e("integer: negative integers are not allowed");let t=di(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Un;if(r[0]&128)throw new e("invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return AA(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Un,o=typeof r=="string"?IA(r):r;ys(o);let{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Un,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Fn=BigInt(0),dt=BigInt(1),nB=BigInt(2),g6=BigInt(3),oB=BigInt(4);function TA(r){let e=SA(r),{Fp:t}=e,n=Eo(e.n,e.nBitLength),o=e.toBytes||((g,m,y)=>{let x=m.toAffine();return Bn(Uint8Array.from([4]),t.toBytes(x.x),t.toBytes(x.y))}),i=e.fromBytes||(g=>{let m=g.subarray(1),y=t.fromBytes(m.subarray(0,t.BYTES)),x=t.fromBytes(m.subarray(t.BYTES,2*t.BYTES));return{x:y,y:x}});function s(g){let{a:m,b:y}=e,x=t.sqr(g),w=t.mul(x,g);return t.add(t.add(w,t.mul(g,m)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(g){return Ca(g,dt,e.n)}function c(g){let{allowedPrivateKeyLengths:m,nByteLength:y,wrapPrivateKey:x,n:w}=e;if(m&&typeof g!="bigint"){if(bo(g)&&(g=Nn(g)),typeof g!="string"||!m.includes(g.length))throw new Error("invalid private key");g=g.padStart(y*2,"0")}let I;try{I=typeof g=="bigint"?g:On(Le("private key",g,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof g)}return x&&(I=Ie(I,w)),wt("private key",I,dt,w),I}function l(g){if(!(g instanceof f))throw new Error("ProjectivePoint expected")}let u=hi((g,m)=>{let{px:y,py:x,pz:w}=g;if(t.eql(w,t.ONE))return{x:y,y:x};let I=g.is0();m==null&&(m=I?t.ONE:t.inv(w));let M=t.mul(y,m),D=t.mul(x,m),R=t.mul(w,m);if(I)return{x:t.ZERO,y:t.ZERO};if(!t.eql(R,t.ONE))throw new Error("invZ was invalid");return{x:M,y:D}}),d=hi(g=>{if(g.is0()){if(e.allowInfinityPoint&&!t.is0(g.py))return;throw new Error("bad point: ZERO")}let{x:m,y}=g.toAffine();if(!t.isValid(m)||!t.isValid(y))throw new Error("bad point: x or y not FE");let x=t.sqr(y),w=s(m);if(!t.eql(x,w))throw new Error("bad point: equation left != right");if(!g.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(m,y,x){if(this.px=m,this.py=y,this.pz=x,m==null||!t.isValid(m))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(x==null||!t.isValid(x))throw new Error("z required");Object.freeze(this)}static fromAffine(m){let{x:y,y:x}=m||{};if(!m||!t.isValid(y)||!t.isValid(x))throw new Error("invalid affine point");if(m instanceof f)throw new Error("projective point not allowed");let w=I=>t.eql(I,t.ZERO);return w(y)&&w(x)?f.ZERO:new f(y,x,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){let y=t.invertBatch(m.map(x=>x.pz));return m.map((x,w)=>x.toAffine(y[w])).map(f.fromAffine)}static fromHex(m){let y=f.fromAffine(i(Le("pointHex",m)));return y.assertValidity(),y}static fromPrivateKey(m){return f.BASE.multiply(c(m))}static msm(m,y){return Zl(f,n,m,y)}_setWindowSize(m){p.setWindowSize(this,m)}assertValidity(){d(this)}hasEvenY(){let{y:m}=this.toAffine();if(t.isOdd)return!t.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:M,pz:D}=m,R=t.eql(t.mul(y,D),t.mul(I,w)),S=t.eql(t.mul(x,D),t.mul(M,w));return R&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:m,b:y}=e,x=t.mul(y,g6),{px:w,py:I,pz:M}=this,D=t.ZERO,R=t.ZERO,S=t.ZERO,A=t.mul(w,w),F=t.mul(I,I),L=t.mul(M,M),U=t.mul(w,I);return U=t.add(U,U),S=t.mul(w,M),S=t.add(S,S),D=t.mul(m,S),R=t.mul(x,L),R=t.add(D,R),D=t.sub(F,R),R=t.add(F,R),R=t.mul(D,R),D=t.mul(U,D),S=t.mul(x,S),L=t.mul(m,L),U=t.sub(A,L),U=t.mul(m,U),U=t.add(U,S),S=t.add(A,A),A=t.add(S,A),A=t.add(A,L),A=t.mul(A,U),R=t.add(R,A),L=t.mul(I,M),L=t.add(L,L),A=t.mul(L,U),D=t.sub(D,A),S=t.mul(L,F),S=t.add(S,S),S=t.add(S,S),new f(D,R,S)}add(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:M,pz:D}=m,R=t.ZERO,S=t.ZERO,A=t.ZERO,F=e.a,L=t.mul(e.b,g6),U=t.mul(y,I),K=t.mul(x,M),C=t.mul(w,D),k=t.add(y,x),v=t.add(I,M);k=t.mul(k,v),v=t.add(U,K),k=t.sub(k,v),v=t.add(y,w);let E=t.add(I,D);return v=t.mul(v,E),E=t.add(U,C),v=t.sub(v,E),E=t.add(x,w),R=t.add(M,D),E=t.mul(E,R),R=t.add(K,C),E=t.sub(E,R),A=t.mul(F,v),R=t.mul(L,C),A=t.add(R,A),R=t.sub(K,A),A=t.add(K,A),S=t.mul(R,A),K=t.add(U,U),K=t.add(K,U),C=t.mul(F,C),v=t.mul(L,v),K=t.add(K,C),C=t.sub(U,C),C=t.mul(F,C),v=t.add(v,C),U=t.mul(K,v),S=t.add(S,U),U=t.mul(E,v),R=t.mul(k,R),R=t.sub(R,U),U=t.mul(k,K),A=t.mul(E,A),A=t.add(A,U),new f(R,S,A)}subtract(m){return this.add(m.negate())}is0(){return this.equals(f.ZERO)}wNAF(m){return p.wNAFCached(this,m,f.normalizeZ)}multiplyUnsafe(m){let{endo:y,n:x}=e;wt("scalar",m,Fn,x);let w=f.ZERO;if(m===Fn)return w;if(this.is0()||m===dt)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,m,f.normalizeZ);let{k1neg:I,k1:M,k2neg:D,k2:R}=y.splitScalar(m),S=w,A=w,F=this;for(;M>Fn||R>Fn;)M&dt&&(S=S.add(F)),R&dt&&(A=A.add(F)),F=F.double(),M>>=dt,R>>=dt;return I&&(S=S.negate()),D&&(A=A.negate()),A=new f(t.mul(A.px,y.beta),A.py,A.pz),S.add(A)}multiply(m){let{endo:y,n:x}=e;wt("scalar",m,dt,x);let w,I;if(y){let{k1neg:M,k1:D,k2neg:R,k2:S}=y.splitScalar(m),{p:A,f:F}=this.wNAF(D),{p:L,f:U}=this.wNAF(S);A=p.constTimeNegate(M,A),L=p.constTimeNegate(R,L),L=new f(t.mul(L.px,y.beta),L.py,L.pz),w=A.add(L),I=F.add(U)}else{let{p:M,f:D}=this.wNAF(m);w=M,I=D}return f.normalizeZ([w,I])[0]}multiplyAndAddUnsafe(m,y,x){let w=f.BASE,I=(D,R)=>R===Fn||R===dt||!D.equals(w)?D.multiplyUnsafe(R):D.multiply(R),M=I(this,y).add(I(m,x));return M.is0()?void 0:M}toAffine(m){return u(this,m)}isTorsionFree(){let{h:m,isTorsionFree:y}=e;if(m===dt)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:m,clearCofactor:y}=e;return m===dt?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return zr("isCompressed",m),this.assertValidity(),o(f,this,m)}toHex(m=!0){return zr("isCompressed",m),Nn(this.toRawBytes(m))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=Xl(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function _A(r){let e=Pa(r);return Ar(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function y6(r){let e=_A(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(C){return Ie(C,n)}function a(C){return Ql(C,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=TA({...e,toBytes(C,k,v){let E=k.toAffine(),_=t.toBytes(E.x),T=Bn;return zr("isCompressed",v),v?T(Uint8Array.from([k.hasEvenY()?2:3]),_):T(Uint8Array.from([4]),_,t.toBytes(E.y))},fromBytes(C){let k=C.length,v=C[0],E=C.subarray(1);if(k===o&&(v===2||v===3)){let _=On(E);if(!Ca(_,dt,t.ORDER))throw new Error("Point is not on curve");let T=u(_),H;try{H=t.sqrt(T)}catch(ce){let se=ce instanceof Error?": "+ce.message:"";throw new Error("Point is not on curve"+se)}let q=(H&dt)===dt;return(v&1)===1!==q&&(H=t.neg(H)),{x:_,y:H}}else if(k===i&&v===4){let _=t.fromBytes(E.subarray(0,t.BYTES)),T=t.fromBytes(E.subarray(t.BYTES,2*t.BYTES));return{x:_,y:T}}else{let _=o,T=i;throw new Error("invalid Point, expected length of "+_+", or uncompressed "+T+", got "+k)}}}),f=C=>Nn(xo(C,e.nByteLength));function h(C){let k=n>>dt;return C>k}function p(C){return h(C)?s(-C):C}let g=(C,k,v)=>On(C.slice(k,v));class m{constructor(k,v,E){this.r=k,this.s=v,this.recovery=E,this.assertValidity()}static fromCompact(k){let v=e.nByteLength;return k=Le("compactSignature",k,v*2),new m(g(k,0,v),g(k,v,2*v))}static fromDER(k){let{r:v,s:E}=Un.toSig(Le("DER",k));return new m(v,E)}assertValidity(){wt("r",this.r,dt,n),wt("s",this.s,dt,n)}addRecoveryBit(k){return new m(this.r,this.s,k)}recoverPublicKey(k){let{r:v,s:E,recovery:_}=this,T=D(Le("msgHash",k));if(_==null||![0,1,2,3].includes(_))throw new Error("recovery id invalid");let H=_===2||_===3?v+e.n:v;if(H>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let q=(_&1)===0?"02":"03",X=c.fromHex(q+f(H)),ce=a(H),se=s(-T*ce),fe=s(E*ce),Ee=c.BASE.multiplyAndAddUnsafe(X,se,fe);if(!Ee)throw new Error("point at infinify");return Ee.assertValidity(),Ee}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new m(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return fi(this.toDERHex())}toDERHex(){return Un.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return fi(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(C){try{return l(C),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let C=I2(e.n);return Kg(e.randomBytes(C),e.n)},precompute(C=8,k=c.BASE){return k._setWindowSize(C),k.multiply(BigInt(3)),k}};function x(C,k=!0){return c.fromPrivateKey(C).toRawBytes(k)}function w(C){let k=bo(C),v=typeof C=="string",E=(k||v)&&C.length;return k?E===o||E===i:v?E===2*o||E===2*i:C instanceof c}function I(C,k,v=!0){if(w(C))throw new Error("first arg must be private key");if(!w(k))throw new Error("second arg must be public key");return c.fromHex(k).multiply(l(C)).toRawBytes(v)}let M=e.bits2int||function(C){if(C.length>8192)throw new Error("input is too large");let k=On(C),v=C.length*8-e.nBitLength;return v>0?k>>BigInt(v):k},D=e.bits2int_modN||function(C){return s(M(C))},R=ka(e.nBitLength);function S(C){return wt("num < 2^"+e.nBitLength,C,Fn,R),xo(C,e.nByteLength)}function A(C,k,v=F){if(["recovered","canonical"].some(Me=>Me in v))throw new Error("sign() legacy options not supported");let{hash:E,randomBytes:_}=e,{lowS:T,prehash:H,extraEntropy:q}=v;T==null&&(T=!0),C=Le("msgHash",C),m6(v),H&&(C=Le("prehashed msgHash",E(C)));let X=D(C),ce=l(k),se=[S(ce),S(X)];if(q!=null&&q!==!1){let Me=q===!0?_(t.BYTES):q;se.push(Le("extraEntropy",Me))}let fe=Bn(...se),Ee=X;function Oe(Me){let Ke=M(Me);if(!d(Ke))return;let _t=a(Ke),Zt=c.BASE.multiply(Ke).toAffine(),$t=s(Zt.x);if($t===Fn)return;let fn=s(_t*s(Ee+$t*ce));if(fn===Fn)return;let Cn=(Zt.x===$t?0:2)|Number(Zt.y&dt),ya=fn;return T&&h(fn)&&(ya=p(fn),Cn^=1),new m($t,ya,Cn)}return{seed:fe,k2sig:Oe}}let F={lowS:e.lowS,prehash:!1},L={lowS:e.lowS,prehash:!1};function U(C,k,v=F){let{seed:E,k2sig:_}=A(C,k,v),T=e;return x2(T.hash.outputLen,T.nByteLength,T.hmac)(E,_)}c.BASE._setWindowSize(8);function K(C,k,v,E=L){let _=C;k=Le("msgHash",k),v=Le("publicKey",v);let{lowS:T,prehash:H,format:q}=E;if(m6(E),"strict"in E)throw new Error("options.strict was renamed to lowS");if(q!==void 0&&q!=="compact"&&q!=="der")throw new Error("format must be compact or der");let X=typeof _=="string"||bo(_),ce=!X&&!q&&typeof _=="object"&&_!==null&&typeof _.r=="bigint"&&typeof _.s=="bigint";if(!X&&!ce)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let se,fe;try{if(ce&&(se=new m(_.r,_.s)),X){try{q!=="compact"&&(se=m.fromDER(_))}catch(Cn){if(!(Cn instanceof Un.Err))throw Cn}!se&&q!=="der"&&(se=m.fromCompact(_))}fe=c.fromHex(v)}catch{return!1}if(!se||T&&se.hasHighS())return!1;H&&(k=e.hash(k));let{r:Ee,s:Oe}=se,Me=D(k),Ke=a(Oe),_t=s(Me*Ke),Zt=s(Ee*Ke),$t=c.BASE.multiplyAndAddUnsafe(fe,_t,Zt)?.toAffine();return $t?s($t.x)===Ee:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:I,sign:U,verify:K,ProjectivePoint:c,Signature:m,utils:y}}function CA(r){return{hash:r,hmac:(e,...t)=>Ao(r,e,h2(...t)),randomBytes:ui}}function w6(r,e){let t=n=>y6({...r,...CA(n)});return{...t(e),create:t}}var E6=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),b6=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),kA=BigInt(1),z2=BigInt(2),x6=(r,e)=>(r+e/z2)/e;function PA(r){let e=E6,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=Fe(u,t,e)*u%e,f=Fe(d,t,e)*u%e,h=Fe(f,z2,e)*l%e,p=Fe(h,o,e)*h%e,g=Fe(p,i,e)*p%e,m=Fe(g,a,e)*g%e,y=Fe(m,c,e)*m%e,x=Fe(y,a,e)*g%e,w=Fe(x,t,e)*u%e,I=Fe(w,s,e)*p%e,M=Fe(I,n,e)*l%e,D=Fe(M,z2,e);if(!W2.eql(W2.sqr(D),r))throw new Error("Cannot find square root");return D}var W2=Eo(E6,void 0,void 0,{sqrt:PA}),_r=w6({a:BigInt(0),b:BigInt(7),Fp:W2,n:b6,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=b6,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-kA*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=x6(i*r,e),c=x6(-n*r,e),l=Ie(r-a*t-c*o,e),u=Ie(-a*n-c*i,e),d=l>s,f=u>s;if(d&&(l=e-l),f&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}}},Ir),hB=BigInt(0);var pB=_r.ProjectivePoint;function G2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function v6(r,e){let t=Qe.digest(e instanceof Uint8Array?e:e.subarray());if(G2(t))return t.then(({digest:n})=>_r.sign(n,r).toDERRawBytes()).catch(n=>{throw new Ba(String(n))});try{return _r.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Ba(String(n))}}function S6(r,e,t){let n=Qe.digest(t instanceof Uint8Array?t:t.subarray());if(G2(n))return n.then(({digest:o})=>_r.verify(e,o,r)).catch(o=>{throw new Ua(String(o))});try{return _r.verify(e,n.digest,r)}catch(o){throw new Ua(String(o))}}var $a=class{type="secp256k1";raw;_key;constructor(e){this._key=T6(e),this.raw=A6(this._key)}toMultihash(){return Jt.digest(Ot(this))}toCID(){return Q.createV1(114,this.toMultihash())}toString(){return be.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}verify(e,t){return S6(this._key,t,e)}},Ka=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=I6(e),this.publicKey=new $a(t??_6(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:j(this.raw,e.raw)}sign(e){return v6(this.raw,e)}};function Q2(r){return new Ka(r)}function Y2(r){return new $a(r)}async function C6(){let r=RA();return new Ka(r)}function A6(r){return _r.ProjectivePoint.fromHex(r).toRawBytes(!0)}function I6(r){try{return _r.getPublicKey(r,!0),r}catch(e){throw new wa(String(e))}}function T6(r){try{return _r.ProjectivePoint.fromHex(r),r}catch(e){throw new kn(String(e))}}function _6(r){try{return _r.getPublicKey(r,!0)}catch(e){throw new wa(String(e))}}function RA(){return _r.utils.randomPrivateKey()}async function ou(r,e){if(r==="Ed25519")return r6();if(r==="secp256k1")return C6();if(r==="RSA")return H2(e??2048);throw new Fr}function rt(r,e){let{Type:t,Data:n}=bn.decode(r),o=n??new Uint8Array;switch(t){case Ye.RSA:return K2(o,e);case Ye.Ed25519:return L2(o);case Ye.secp256k1:return Y2(o);default:throw new Fr}}function iu(r){let{Type:e,Data:t}=bn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ye.Ed25519:return L2(n);case Ye.secp256k1:return Y2(n);default:throw new Fr}}function Ot(r){return bn.encode({Type:Ye[r.type],Data:r.raw})}function k6(r){let e=Oa.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ye.RSA:return ru(t);case Ye.Ed25519:return D2(t);case Ye.secp256k1:return Q2(t);default:throw new Fr}}function P6(r){return r.byteLength===64?D2(r):r.byteLength===32?Q2(r):ru(r)}function Ss(r){return Oa.encode({Type:Ye[r.type],Data:r.raw})}var R6=Symbol.for("nodejs.util.inspect.custom"),DA=114,Ha=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[ul]=!0;toString(){return this.string==null&&(this.string=be.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return Q.createV1(DA,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return j(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return j(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[R6](){return`PeerId(${this.toString()})`}},qa=class extends Ha{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},za=class extends Ha{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Wa=class extends Ha{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},LA=2336,Ga=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Jt.digest(N(this.url))}[R6](){return`PeerId(${this.url})`}[ul]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return Q.createV1(LA,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=O(e)),e.toString()===this.toString())}};var NA=114,D6=2336;function Ve(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=ve(be.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Qr(Q.parse(r));if(e==null)throw new P('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=ve(e.decode(r))}return it(t)}function xn(r){if(r.type==="Ed25519")return new za({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Wa({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new qa({multihash:r.toCID().multihash,publicKey:r});throw new Fr}function L6(r){return xn(r.publicKey)}function it(r){if(MA(r))return new qa({multihash:r});if(OA(r))try{let e=iu(r);if(e.type==="Ed25519")return new za({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Wa({multihash:r,publicKey:e})}catch{let t=O(r.digest);return new Ga(new URL(t))}throw new co("Supplied PeerID Multihash is invalid")}function Qr(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==NA&&r.code!==D6)throw new ml("Supplied PeerID CID is invalid");if(r.code===D6){let e=O(r.multihash.digest);return new Ga(new URL(e))}return it(r.multihash)}function OA(r){return r.code===Jt.code}function MA(r){return r.code===Qe.code}function mi(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function su(r){let e=ve(be.decode(`z${r}`));return it(e)}var ft=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return mi(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return mi(this.map.values(),e=>e.key)}values(){return mi(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Wt=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return mi(this.set.entries(),e=>{let t=su(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=su(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return mi(this.set.values(),e=>su(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function X2(){return new Wt}function N6(r,e,t,n){ai(r);let o=Ng({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(po(i),po(s),po(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=qr(e),l=qr(t),u=new Uint8Array(s),d=Ao.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function O6(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function M6(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=N6(r,e,t,n),l,u=new Uint8Array(4),d=li(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let g=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),g.set(f.subarray(0,g.length));for(let m=1;m<o;m++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]}}return O6(a,c,s,l,f)}async function au(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=N6(r,e,t,n),u,d=new Uint8Array(4),f=li(d),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<i;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),m.set(h.subarray(0,m.length)),await Dg(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]})}return O6(c,l,a,u,h)}var Qa=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Io=new Uint32Array(80),Z2=class extends mo{constructor(){super(64,20,8,!1),this.A=Qa[0]|0,this.B=Qa[1]|0,this.C=Qa[2]|0,this.D=Qa[3]|0,this.E=Qa[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)Io[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Io[c]=$l(Io[c-3]^Io[c-8]^Io[c-14]^Io[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=Kl(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=Hl(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=$l(n,5)+l+a+u+Io[c]|0;a=s,s=i,i=$l(o,30),o=n,n=d}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){Io.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},B6=gs(()=>new Z2);var U6={sha1:B6,"sha2-256":Ir,"sha2-512":wo};function Ya(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(U6).join(" / ");throw new P(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=U6[o],s=M6(i,r,e,{c:t,dkLen:n});return ot.encode(s).substring(1)}var j2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},F6={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},V6=new globalThis.TextEncoder;function BA(r,e){let t=j2[e],n=F6[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function UA(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=j2[e],o=F6[e],i=r;for(;i.length>0;){let s=V6.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function J2(r,{size:e=32,utf8Buffer:t}={}){if(!j2[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return UA(r,e,t);r=V6.encode(r)}return BA(r,e)}var Xa={hash:r=>Number(J2(r,{size:32})),hashV:(r,e)=>FA(Xa.hash(r,e))};function FA(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),N(e,"base16")}var ep=64,Yr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>ep)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=ae(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?j(this.fp,e.fp):!1}};function gi(r,e){return Math.floor(Math.random()*(e-r))+r}var yi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");let t=gi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Yr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var VA=500,Za=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??Xa,this.seed=e.seed??gi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=N(e));let t=new Yr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new yi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new yi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[gi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new yi(this.bucketSize));for(let a=0;a<VA;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new yi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=N(e));let t=new Yr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=N(e));let t=new Yr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},$A={1:.5,2:.84,4:.95,8:.98};function KA(r=.001){return r>.002?2:r>1e-5?4:8}function $6(r,e=.001){let t=KA(e),n=$A[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),ep);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var cu=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??Xa,this.seed=e.seed??gi(0,Math.pow(2,10)),this.filterSeries=[new Za({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=N(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new Za({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=N(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=N(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function rr(r,e=.001,t){return new cu({...$6(r,e),...t??{}})}var lu=class{filter;constructor(e,t){this.filter=rr(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function tp(r,e=.001){return new lu(r,e)}var rp=class extends ft{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function ja(r){let{name:e,metrics:t}=r,n;return t!=null?n=new rp({name:e,metrics:t}):n=new ft,n}var Vn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=ot.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=ot.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=ot.encode(e.multihash.bytes);this.blocks.set(n,t)}};function HA(r){let e=new Uint8Array(r.reduce((n,o)=>n+ue(o),0)),t=0;for(let n of r)e=De(n,e,t),t+=ue(n);return e}var K6=HA;function np(r){return K6([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var uu=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Vn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===tt.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:np(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Sr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:np(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Sr.DoNotHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var du=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=ja({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new uu({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=Q.decode(o.cid),s=O(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===tt.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??tt.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=O(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function qA(r,e){try{if(typeof r=="string"&&r.length>0)return zA(r);if(typeof r=="number"&&isFinite(r))return e?.long?GA(r):WA(r);throw new Error("Value is not a string or number.")}catch(t){let n=QA(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function zA(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var hu=qA;function WA(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function GA(r){let e=Math.abs(r);return e>=864e5?fu(r,e,864e5,"day"):e>=36e5?fu(r,e,36e5,"hour"):e>=6e4?fu(r,e,6e4,"minute"):e>=1e3?fu(r,e,1e3,"second"):`${r} ms`}function fu(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function QA(r){return typeof r=="object"&&r!==null&&"message"in r}function op(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=hu,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,f=null,h,p;function g(...m){if(!g.enabled)return;let y=g,x=Number(new Date),w=x-(d||x);y.diff=w,y.prev=d,y.curr=x,d=x,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let I=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(D,R)=>{if(D==="%%")return"%";I++;let S=t.formatters[R];if(typeof S=="function"){let A=m[I];D=S.call(y,A),m.splice(I,1),I--}return D}),t.formatArgs.call(y,m),(y.log||t.log).apply(y,m)}return g.namespace=u,g.useColors=t.useColors(),g.color=t.selectColor(u),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(u)),p),set:m=>{f=m}}),typeof t.init=="function"&&t.init(g),g}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var pu=tI(),YA=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function XA(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function ZA(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+hu(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var jA=console.debug??console.log??(()=>{});function JA(r){try{r?pu?.setItem("debug",r):pu?.removeItem("debug")}catch{}}function eI(){let r;try{r=pu?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function tI(){try{return localStorage}catch{}}function rI(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var H6=op({formatArgs:ZA,save:JA,load:eI,useColors:XA,setupFormatters:rI,colors:YA,storage:pu,log:jA});var nr=H6;nr.formatters.b=r=>r==null?"undefined":be.baseEncode(r);nr.formatters.t=r=>r==null?"undefined":at.baseEncode(r);nr.formatters.m=r=>r==null?"undefined":ot.baseEncode(r);nr.formatters.p=r=>r==null?"undefined":r.toString();nr.formatters.c=r=>r==null?"undefined":r.toString();nr.formatters.k=r=>r==null?"undefined":r.toString();nr.formatters.a=r=>r==null?"undefined":r.toString();nr.formatters.e=r=>r==null?"undefined":q6(r.stack)??q6(r.message)??r.toString();function nI(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function To(){return{forComponent(r){return hr(r)}}}function hr(r){let e=nI(`${r}:trace`);return nr.enabled(`${r}:trace`)&&nr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=nr(`${r}:trace`)),Object.assign(nr(r),{error:nr(`${r}:error`),trace:e})}function q6(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var sp=Br(W6(),1);var ec=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},ap=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},G6=r=>globalThis.DOMException===void 0?new ap(r):new DOMException(r),Q6=r=>{let e=r.reason===void 0?G6("This operation was aborted."):r.reason;return e instanceof Error?e:G6(e)};function Xr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&d(Q6(h)),a=()=>{d(Q6(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let f=new ec;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(h){d(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(f.message=o??`Promise timed out after ${t} milliseconds`,d(f))},t),(async()=>{try{u(await r)}catch(h){d(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function cp(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var tc=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=cp(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var En=class extends sp.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:tc,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#x(){return this.#t||this.#r<this.#o}get#E(){return this.#s<this.#d}#v(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#A;if(this.#x&&this.#E){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#I(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=Xr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#I(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof ec&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#v()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function gu(r){let e=[pr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var lp=60;function yu(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:pr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:pr[e.type],TTL:e.TTL??e.ttl??lp,data:e.data instanceof Uint8Array?O(e.data):e.data}))}}var sI=4;function up(r,e={}){let t=new En({concurrency:e.queryConcurrency??sI});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),gu(o.types).forEach(a=>{i.append("type",pr[a])}),o.onProgress?.(new W("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=yu(await a.json());return o.onProgress?.(new W("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function Y6(){return[up("https://cloudflare-dns.com/dns-query"),up("https://dns.google/resolve")]}var j6=Br(Z6(),1);var dp=class{lru;constructor(e){this.lru=(0,j6.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return yu({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:pr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??lp)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function J6(r){return new dp(r)}var aI=1e3,wu=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=J6(e.cacheSize??aI),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=Y6())}async query(e,t={}){let n=gu(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new W("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new W("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var pr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(pr||(pr={}));function bu(r={}){return new wu(r)}var cI=["string","number","bigint","symbol"],lI=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function e8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(cI.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(uI(r))return"Buffer";let t=dI(r);return t||"Object"}function uI(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function dI(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(lI.includes(e))return e}var b=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};b.uint=new b(0,"uint",!0);b.negint=new b(1,"negint",!0);b.bytes=new b(2,"bytes",!0);b.string=new b(3,"string",!0);b.array=new b(4,"array",!1);b.map=new b(5,"map",!1);b.tag=new b(6,"tag",!1);b.float=new b(7,"float",!0);b.false=new b(7,"false",!0);b.true=new b(7,"true",!0);b.null=new b(7,"null",!0);b.undefined=new b(7,"undefined",!0);b.break=new b(7,"break",!0);var B=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var As=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",fI=new TextDecoder,hI=new TextEncoder;function xu(r){return As&&globalThis.Buffer.isBuffer(r)}function rc(r){return r instanceof Uint8Array?xu(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var o8=As?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):r8(r,e,t):(r,e,t)=>t-e>64?fI.decode(r.subarray(e,t)):r8(r,e,t),Eu=As?r=>r.length>64?globalThis.Buffer.from(r):t8(r):r=>r.length>64?hI.encode(r):t8(r),vn=r=>Uint8Array.from(r),Is=As?(r,e,t)=>xu(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),i8=As?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),rc(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},s8=As?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function a8(r,e){if(xu(r)&&xu(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function t8(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function r8(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return fp(n)}var n8=4096;function fp(r){let e=r.length;if(e<=n8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=n8));return t}var pI=256,nc=class{constructor(e=pI){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=s8(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=Is(n,0,this.cursor)}else t=i8(this.chunks,this.cursor);return e&&this.reset(),t}};var Z="CBOR decode error:",$n="CBOR encode error:",oc=[];oc[23]=1;oc[24]=2;oc[25]=3;oc[26]=5;oc[27]=9;function Kn(r,e,t){if(r.length-e<t)throw new Error(`${Z} not enough data for type`)}var ht=[24,256,65536,4294967296,BigInt("18446744073709551616")];function mr(r,e,t){Kn(r,e,1);let n=r[e];if(t.strict===!0&&n<ht[0])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function gr(r,e,t){Kn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<ht[1])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){Kn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<ht[2])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){Kn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<ht[3])throw new Error(`${Z} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${Z} integers outside of the safe integer range are not supported`)}function c8(r,e,t,n){return new B(b.uint,mr(r,e+1,n),2)}function l8(r,e,t,n){return new B(b.uint,gr(r,e+1,n),3)}function u8(r,e,t,n){return new B(b.uint,yr(r,e+1,n),5)}function d8(r,e,t,n){return new B(b.uint,wr(r,e+1,n),9)}function Cr(r,e){return bt(r,0,e.value)}function bt(r,e,t){if(t<ht[0]){let n=Number(t);r.push([e|n])}else if(t<ht[1]){let n=Number(t);r.push([e|24,n])}else if(t<ht[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<ht[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<ht[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${Z} encountered BigInt larger than allowable range`)}}Cr.encodedSize=function(e){return bt.encodedSize(e.value)};bt.encodedSize=function(e){return e<ht[0]?1:e<ht[1]?2:e<ht[2]?3:e<ht[3]?5:9};Cr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function f8(r,e,t,n){return new B(b.negint,-1-mr(r,e+1,n),2)}function h8(r,e,t,n){return new B(b.negint,-1-gr(r,e+1,n),3)}function p8(r,e,t,n){return new B(b.negint,-1-yr(r,e+1,n),5)}var hp=BigInt(-1),m8=BigInt(1);function g8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new B(b.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${Z} integers outside of the safe integer range are not supported`);return new B(b.negint,hp-BigInt(o),9)}function vu(r,e){let t=e.value,n=typeof t=="bigint"?t*hp-m8:t*-1-1;bt(r,e.type.majorEncoded,n)}vu.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*hp-m8:t*-1-1;return n<ht[0]?1:n<ht[1]?2:n<ht[2]?3:n<ht[3]?5:9};vu.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function ic(r,e,t,n){Kn(r,e,t+n);let o=Is(r,e+t,e+t+n);return new B(b.bytes,o,t+n)}function y8(r,e,t,n){return ic(r,e,1,t)}function w8(r,e,t,n){return ic(r,e,2,mr(r,e+1,n))}function b8(r,e,t,n){return ic(r,e,3,gr(r,e+1,n))}function x8(r,e,t,n){return ic(r,e,5,yr(r,e+1,n))}function E8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer bytes lengths not supported`);return ic(r,e,9,o)}function Su(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===b.string?Eu(r.value):r.value),r.encodedBytes}function Ts(r,e){let t=Su(e);bt(r,e.type.majorEncoded,t.length),r.push(t)}Ts.encodedSize=function(e){let t=Su(e);return bt.encodedSize(t.length)+t.length};Ts.compareTokens=function(e,t){return gI(Su(e),Su(t))};function gI(r,e){return r.length<e.length?-1:r.length>e.length?1:a8(r,e)}function sc(r,e,t,n,o){let i=t+n;Kn(r,e,i);let s=new B(b.string,o8(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=Is(r,e+t,e+i)),s}function v8(r,e,t,n){return sc(r,e,1,t,n)}function S8(r,e,t,n){return sc(r,e,2,mr(r,e+1,n),n)}function A8(r,e,t,n){return sc(r,e,3,gr(r,e+1,n),n)}function I8(r,e,t,n){return sc(r,e,5,yr(r,e+1,n),n)}function T8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer string lengths not supported`);return sc(r,e,9,o,n)}var _8=Ts;function _s(r,e,t,n){return new B(b.array,n,t)}function C8(r,e,t,n){return _s(r,e,1,t)}function k8(r,e,t,n){return _s(r,e,2,mr(r,e+1,n))}function P8(r,e,t,n){return _s(r,e,3,gr(r,e+1,n))}function R8(r,e,t,n){return _s(r,e,5,yr(r,e+1,n))}function D8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer array lengths not supported`);return _s(r,e,9,o)}function L8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return _s(r,e,1,1/0)}function Au(r,e){bt(r,b.array.majorEncoded,e.value)}Au.compareTokens=Cr.compareTokens;Au.encodedSize=function(e){return bt.encodedSize(e.value)};function Cs(r,e,t,n){return new B(b.map,n,t)}function N8(r,e,t,n){return Cs(r,e,1,t)}function O8(r,e,t,n){return Cs(r,e,2,mr(r,e+1,n))}function M8(r,e,t,n){return Cs(r,e,3,gr(r,e+1,n))}function B8(r,e,t,n){return Cs(r,e,5,yr(r,e+1,n))}function U8(r,e,t,n){let o=wr(r,e+1,n);if(typeof o=="bigint")throw new Error(`${Z} 64-bit integer map lengths not supported`);return Cs(r,e,9,o)}function F8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return Cs(r,e,1,1/0)}function Iu(r,e){bt(r,b.map.majorEncoded,e.value)}Iu.compareTokens=Cr.compareTokens;Iu.encodedSize=function(e){return bt.encodedSize(e.value)};function V8(r,e,t,n){return new B(b.tag,t,1)}function $8(r,e,t,n){return new B(b.tag,mr(r,e+1,n),2)}function K8(r,e,t,n){return new B(b.tag,gr(r,e+1,n),3)}function H8(r,e,t,n){return new B(b.tag,yr(r,e+1,n),5)}function q8(r,e,t,n){return new B(b.tag,wr(r,e+1,n),9)}function Tu(r,e){bt(r,b.tag.majorEncoded,e.value)}Tu.compareTokens=Cr.compareTokens;Tu.encodedSize=function(e){return bt.encodedSize(e.value)};var vI=20,SI=21,AI=22,II=23;function z8(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Z} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new B(b.null,null,1):new B(b.undefined,void 0,1)}function W8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Z} indefinite length items not allowed`);return new B(b.break,void 0,1)}function pp(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Z} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Z} Infinity values are not supported`)}return new B(b.float,r,e)}function G8(r,e,t,n){return pp(mp(r,e+1),3,n)}function Q8(r,e,t,n){return pp(gp(r,e+1),5,n)}function Y8(r,e,t,n){return pp(J8(r,e+1),9,n)}function _u(r,e,t){let n=e.value;if(n===!1)r.push([b.float.majorEncoded|vI]);else if(n===!0)r.push([b.float.majorEncoded|SI]);else if(n===null)r.push([b.float.majorEncoded|AI]);else if(n===void 0)r.push([b.float.majorEncoded|II]);else{let o,i=!1;(!t||t.float64!==!0)&&(Z8(n),o=mp(Zr,1),n===o||Number.isNaN(n)?(Zr[0]=249,r.push(Zr.slice(0,3)),i=!0):(j8(n),o=gp(Zr,1),n===o&&(Zr[0]=250,r.push(Zr.slice(0,5)),i=!0))),i||(TI(n),o=J8(Zr,1),Zr[0]=251,r.push(Zr.slice(0,9)))}}_u.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){Z8(n);let o=mp(Zr,1);if(n===o||Number.isNaN(n))return 3;if(j8(n),o=gp(Zr,1),n===o)return 5}return 9};var X8=new ArrayBuffer(9),kr=new DataView(X8,1),Zr=new Uint8Array(X8,0);function Z8(r){if(r===1/0)kr.setUint16(0,31744,!1);else if(r===-1/0)kr.setUint16(0,64512,!1);else if(Number.isNaN(r))kr.setUint16(0,32256,!1);else{kr.setFloat32(0,r);let e=kr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)kr.setUint16(0,31744,!1);else if(t===0)kr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?kr.setUint16(0,0):o<-14?kr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):kr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function mp(r,e){if(r.length-e<2)throw new Error(`${Z} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function j8(r){kr.setFloat32(0,r,!1)}function gp(r,e){if(r.length-e<4)throw new Error(`${Z} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function TI(r){kr.setFloat64(0,r,!1)}function J8(r,e){if(r.length-e<8)throw new Error(`${Z} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}_u.compareTokens=Cr.compareTokens;function Se(r,e,t){throw new Error(`${Z} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function Cu(r){return()=>{throw new Error(`${Z} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=Se;V[24]=c8;V[25]=l8;V[26]=u8;V[27]=d8;V[28]=Se;V[29]=Se;V[30]=Se;V[31]=Se;for(let r=32;r<=55;r++)V[r]=Se;V[56]=f8;V[57]=h8;V[58]=p8;V[59]=g8;V[60]=Se;V[61]=Se;V[62]=Se;V[63]=Se;for(let r=64;r<=87;r++)V[r]=y8;V[88]=w8;V[89]=b8;V[90]=x8;V[91]=E8;V[92]=Se;V[93]=Se;V[94]=Se;V[95]=Cu("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=v8;V[120]=S8;V[121]=A8;V[122]=I8;V[123]=T8;V[124]=Se;V[125]=Se;V[126]=Se;V[127]=Cu("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=C8;V[152]=k8;V[153]=P8;V[154]=R8;V[155]=D8;V[156]=Se;V[157]=Se;V[158]=Se;V[159]=L8;for(let r=160;r<=183;r++)V[r]=N8;V[184]=O8;V[185]=M8;V[186]=B8;V[187]=U8;V[188]=Se;V[189]=Se;V[190]=Se;V[191]=F8;for(let r=192;r<=215;r++)V[r]=V8;V[216]=$8;V[217]=K8;V[218]=H8;V[219]=q8;V[220]=Se;V[221]=Se;V[222]=Se;V[223]=Se;for(let r=224;r<=243;r++)V[r]=Cu("simple values are not supported");V[244]=Se;V[245]=Se;V[246]=Se;V[247]=z8;V[248]=Cu("simple values are not supported");V[249]=G8;V[250]=Q8;V[251]=Y8;V[252]=Se;V[253]=Se;V[254]=Se;V[255]=W8;var jr=[];for(let r=0;r<24;r++)jr[r]=new B(b.uint,r,1);for(let r=-1;r>=-24;r--)jr[31-r]=new B(b.negint,r,1);jr[64]=new B(b.bytes,new Uint8Array(0),1);jr[96]=new B(b.string,"",1);jr[128]=new B(b.array,0,1);jr[160]=new B(b.map,0,1);jr[244]=new B(b.false,!1,1);jr[245]=new B(b.true,!0,1);jr[246]=new B(b.null,null,1);function e5(r){switch(r.type){case b.false:return vn([244]);case b.true:return vn([245]);case b.null:return vn([246]);case b.bytes:return r.value.length?void 0:vn([64]);case b.string:return r.value===""?vn([96]):void 0;case b.array:return r.value===0?vn([128]):void 0;case b.map:return r.value===0?vn([160]):void 0;case b.uint:return r.value<24?vn([Number(r.value)]):void 0;case b.negint:if(r.value>=-24)return vn([31-Number(r.value)])}}var CI={float64:!1,mapSorter:RI,quickEncodeToken:e5};function kI(){let r=[];return r[b.uint.major]=Cr,r[b.negint.major]=vu,r[b.bytes.major]=Ts,r[b.string.major]=_8,r[b.array.major]=Au,r[b.map.major]=Iu,r[b.tag.major]=Tu,r[b.float.major]=_u,r}var t5=kI(),yp=new nc,Pu=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${$n} object contains circular references`);return new r(t,e)}},_o={null:new B(b.null,null),undefined:new B(b.undefined,void 0),true:new B(b.true,!0),false:new B(b.false,!1),emptyArray:new B(b.array,0),emptyMap:new B(b.map,0)},Co={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new B(b.float,r):r>=0?new B(b.uint,r):new B(b.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new B(b.uint,r):new B(b.negint,r)},Uint8Array(r,e,t,n){return new B(b.bytes,r)},string(r,e,t,n){return new B(b.string,r)},boolean(r,e,t,n){return r?_o.true:_o.false},null(r,e,t,n){return _o.null},undefined(r,e,t,n){return _o.undefined},ArrayBuffer(r,e,t,n){return new B(b.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new B(b.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[_o.emptyArray,new B(b.break)]:_o.emptyArray;n=Pu.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=ku(s,t,n);return t.addBreakTokens?[new B(b.array,r.length),o,new B(b.break)]:[new B(b.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[_o.emptyMap,new B(b.break)]:_o.emptyMap;n=Pu.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[ku(l,t,n),ku(o?r.get(l):r[l],t,n)];return PI(a,t),t.addBreakTokens?[new B(b.map,s),a,new B(b.break)]:[new B(b.map,s),a]}};Co.Map=Co.Object;Co.Buffer=Co.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Co[`${r}Array`]=Co.DataView;function ku(r,e={},t){let n=e8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Co[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Co[n];if(!i)throw new Error(`${$n} unsupported type: ${n}`);return i(r,n,e,t)}function PI(r,e){e.mapSorter&&r.sort(e.mapSorter)}function RI(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=t5[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function r5(r,e,t,n){if(Array.isArray(e))for(let o of e)r5(r,o,t,n);else t[e.type.major](r,e,n)}function wp(r,e,t){let n=ku(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new nc(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return rc(a.chunks[0])}}return yp.reset(),r5(yp,n,e,t),yp.toBytes(!0)}function ko(r,e){return e=Object.assign({},CI,e),wp(r,t5,e)}var DI={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Ru=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=jr[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${Z} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},ac=Symbol.for("DONE"),Du=Symbol.for("BREAK");function LI(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=ks(e,t);if(i===Du){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed array`)}if(i===ac)throw new Error(`${Z} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function NI(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=ks(e,t);if(a===Du){if(r.value===1/0)break;throw new Error(`${Z} got unexpected break to lengthed map`)}if(a===ac)throw new Error(`${Z} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Z} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${Z} found repeat map key "${a}"`);let c=ks(e,t);if(c===ac)throw new Error(`${Z} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function ks(r,e){if(r.done())return ac;let t=r.next();if(t.type===b.break)return Du;if(t.type.terminal)return t.value;if(t.type===b.array)return LI(t,r,e);if(t.type===b.map)return NI(t,r,e);if(t.type===b.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ks(r,e);return e.tags[t.value](n)}throw new Error(`${Z} tag not supported (${t.value})`)}throw new Error("unsupported")}function bp(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Z} data to decode must be a Uint8Array`);e=Object.assign({},DI,e);let t=e.tokenizer||new Ru(r,e),n=ks(t,e);if(n===ac)throw new Error(`${Z} did not find any content to decode`);if(n===Du)throw new Error(`${Z} got unexpected break`);return[n,r.subarray(t.pos())]}function br(r,e){let[t,n]=bp(r,e);if(n.length>0)throw new Error(`${Z} too many terminals, data makes no sense`);return t}var Hn="/",n5=new TextEncoder().encode(Hn),Lu=n5[0],Ne=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=N(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==Lu)throw new Error("Invalid key")}toString(e="utf8"){return O(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Hn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=n5),this._buf[0]!==Lu){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Lu,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Lu;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Hn).slice(1)}type(){return OI(this.baseNamespace())}name(){return MI(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Hn)||(e+=Hn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Hn):new r(e.slice(0,-1).join(Hn))}child(e){return this.toString()===Hn?e:e.toString()===Hn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...BI(e.map(t=>t.namespaces()))])}};function OI(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function MI(r){let e=r.split(":");return e[e.length-1]}function BI(r){return[].concat(...r)}function Nu({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*UI(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=Q.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*Ep(n,o))}else{let t=Q.asCID(e);t!=null?yield[r.join("/"),t]:yield*Ep(e,r)}}function*Ep(r,e){if(r==null||r instanceof Uint8Array)return;let t=Q.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*UI(i,o)}}function*FI(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&Q.asCID(n)==null&&(yield*vp(n,o))}else yield*vp(e,r)}function*vp(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&Q.asCID(n)==null&&(yield*FI(o,n))}}function VI(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=Q.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var Sp=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:Nu(),bytes:Nu(),value:Nu(),asBlock:Nu()})}links(){return Ep(this.value,[])}tree(){return vp(this.value,[])}get(e="/"){return VI(this.value,e.split("/").filter(Boolean))}};function o5({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new Sp({cid:e,bytes:r,value:o})}var a5="/pin/",i5="/pinned-block/",Ap=yn,s5=1;function Ou(r){return r.version===0&&(r=r.toV1()),new Ne(`${a5}${r.toString(Ap)}`)}var Mu=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Ou(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new Ht({concurrency:s5});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>j(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,ko(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=o5({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new Ne(`${i5}${Ap.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=br(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,ko(i),n),n.onProgress?.(new W("helia:pin:add",e))}}async*rm(e,t={}){let n=Ou(e),o=await this.datastore.get(n,t),i=br(o);await this.datastore.delete(n,t);let s=new Ht({concurrency:s5});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>j(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:a5+(e.cid!=null?`${e.cid.toString(yn)}`:"")},e)){let o=Q.parse(t.toString().substring(5),yn),i=br(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new Ne(`${i5}${Ap.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Ou(e),o=await this.datastore.get(n,t);return br(o)}async setMetadata(e,t,n){let o=Ou(e),i=await this.datastore.get(o,n),s=br(i);s.metadata=t??{},await this.datastore.put(o,ko(s),n)}};var Ip=1,Tp=5;var cc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Po=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},lc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},uc=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var $I=5,Bu=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??$I,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await mt(...this.routers)}async stop(){await kt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Po("No content routers available");let n=new gt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of qt(n.toGenerator(),...bi(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new Po("No content routers available");await Promise.all(bi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(bi(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(bi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(bi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Po("No peer routers available");let n=this,o=qt(...bi(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Po("No peer routers available");for await(let n of qt(...bi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function bi(r,e){return r.filter(t=>t[e]!=null)}var Ro={},Ps=r=>{r.addEventListener("message",e=>{Ps.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Ps.dispatchEvent("message",r,e)})};Ps.addEventListener=(r,e)=>{Ro[r]==null&&(Ro[r]=[]),Ro[r].push(e)};Ps.removeEventListener=(r,e)=>{Ro[r]!=null&&(Ro[r]=Ro[r].filter(t=>t===e))};Ps.dispatchEvent=function(r,e,t){Ro[r]!=null&&Ro[r].forEach(n=>n(e,t))};var _p=Ps;var Cp="lock:worker:request-read",kp="lock:worker:release-read",Pp="lock:master:grant-read",Rp="lock:worker:request-write",Dp="lock:worker:release-write",Lp="lock:master:grant-write";var c5=(r=21)=>Math.random().toString().substring(2);var l5=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},u5=(r,e,t,n)=>async()=>{let o=c5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},KI={singleProcess:!1},d5=r=>{if(r=Object.assign({},KI,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return _p.addEventListener("message",l5(t,"requestReadLock",Cp,kp,Pp)),_p.addEventListener("message",l5(t,"requestWriteLock",Rp,Dp,Lp)),t}return{isWorker:!0,readLock:t=>u5(t,Cp,Pp,kp),writeLock:t=>u5(t,Rp,Lp,Dp)}};var xi={},Do;async function Np(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Xr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var HI=(r,e)=>{if(Do.isWorker===!0)return{readLock:Do.readLock(r,e),writeLock:Do.writeLock(r,e)};let t=new En({concurrency:1}),n;return{async readLock(){if(n!=null)return Np(n,e);n=new En({concurrency:e.concurrency,autoStart:!1});let o=n,i=Np(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Np(t,e)}}},qI={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ei(r){let e=Object.assign({},qI,r);return Do==null&&(Do=d5(e),Do.isWorker!==!0&&(Do.addEventListener("requestReadLock",t=>{xi[t.data.name]!=null&&xi[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Do.addEventListener("requestWriteLock",async t=>{xi[t.data.name]!=null&&xi[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),xi[e.name]==null&&(xi[e.name]=HI(e.name,e)),xi[e.name]}var Uu=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ei({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await mt(this.child),this.started=!0}async stop(){await kt(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var Op=new Ne("/version"),f5=1;async function h5(r){if(!await r.has(Op)){await r.put(Op,N(`${f5}`));return}let e=await r.get(Op),t=O(e);if(parseInt(t,10)!==f5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Up={};Xe(Up,{code:()=>Bp,decode:()=>JI,decodeOptions:()=>XI,encode:()=>jI,encodeOptions:()=>QI,name:()=>ZI,toByteView:()=>m5});var p5=42;function m5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function zI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Q.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new B(b.tag,p5),new B(b.bytes,t)]}function WI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function GI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var Mp={float64:!0,typeEncoders:{Object:zI,undefined:WI,number:GI}},QI={...Mp,typeEncoders:{...Mp.typeEncoders}};function YI(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return Q.decode(r.subarray(1))}var Fu={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Fu.tags[p5]=YI;var XI={...Fu,tags:Fu.tags.slice()},ZI="dag-cbor",Bp=113,jI=r=>ko(r,Mp),JI=r=>br(m5(r),Fu);var zp={};Xe(zp,{code:()=>qp,decode:()=>y5,encode:()=>g5,format:()=>uT,name:()=>lT,parse:()=>fT,stringify:()=>uT});var Fp=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===b.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===b.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[b.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[b.negint.major](e,t){this[b.uint.major](e,t)}[b.bytes.major](e,t){throw new Error(`${$n} unsupported type: Uint8Array`)}[b.string.major](e,t){this.prefix(e);let n=Eu(JSON.stringify(t.value));e.push(n.length>32?rc(n):n)}[b.array.major](e,t){this.prefix(e),this.inRecursive.push({type:b.array,elements:0}),e.push([91])}[b.map.major](e,t){this.prefix(e),this.inRecursive.push({type:b.map,elements:0}),e.push([123])}[b.tag.major](e,t){}[b.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===b.array)e.push([93]);else if(s.type===b.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${$n} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function eT(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${$n} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==b.string||n.type!==b.string)throw new Error(`${$n} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${$n} unexpected duplicate map keys, this is not supported`)}var tT={addBreakTokens:!0,mapSorter:eT};function Vp(r,e){return e=Object.assign({},tT,e),wp(r,new Fp,e)}var Rs=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Z} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Z} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new B(b.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Z} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Z} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new B(b.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new B(s>=0?b.uint:b.negint,s,this._pos-e):new B(s>=0?b.uint:b.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Z} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new B(b.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Z} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${Z} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Z} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${Z} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${Z} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new B(b.string,fp(t),this._pos-e);default:if(i<32)throw new Error(`${Z} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${Z} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new B(b.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new B(b.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new B(b.null,null,4);case 102:return this.expect([102,97,108,115,101]),new B(b.false,!1,5);case 116:return this.expect([116,114,117,101]),new B(b.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Z} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new B(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new B(b.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new B(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new B(b.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Z} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Z} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function $p(r,e){return e=Object.assign({tokenizer:new Rs(r,e)},e),br(r,e)}function nT(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function oT(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=Q.asCID(r);if(!e)return null;let t=e.toString();return[new B(b.map,1/0,1),new B(b.string,"/",1),new B(b.string,t,t.length),new B(b.break,void 0,1)]}function Vu(r){let e=ot.encode(r).slice(1);return[new B(b.map,1/0,1),new B(b.string,"/",1),new B(b.map,1/0,1),new B(b.string,"bytes",5),new B(b.string,e,e.length),new B(b.break,void 0,1),new B(b.break,void 0,1)]}function Jr(r){return Vu(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function iT(r){return Vu(new Uint8Array(r))}function sT(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function aT(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var cT={typeEncoders:{Object:oT,Buffer:Vu,Uint8Array:Vu,Int8Array:Jr,Uint16Array:Jr,Int16Array:Jr,Uint32Array:Jr,Int32Array:Jr,Float32Array:Jr,Float64Array:Jr,Uint8ClampedArray:Jr,BigInt64Array:Jr,BigUint64Array:Jr,DataView:Jr,ArrayBuffer:iT,undefined:sT,number:aT}},Kp=class extends Rs{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===b.map){let t=this._next();if(t.type===b.string&&t.value==="/"){let n=this._next();if(n.type===b.string){if(this._next().type!==b.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new B(b.tag,42,0)}if(n.type===b.map){let o=this._next();if(o.type===b.string&&o.value==="bytes"){let i=this._next();if(i.type===b.string){for(let a=0;a<2;a++)if(this._next().type!==b.break)throw new Error("Invalid encoded Bytes form");let s=ot.decode(`m${i.value}`);return new B(b.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Hp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Hp.tags[42]=Q.parse;var lT="dag-json",qp=297,g5=r=>Vp(r,cT),y5=r=>{let e=nT(r),t=Object.assign(Hp,{tokenizer:new Kp(e,Hp)});return $p(e,t)},uT=r=>dT.decode(g5(r));var dT=new TextDecoder,fT=r=>y5(hT.encode(r)),hT=new TextEncoder;var Zp={};Xe(Zp,{code:()=>Xp,createLink:()=>_5,createNode:()=>T5,decode:()=>TT,encode:()=>IT,name:()=>AT,prepare:()=>Qp,validate:()=>Yp});var pT=new TextDecoder;function Wp(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function $u(r,e){let t;[t,e]=Wp(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function w5(r,e){let t;return[t,e]=Wp(r,e),[t&7,t>>3,e]}function mT(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=w5(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=$u(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=$u(r,n),e.Name=pT.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=Wp(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function b5(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=w5(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=$u(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=$u(r,t),n.push(mT(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var E5=new TextEncoder,x5=2**32,gT=2**31;function yT(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=dc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=E5.encode(r.Name);t-=n.length,e.set(n,t),t=dc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=dc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function v5(r){let e=bT(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=dc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=yT(r.Links[o],t.subarray(0,n));n-=i,n=dc(t,n,i)-1,t[n]=18}return t}function wT(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Ds(t)}if(typeof r.Name=="string"){let t=E5.encode(r.Name).length;e+=1+t+Ds(t)}return typeof r.Tsize=="number"&&(e+=1+Ds(r.Tsize)),e}function bT(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Ds(t)}if(r.Links)for(let t of r.Links){let n=wT(t);e+=1+n+Ds(n)}return e}function dc(r,e,t){e-=Ds(t);let n=e;for(;t>=gT;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Ds(r){return r%2===0&&r++,Math.floor((xT(r)+6)/7)}function xT(r){let e=0;return r>=x5&&(r=Math.floor(r/x5),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+ET[r]}var ET=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var vT=["Data","Links"],ST=["Hash","Name","Tsize"],Gp=new TextEncoder;function A5(r,e){if(r===e)return 0;let t=r.Name?Gp.encode(r.Name):[],n=e.Name?Gp.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function S5(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function I5(r){if(typeof r.asCID=="object"){let t=Q.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=Q.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=Q.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=Q.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function Qp(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=Gp.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(I5),e.Links.sort(A5);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function Yp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!S5(r,vT))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!S5(t,ST))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&A5(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function T5(r,e=[]){return Qp({Data:r,Links:e})}function _5(r,e,t){return I5({Hash:t,Name:r,Tsize:e})}function C5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var AT="dag-pb",Xp=112;function IT(r){Yp(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),v5(e)}function TT(r){let e=C5(r),t=b5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=Q.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Ls(r){return r?.then!=null}function k5(r=[],e){let t={[Xp]:Zp,[ri]:ss,[Bp]:Up,[qp]:zp,[Y0]:Rl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ls(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new uc(`Could not load codec for ${n}`)}}function P5(r=[],e){let t={[Qe.code]:Qe,[Ll.code]:Ll,[Jt.code]:Jt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ls(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new lc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Pr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var qn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var Ku=0,Hu=class extends qn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===Ku||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===Ku)return e.multihash.digest;if(this.child==null)throw new Pr;return this.child.get(e)}has(e){return e.multihash.code===Ku?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==Ku&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function _T(r){return r[Symbol.asyncIterator]!=null}function CT(r,e){let t=0;if(_T(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=os(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var en=CT;function kT(r){return r[Symbol.asyncIterator]!=null}function R5(r){return r?.then!=null}function PT(r,e){let t=0;if(kT(r))return async function*(){for await(let c of r){let l=e(c,t++);R5(l)&&await l,yield c}}();let n=os(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);R5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var vi=PT;var qu=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new Hu(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new W("blocks:put:duplicate",e)),e):(n.onProgress?.(new W("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new W("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=en(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new W("blocks:put-many:duplicate",i)),!s}),o=vi(n,async({cid:i,block:s})=>{t.onProgress?.(new W("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new W("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new W("blocks:get:providers:get",e));let o=await D5(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new W("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new W("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new W("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new W("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(vi(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new W("blocks:get-many:providers:get",n));let i=await D5(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new W("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new W("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new W("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new W("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new W("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},zu=class extends qu{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await mt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await kt(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new jp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},jp=class extends qu{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=le([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=le([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=le([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=le([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=le([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function RT(r){return typeof r.retrieve=="function"}var DT=(r,e)=>{if(e==null)throw new P(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Ls(o)?n=await o:n=o,!j(n.digest,r.multihash.digest))throw new co("Hash of downloaded block did not match multihash from passed CID")}};async function D5(r,e,t,n){let o=DT(r,t),i=new AbortController,s=le([i.signal,n.signal]);i.signal;let a=[];for(let c of e)RT(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Si=class extends me{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=rr(this.maxProviders)}async retrieve(e,t={}){let n=ot.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=J();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.initialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new Ht({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,i.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),i.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await i.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=J(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new cc(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var Wu=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??To(),this.log=this.logger.forComponent("helia"),this.getHasher=P5(e.hashers,e.loadHasher),this.getCodec=k5(e.codecs,e.loadCodec),this.dns=e.dns??bu(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new Bu(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[hn]!=null&&i.push(o[hn]),o[pn]!=null&&i.push(o[pn]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new zu(t);this.pins=new Mu(e.datastore,n,this.getCodec),this.blockstore=new Uu(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await h5(this.datastore),await mt(this.blockstore,this.datastore,this.routing)}async stop(){await kt(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Rt(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new W("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new W("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Jp=class extends Si{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function L5(r,e){return new Jp(r,e)}var Gu=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var em=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Qu(r){let{name:e,metrics:t}=r,n;return t!=null?n=new em({name:e,metrics:t}):n=new Map,n}function LT(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=yt(r);e.push(t),r=r.slice(ue(t))}return e}var N5=LT;var Yu=class extends me{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=ja({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Qu({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=O(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??tt.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===tt.WantHave&&t.wantType===tt.WantBlock&&(o.wantType=tt.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===tt.WantBlock?(await lt(this,"block",t?.signal,{filter:a=>j(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await lt(this,"presence",t?.signal,{filter:s=>j(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=J(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Vn;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=O(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantHave,priority:1}),await this.network.sendMessage(t,o),(await lt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&j(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:tt.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Vn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:tt.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await lt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&j(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=O(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=N5(o.prefix),s=i[0],a=i[1],c=i[2],l=c===Qe.code?Qe:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=Q.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let f=O(d.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=Q.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Sr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Vn(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:tt.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var Xu=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new Gu(e),this.network=new Vl(e,t),this.peerWantLists=new du({...e,network:this.network},t),this.wantList=new Yu({...e,network:this.network},t)}createSession(e={}){return L5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=le([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var O5=(r,e={})=>new Xu(r,e);var tm=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=O5(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function rm(r={}){return e=>new tm(e,r)}var Zu=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var M5=45,NT=15,Ns=new Zu;function ju(r){if(!(r.length>NT))return Ns.new(r).parseWith(()=>Ns.readIPv4Addr())}function Ju(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>M5))return Ns.new(r).parseWith(()=>Ns.readIPv6Addr())}function Ai(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>M5)return;let t=Ns.new(r).parseWith(()=>Ns.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function tn(r){return!!ju(r)}function Os(r){return!!Ju(r)}function ed(r){return!!Ai(r)}var U5=Br(B5(),1),OT=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],MT=OT.map(r=>new U5.Netmask(r));function nm(r){for(let e of MT)if(e.contains(r))return!0;return!1}function BT(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function UT(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return nm(o)}function FT(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function VT(r){let e=r.split(":"),t=e[e.length-1];return nm(t)}function $T(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Qt(r){return tn(r)?nm(r):BT(r)?UT(r):FT(r)?VT(r):Os(r)?$T(r):void 0}var KT=r=>r.toString().split("/").slice(1),Ms=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),pe=r=>({match:e=>Ms(t=>t===r).match(e),pattern:r}),Ii=()=>({match:r=>Ms(e=>typeof e=="string").match(r),pattern:"{string}"}),hc=()=>({match:r=>Ms(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Pe=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{be.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),pc=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{Ea.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Te=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Bt=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),ge=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function Re(...r){function e(o){let i=KT(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var rd=ge(pe("dns4"),Ii()),nd=ge(pe("dns6"),Ii()),od=ge(pe("dnsaddr"),Ii()),im=ge(pe("dns"),Ii()),pq=Re(rd,Te(Pe())),mq=Re(nd,Te(Pe())),gq=Re(od,Te(Pe())),mc=Re(Bt(im,od,rd,nd),Te(Pe())),F5=ge(pe("ip4"),Ms(tn)),V5=ge(pe("ip6"),Ms(Os)),sm=Bt(F5,V5),zn=Bt(sm,im,rd,nd,od),$5=Re(Bt(sm,ge(Bt(im,od,rd,nd),Te(Pe())))),am=Re(F5),cm=Re(V5),K5=Re(sm),lm=ge(zn,pe("tcp"),hc()),gc=ge(zn,pe("udp"),hc()),Ti=Re(ge(lm,Te(Pe()))),yq=Re(gc),um=ge(gc,pe("quic"),Te(Pe())),id=ge(gc,pe("quic-v1"),Te(Pe())),HT=Bt(um,id),wq=Re(um),H5=Re(id),om=Bt(zn,lm,gc,um,id),q5=Bt(ge(om,pe("ws"),Te(Pe()))),Wn=Re(q5),z5=Bt(ge(om,pe("wss"),Te(Pe())),ge(om,pe("tls"),Te(ge(pe("sni"),Ii())),pe("ws"),Te(Pe()))),_i=Re(z5),W5=ge(gc,pe("webrtc-direct"),Te(pc()),Te(pc()),Te(Pe())),yc=Re(W5),G5=ge(id,pe("webtransport"),Te(pc()),Te(pc()),Te(Pe())),dm=Re(G5),td=Bt(q5,z5,ge(lm,Te(Pe())),ge(HT,Te(Pe())),ge(zn,Te(Pe())),W5,G5,Pe()),sd=Re(td),qT=ge(td,pe("p2p-circuit"),Pe()),or=Re(qT),zT=Bt(ge(td,pe("p2p-circuit"),pe("webrtc"),Te(Pe())),ge(td,pe("webrtc"),Te(Pe())),ge(pe("webrtc"),Te(Pe()))),wc=Re(zT),WT=Bt(ge(zn,pe("tcp"),hc(),pe("http"),Te(Pe())),ge(zn,pe("http"),Te(Pe()))),Q5=Re(WT),GT=Bt(ge(zn,pe("tcp"),Bt(ge(pe("443"),pe("http")),ge(hc(),pe("https"))),Te(Pe())),ge(zn,pe("tls"),pe("http"),Te(Pe())),ge(zn,pe("https"),Te(Pe()))),Y5=Re(GT),QT=Bt(ge(pe("memory"),Ii(),Te(Pe()))),bq=Re(QT);function X5(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function Z5(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function fm(r){switch(r.length){case Ci:return r.join(".");case ki:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function j5(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function J5(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Ci=4,ki=16,Iq=parseInt("0xFFFF",16),YT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function bc(r,e){e.length===ki&&r.length===Ci&&X5(e,0,11)&&(e=e.slice(12)),e.length===Ci&&r.length===ki&&Z5(r,YT,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function e7(r,e){if(typeof e=="string"&&(e=Ai(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function hm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Ci,o=ju(e);if(o==null&&(n=ki,o=Ju(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=pm(i,8*n);return{network:bc(o,s),mask:s}}function pm(r,e){if(e!==8*Ci&&e!==8*ki)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Pi=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=hm(e));else{let n=Ai(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=Ai(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=pm(o,8*n.length);this.network=bc(n,this.mask)}}contains(e){return e7({network:this.network,mask:this.mask},e)}toString(){let e=j5(this.mask),t=e!==-1?String(e):J5(this.mask);return fm(this.network)+"/"+t}};function t7(r,e){return new Pi(r).contains(e)}var r7=tn,XT=Os,mm=function(r){let e=0;if(r=r.toString().trim(),r7(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(XT(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=r7(t[n]),s;i&&(s=mm(t[n]),t[n]=O(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,O(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},n7=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var Bs={},gm={},jT=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];jT.forEach(r=>{let e=JT(...r);gm[e.code]=e,Bs[e.name]=e});function JT(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function oe(r){if(typeof r=="number"){if(gm[r]!=null)return gm[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(Bs[r]!=null)return Bs[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var e_=oe("ip4"),t_=oe("ip6"),r_=oe("ipcidr");function xm(r,e){switch(oe(r).code){case 4:case 41:return o_(e);case 42:return bm(e);case 43:return O(e,"base10");case 6:case 273:case 33:case 132:return s7(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return bm(e);case 421:return c_(e);case 444:return i7(e);case 445:return i7(e);case 466:return a_(e);case 481:return globalThis.encodeURIComponent(bm(e));default:return O(e,"base16")}}function Em(r,e){switch(oe(r).code){case 4:return o7(e);case 41:return o7(e);case 42:return wm(e);case 43:return N(e,"base10");case 6:case 273:case 33:case 132:return Sm(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return wm(e);case 421:return i_(e);case 444:return l_(e);case 445:return u_(e);case 466:return s_(e);case 481:return wm(globalThis.decodeURIComponent(e));default:return N(e,"base16")}}function vm(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===e_.code||n===t_.code)&&(t=o),n===r_.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Pi(t,e)}var ym=Object.values(oi).map(r=>r.decoder),n_=function(){let r=ym[0].or(ym[1]);return ym.slice(2).forEach(e=>r=r.or(e)),r}();function o7(r){if(!ed(r))throw new Error("invalid ip address");return mm(r)}function o_(r){let e=n7(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!ed(e))throw new Error("invalid ip address");return e}function Sm(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function s7(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function wm(r){let e=N(r),t=Uint8Array.from(De(e.length));return ke([t,e],t.length+e.length)}function bm(r){let e=yt(r);if(r=r.slice(ue(e)),r.length!==e)throw new Error("inconsistent lengths");return O(r)}function i_(r){let e;r[0]==="Q"||r[0]==="1"?e=ve(be.decode(`z${r}`)).bytes:e=Q.parse(r).multihash.bytes;let t=Uint8Array.from(De(e.length));return ke([t,e],t.length+e.length)}function s_(r){let e=n_.decode(r),t=Uint8Array.from(De(e.length));return ke([t,e],t.length+e.length)}function a_(r){let e=yt(r),t=r.slice(ue(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+O(t,"base64url")}function c_(r){let e=yt(r),t=r.slice(ue(e));if(t.length!==e)throw new Error("inconsistent lengths");return O(t,"base58btc")}function l_(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=at.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Sm(n);return ke([t,o],t.length+o.length)}function u_(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=at.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=Sm(n);return ke([t,o],t.length+o.length)}function i7(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=O(e,"base32"),o=s7(t);return`${n}:${o}`}function a7(r){r=Am(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=oe(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new ad("invalid address: "+r);if(a.path===!0){n=Am(o.slice(i).join("/")),e.push([a.code,Em(a.code,n)]),t.push([a.code,n]);break}let c=Em(a.code,o[i]);e.push([a.code,c]),t.push([a.code,xm(a.code,c)])}return{string:c7(t),bytes:cd(e),tuples:e,stringTuples:t,path:n}}function Im(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=yt(r,o),s=ue(i),a=oe(i),c=d_(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new ad("Invalid address Uint8Array: "+O(r,"base16"));e.push([i,l]);let u=xm(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:c7(t),tuples:e,stringTuples:t,path:n}}function c7(r){let e=[];return r.map(t=>{let n=oe(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Am(e.join("/"))}function cd(r){return ke(r.map(e=>{let t=oe(e[0]),n=Uint8Array.from(De(t.code));return e.length>1&&e[1]!=null&&(n=ke([n,e[1]])),n}))}function d_(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=yt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ue(t)}}function Am(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var ad=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var f_=Symbol.for("nodejs.util.inspect.custom"),_m=Symbol.for("@multiformats/js-multiaddr/multiaddr"),h_=[oe("dns").code,oe("dns4").code,oe("dns6").code,oe("dnsaddr").code],Tm=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},ld=class r{bytes;#e;#t;#r;#o;[_m]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=Im(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=a7(e)}else if(Lo(e))t=Im(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=oe("tcp"),a=oe("udp"),c=oe("ip4"),l=oe("ip6"),u=oe("dns6"),d=oe("ip6zone");for(let[h,p]of this.stringTuples())h===d.code&&(i=`%${p??""}`),h_.includes(h)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${p??""}${i}`,e=h===u.code?6:4),(h===s.code||h===a.code)&&(t=oe(h).name==="tcp"?"tcp":"udp",o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=oe(h).name==="tcp"?"tcp":"udp",n=`${p??""}${i}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},oe(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>oe(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(cd(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===Bs.p2p.code&&e.push([n,o]),n===Bs["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?O(be.decode(`z${n}`),"base58btc"):O(Q.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return j(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Us.get(t.name);if(n==null)throw new Tm(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>$(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[f_](){return`Multiaddr(${this.#e})`}};var Us=new Map;function Lo(r){return!!r?.[_m]}function $(r){return new ld(r)}var p_=[oe("tcp").code,oe("dns").code,oe("dnsaddr").code,oe("dns4").code,oe("dns6").code];function l7(r){return f7("sni",r)?.[1]}function u7(r){let e=f7("tcp",r)?.[1];return e==null?"":`:${e}`}function f7(r,e){let t;try{t=oe(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function d7(r){return r.some(([e,t])=>e===oe("tls").code)}function rn(r,e,t){let n=h7[oe(r).name];if(n==null)throw new Error(`Can't interpret protocol ${oe(r).name}`);let o=n(e,t);return r===oe("ip6").code?`[${o}]`:o}var h7={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${rn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${rn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${rn(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${rn(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=d7(e),n=l7(e),o=u7(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=rn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return rn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return rn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=d7(e),n=l7(e),o=u7(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=rn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=rn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function ud(r,e){let n=$(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=oe(o[0]),s=h7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&p_.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var dd=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return ot.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);if(a==null){this.#e++;let c={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await u.arrayBuffer())}),this.#a.set(o,a)}return await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function m_(r,e,t){return r.filter(n=>{if(Y5.matches(n)||e&&Q5.matches(n))return t||mc.matches(n)?!0:Qt(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*fd(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=m_(s.multiaddrs,n,o);if(a.length===0)continue;let c=ud(a[0]);yield new dd(c,{logger:t,transformRequestInit:i.transformRequestInit})}}var Cm=class extends Si{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??hd,this.allowLocal=t.allowLocal??pd,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*fd(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function p7(r,e){return new Cm(r,e)}var md=class{allowInsecure;allowLocal;transformRequestInit;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??hd,this.allowLocal=t.allowLocal??pd,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of fd(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return p7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var hd=!1,pd=!1;function km(r={}){return e=>new md(e,r)}async function*gd(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var E_=Br(yd(),1);var nn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},wd=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Fs=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},bd=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},xd=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},Ed=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},xc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var ir;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>qe(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(ir||(ir={}));var g_=hr("ipns:utils"),m7=N("/ipns/");var y_=0,w_=18;function g7(r){let e;if(r.pubKey!=null)try{e=rt(r.pubKey)}catch(t){throw g_.error(t),t}if(e!=null)return e}function y7(r){let e=N("ipns-signature:");return ke([e,r])}function Ec(r){return"signatureV1"in r?ir.encode({value:N(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:N(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):ir.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Sn(r){let e=ir.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new nn("Missing data or signatureV2");let t=w7(e.data),n=b_(t.Value),o=O(t.Validity);if(e.value!=null&&e.signatureV1!=null)return x_(e),{value:n,validityType:ir.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:ir.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function vc(r){return ke([m7,r.bytes])}function Vs(r){let e=ve(r.slice(m7.length));if(!vd(e,y_)&&!vd(e,w_))throw new co("Multihash in IPNS key was not identity or sha2-256");return e}function w7(r){let e=br(r);if(e.ValidityType===0)e.ValidityType=ir.ValidityType.EOL;else throw new Fs("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function b_(r){let e=O(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${Q.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${Q.parse(e).toV1().toString()}`}catch{}throw new xd("Value must be a valid content path starting with /")}function x_(r){if(r.data==null)throw new Ed("Record data is missing");let e=w7(r.data);if(!j(e.Value,r.value??new Uint8Array(0)))throw new nn('Field "value" did not match between protobuf and CBOR');if(!j(e.Validity,r.validity??new Uint8Array(0)))throw new nn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new nn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new nn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new nn('Field "ttl" did not match between protobuf and CBOR')}function vd(r,e){return r.code===e}var mW=hr("ipns"),gW=60*60*1e9,v_="/ipns/",yW=v_.length;var b7=Br(yd(),1);var Sd=hr("ipns:validator"),S_=1024*10,A_=async(r,e)=>{let t=Sn(e),n;try{let o=y7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Sd.error("record signature verification failed"),new nn("Record signature verification failed");if(t.validityType===ir.ValidityType.EOL){if(b7.default.fromString(t.validity).toDate().getTime()<Date.now())throw Sd.error("record has expired"),new wd("record has expired")}else if(t.validityType!=null)throw Sd.error("the validity type is unsupported"),new Fs("The validity type is unsupported");Sd("ipns record for %s is valid",t.value)};async function Ad(r,e){if(e.byteLength>S_)throw new bd("The record is too large");let t=Vs(r),n;vd(t,0)&&(n=iu(t));let o=Sn(e),i=g7(o)??n;if(i==null)throw new xc("Could not extract public key from IPNS record or routing key");let s=vc(i.toMultihash());if(!j(s,r))throw new xc("Embedded public key did not match routing key");await A_(i,e)}var Id=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Sc(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),rs(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Id("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var $s=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},on=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function I_(r){return r[Symbol.asyncIterator]!=null}function T_(r){if(I_(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var x7=T_;var E7=N("/ipns/");function v7(r){return j(r.subarray(0,E7.byteLength),E7)}var Td=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*jt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!v7(e))return;let o=Vs(e),i=Q.createV1(114,o),s=Sn(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!v7(e))throw new Ce("Not found");let n=Vs(e),o=Q.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Ec(i)}catch(i){throw i.name==="BadResponseError"?new Ce("Not found"):i}}},_d=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await x7(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Ce("Not found")}async*getClosestPeers(e,t={}){}};var pt=hr("delegated-routing-v1-http-api-client"),Cd={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},kd=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new En({concurrency:t.concurrentRequests??Cd.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Cd.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Td(this),this.peerRouting=new _d(this),this.cacheName=t.cacheName??Cd.cacheName,this.cacheTTL=t.cacheTTL??Cd.cacheTTL}get[hn](){return this.contentRouting}get[pn](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&pt("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){pt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l==null)throw new on("No response received");if(!l.ok)throw l.status===404?new Ce("No matching records found"):l.status===422?new $s("Request does not conform to schema or semantic constraints"):new on(`Unexpected status code: ${l.status}`);if(l.body==null)throw new on("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new on("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let f of d.Providers){let h=this.#e(f);h!=null&&(yield h)}}else if(u.includes("application/x-ndjson"))for await(let d of Sc(gd(l.body))){let f=this.#e(d);f!=null&&(yield f)}else throw new on(`Unsupported Content-Type: ${u}`)}catch(a){pt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),pt("getProviders finished: %c",e)}}async*getPeers(e,t={}){pt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new $s("Request does not conform to schema or semantic constraints");if(l.body==null)throw new on("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let f of d.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let d of Sc(gd(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){pt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),pt("getPeers finished: %c",e)}}async getIPNS(e,t={}){pt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=le([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(pt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new $s("Request does not conform to schema or semantic constraints");if(l.body==null)throw new on("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Ad(vc(e.multihash),d),Sn(d)}catch(c){throw pt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),pt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){pt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=le([this.shutDownController.signal,o,n.signal]);let s=J(),a=J();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Ec(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(pt("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new on("PUT ipns response had status other than 200")}catch(l){throw pt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),pt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map($)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ve(e.ID),Addrs:n,Protocols:t}}catch(t){pt.error("could not conform record to peer schema",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return pt("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return pt("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function S7(r,e={}){return new kd(new URL(r),e)}function Rm(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var A7="[a-fA-F\\d:]",No=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${A7})|(?<=${A7})(?=\\s|$))`:"",sn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",st="[a-fA-F\\d]{1,4}",Pd=`
2
+ "use strict";var Helia=(()=>{var DN=Object.create;var Np=Object.defineProperty;var ON=Object.getOwnPropertyDescriptor;var LN=Object.getOwnPropertyNames;var BN=Object.getPrototypeOf,MN=Object.prototype.hasOwnProperty;var Zt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Ct=(r,e)=>{for(var t in e)Np(r,t,{get:e[t],enumerable:!0})},lb=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of LN(e))!MN.call(r,o)&&o!==t&&Np(r,o,{get:()=>e[o],enumerable:!(n=ON(e,o))||n.enumerable});return r};var $t=(r,e,t)=>(t=r!=null?DN(BN(r)):{},lb(e||!r||!r.__esModule?Np(t,"default",{value:r,enumerable:!0}):t,r)),UN=r=>lb(Np({},"__esModule",{value:!0}),r);var bb=Zt((xj,Xy)=>{"use strict";var mD=Object.prototype.hasOwnProperty,$r="~";function Tf(){}Object.create&&(Tf.prototype=Object.create(null),new Tf().__proto__||($r=!1));function gD(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function wb(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new gD(t,n||r,o),s=$r?$r+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function Wp(r,e){--r._eventsCount===0?r._events=new Tf:delete r._events[e]}function Cr(){this._events=new Tf,this._eventsCount=0}Cr.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)mD.call(t,n)&&e.push($r?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Cr.prototype.listeners=function(e){var t=$r?$r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Cr.prototype.listenerCount=function(e){var t=$r?$r+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Cr.prototype.emit=function(e,t,n,o,i,s){var a=$r?$r+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,f;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(f=1,u=new Array(l-1);f<l;f++)u[f-1]=arguments[f];c.fn.apply(c.context,u)}else{var h=c.length,m;for(f=0;f<h;f++)switch(c[f].once&&this.removeListener(e,c[f].fn,void 0,!0),l){case 1:c[f].fn.call(c[f].context);break;case 2:c[f].fn.call(c[f].context,t);break;case 3:c[f].fn.call(c[f].context,t,n);break;case 4:c[f].fn.call(c[f].context,t,n,o);break;default:if(!u)for(m=1,u=new Array(l-1);m<l;m++)u[m-1]=arguments[m];c[f].fn.apply(c[f].context,u)}}return!0};Cr.prototype.on=function(e,t,n){return wb(this,e,t,n,!1)};Cr.prototype.once=function(e,t,n){return wb(this,e,t,n,!0)};Cr.prototype.removeListener=function(e,t,n,o){var i=$r?$r+e:e;if(!this._events[i])return this;if(!t)return Wp(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&Wp(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:Wp(this,i)}return this};Cr.prototype.removeAllListeners=function(e){var t;return e?(t=$r?$r+e:e,this._events[t]&&Wp(this,t)):(this._events=new Tf,this._eventsCount=0),this};Cr.prototype.off=Cr.prototype.removeListener;Cr.prototype.addListener=Cr.prototype.on;Cr.prefixed=$r;Cr.EventEmitter=Cr;typeof Xy<"u"&&(Xy.exports=Cr)});var Mb=Zt((IW,Bb)=>{Bb.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var IS=Zt(Ad=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,f,h;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,f=(c&65280)>>>8,h=c&255,[l,u,f,h].join(".")},s=function(c){var l,u,f,h,m,g;for(l=[],f=h=0;h<=3&&c.length!==0;f=++h){if(f>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}g=e(c),m=g[0],u=g[1],c=c.substring(u),l.push(m)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,u,f,h,m;for(h=0,l=10,u="9",f=0,c.length>1&&c[f]==="0"&&(c[f+1]==="x"||c[f+1]==="X"?(f+=2,l=16):"0"<=c[f+1]&&c[f+1]<="9"&&(f++,l=8,u="7")),m=f;f<c.length;){if("0"<=c[f]&&c[f]<=u)h=h*l+(t(c[f])-n)>>>0;else if(l===16)if("a"<=c[f]&&c[f]<="f")h=h*l+(10+t(c[f])-i)>>>0;else if("A"<=c[f]&&c[f]<="F")h=h*l+(10+t(c[f])-o)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");f++}if(f===m)throw new Error("empty octet");return[h,f]},r=function(){function c(l,u){var f,h,m,g;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(g=l.split("/",2),l=g[0],u=g[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(w){throw f=w,new Error("Invalid mask: "+u)}for(h=m=32;m>=0;h=--m)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(w){throw f=w,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var u,f,h;for(h=s(this.first),f=s(this.last),u=0;h<=f;)l(a(h),h,u),u++,h++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),Ad.ip2long=s,Ad.long2ip=a,Ad.Netmask=r}).call(Ad)});var Vm=Zt((nie,o8)=>{var rie=function(){typeof o8<"u"&&(o8.exports=w);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(P){var N=P-P%1;return N==0&&(P<0||P===0&&1/P!=1/0)?-0:N},u=w.prototype,f=(w.fromDate=function(P){return new w(+P)},w.fromInt64BE=R(0,1,2,3,0,4),w.fromInt64LE=R(3,2,1,0,4,0),w.fromString=function(G){var N,X=new w,G=(G+="").replace(/^\s*[+\-]?\d+/,function(oe){var oe=+oe,L=1970+(oe-1970)%400;return X.year=oe-L,L}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function($,oe,L){return oe<0&&(L*=-1),N=6e4*(60*+oe+ +L),""}).replace(/\.\d+$/,function($){return X.nano=+($+c).substr(1,9),""}).split(/\D+/);if(1<G.length?G[1]--:G[1]=0,X.time=N=Date.UTC.apply(Date,G)-(N||0),isNaN(N))throw new TypeError("Invalid Date");return y(X)},w.fromTimeT=function(P){return I(P,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(P){return this.nano+=+P||0,this},u.getNano=function(){var P=y(this);return(P.time%1e3*a+ +P.nano+1e9)%1e9},u.getTimeT=function(){var N=y(this),P=Math.floor(N.time/1e3),N=N.year;return N&&(P+=N*t*r/e),P},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return x(y(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(P){var N=this,X=N.toDate(),G={H:function(){return j(X.getUTCHours())},L:function(){return U(X.getUTCMilliseconds(),3)},M:function(){return j(X.getUTCMinutes())},N:function(){return U(N.getNano(),9)},S:function(){return j(X.getUTCSeconds())},Y:function(){var $=N.getYear();return 999999<$?"+"+$:9999<$?"+"+U($,6):0<=$?U($,4):-999999<=$?"-"+U(-$,6):$},a:function(){return m[X.getUTCDay()]},b:function(){return h[X.getUTCMonth()]},d:function(){return j(X.getUTCDate())},e:function(){return function($){return(9<$?"":" ")+(0|$)}(X.getUTCDate())},m:function(){return j(X.getUTCMonth()+1)}};return function $(oe){return oe.replace(/%./g,function(L){var K=L[1],B=g[K],K=G[K];return B?$(B):K?K():L})}(P||f)},u.writeInt64BE=v(0,1,2,3,0,4),u.writeInt64LE=v(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],g={"%":"%",F:"%Y-%m-%d",n:`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return w;function w(P,N,X){var G=this;if(!(G instanceof w))return new w(P,N,X);G.time=+P||0,G.nano=+N||0,G.year=+X||0,y(G)}function y(P){var N,X,G,$=P.year,oe=P.time,L=P.nano,B=((L<0||a<=L)&&(L-=(X=Math.floor(L/a))*a,oe+=X,X=1),$%e);return(oe<-i||i<oe||B)&&((N=l(oe/o))&&($+=N*e,oe-=N*o),(G=x(oe)).setUTCFullYear(B+G.getUTCFullYear()),G=(oe=+G)+(N=l(($-=B)/e))*o,N&&-i<=G&&G<=i&&($-=N*e,oe=G),X=1),X&&(P.year=$,P.time=oe,P.nano=L),P}function x(P){var N=new Date(0);return N.setTime(P),N}function I($,G){$=+$||0;var X=l((G=(G|0)*s)/n)+l($/n),G=G%n+$%n,$=l(G/n);return $&&(X+=$,G-=$*n),new w(1e3*G,0,X*e)}function v(P,N,X,G,$,oe){return function(B,K){var _=y(this);B=B||new Array(8),q(B,K|=0);var k=Math.floor(_.time/1e3),_=_.year*(t*r/e),O=l(_/s)+l(k/s),_=_%s+k%s,k=Math.floor(_/s);return k&&(O+=k,_-=k*s),L(B,K+$,O),L(B,K+oe,_),B};function L(B,K,O){B[K+P]=O>>24&255,B[K+N]=O>>16&255,B[K+X]=O>>8&255,B[K+G]=255&O}}function R(P,N,X,G,$,oe){return function(B,K){q(B,K|=0);var O=L(B,K+$);return I(L(B,K+oe),O)};function L(B,K){return 16777216*B[K+P]+(B[K+N]<<16|B[K+X]<<8|B[K+G])}}function q(P,N){if(P=P&&P.length,P==null)throw new TypeError("Invalid Buffer");if(P<N+8)throw new RangeError("Out of range")}function j(P){return(9<P?"":"0")+(0|P)}function U(P,N){return(c+(0|P)).substr(-N)}}()});var IA=Zt((bce,_A)=>{"use strict";_A.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var NA=Zt((PA,RA)=>{"use strict";var n0=IA(),{hasOwnProperty:CA}=Object.prototype,{propertyIsEnumerable:oF}=Object,lu=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),iF=PA,TA={concatArrays:!1,ignoreUndefined:!1},o0=r=>{let e=[];for(let t in r)CA.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)oF.call(r,n)&&e.push(n)}return e};function uu(r){return Array.isArray(r)?sF(r):n0(r)?aF(r):r}function sF(r){let e=r.slice(0,0);return o0(r).forEach(t=>{lu(e,t,uu(r[t]))}),e}function aF(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return o0(r).forEach(t=>{lu(e,t,uu(r[t]))}),e}var kA=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?lu(r,o,y8(r[o],e[o],n)):lu(r,o,uu(e[o])))}),r),cF=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)CA.call(i,a)&&(s.push(String(a)),i===r?lu(n,o++,i[a]):lu(n,o++,uu(i[a])));n=kA(n,i,o0(i).filter(a=>!s.includes(a)),t)}),n};function y8(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?cF(r,e,t):!n0(e)||!n0(r)?uu(e):kA(r,e,o0(e),t)}RA.exports=function(...r){let e=y8(uu(TA),this!==iF&&this||{},TA),t={_:{}};for(let n of r)if(n!==void 0){if(!n0(n))throw new TypeError("`"+n+"` is not an Option Object");t=y8(t,{_:n},e)}return t._}});var LA=Zt((vce,OA)=>{"use strict";function lF(r){return r>=55296&&r<=56319}function uF(r){return r>=56320&&r<=57343}OA.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],lF(s)&&uF(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var MA=Zt((Ece,BA)=>{"use strict";function fF(r){return r>=55296&&r<=56319}function dF(r){return r>=56320&&r<=57343}BA.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),dF(o)?i!=null&&fF(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var FA=Zt((Sce,UA)=>{"use strict";var hF=LA(),pF=MA();UA.exports=hF.bind(null,pF)});var VA=Zt((Ace,KA)=>{"use strict";var mF=FA(),gF=/[\/\?<>\\:\*\|"]/g,yF=/[\x00-\x1f\x80-\x9f]/g,wF=/^\.+$/,bF=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,xF=/[\. ]+$/;function $A(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(gF,e).replace(yF,e).replace(wF,e).replace(bF,e).replace(xF,e);return mF(t,255)}KA.exports=function(r,e){var t=e&&e.replacement||"",n=$A(r,t);return t===""?n:$A(n,"")}});var $i=Zt(hu=>{"use strict";var EF="[object ArrayBuffer]",Fi=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===EF}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},w8="string",SF=/^[0-9a-f\s]+$/i,AF=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,_F=/^[a-zA-Z0-9-_]+$/,s0=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Fi.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},zn=class{static toString(e,t=!1){let n=Fi.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},a0=class r{static isHex(e){return typeof e===w8&&SF.test(e)}static isBase64(e){return typeof e===w8&&AF.test(e)}static isBase64Url(e){return typeof e===w8&&_F.test(e)}static ToString(e,t="utf8"){let n=Fi.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return zn.toString(n,!0);case"utf16":case"utf16be":return zn.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 zn.fromString(e,!0);case"utf16":case"utf16be":return zn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Fi.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return s0.fromString(e);case"utf16":case"utf16be":return zn.fromString(e);case"utf16le":case"usc2":return zn.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 s0.toString(e);case"utf16":case"utf16be":return zn.toString(e);case"utf16le":case"usc2":return zn.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Fi.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Fi.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return zn.toString(e,t)}static FromUtf16String(e,t=!1){return zn.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,"")||""}};a0.DEFAULT_UTF8_ENCODING="utf8";function IF(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function TF(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function CF(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}hu.BufferSourceConverter=Fi;hu.Convert=a0;hu.assign=IF;hu.combine=TF;hu.isEqual=CF});var uI=Zt((xde,lI)=>{function Zn(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}lI.exports=Zn;Zn.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Zn.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Zn.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Zn.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Zn.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Zn.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Zn.prototype.start=Zn.prototype.try;Zn.prototype.errors=function(){return this._errors};Zn.prototype.attempts=function(){return this._attempts};Zn.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var fI=Zt(Tc=>{var U$=uI();Tc.operation=function(r){var e=Tc.timeouts(r);return new U$(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};Tc.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};Tc.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};Tc.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=Tc.operation(e),u=Array.prototype.slice.call(arguments,1),f=u.pop();u.push(function(h){l.retry(h)||(h&&(arguments[0]=l.mainError()),f.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var hI=Zt((Ede,dI)=>{dI.exports=fI()});var yk=Zt(()=>{var gk;(function(r){(function(e){var t=typeof globalThis=="object"||typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:a(),n=o(r);typeof t.Reflect<"u"&&(n=o(t.Reflect,n)),e(n,t),typeof t.Reflect>"u"&&(t.Reflect=r);function o(c,l){return function(u,f){Object.defineProperty(c,u,{configurable:!0,writable:!0,value:f}),l&&l(u,f)}}function i(){try{return Function("return this;")()}catch{}}function s(){try{return(0,eval)("(function() { return this; })()")}catch{}}function a(){return i()||s()}})(function(e,t){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",i=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",s=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",a=typeof Object.create=="function",c={__proto__:[]}instanceof Array,l=!a&&!c,u={create:a?function(){return Fy(Object.create(null))}:c?function(){return Fy({__proto__:null})}:function(){return Fy({})},has:l?function(S,T){return n.call(S,T)}:function(S,T){return T in S},get:l?function(S,T){return n.call(S,T)?S[T]:void 0}:function(S,T){return S[T]}},f=Object.getPrototypeOf(Function),h=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:CN(),m=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:kN(),g=typeof WeakMap=="function"?WeakMap:PN(),w=o?Symbol.for("@reflect-metadata:registry"):void 0,y=_N(),x=IN(y);function I(S,T,F,Z){if(V(F)){if(!Ot(S))throw new TypeError;if(!Ir(T))throw new TypeError;return $(S,T)}else{if(!Ot(S))throw new TypeError;if(!he(T))throw new TypeError;if(!he(Z)&&!V(Z)&&!xe(Z))throw new TypeError;return xe(Z)&&(Z=void 0),F=pt(F),oe(S,T,F,Z)}}e("decorate",I);function v(S,T){function F(Z,ve){if(!he(Z))throw new TypeError;if(!V(ve)&&!En(ve))throw new TypeError;_(S,T,Z,ve)}return F}e("metadata",v);function R(S,T,F,Z){if(!he(F))throw new TypeError;return V(Z)||(Z=pt(Z)),_(S,T,F,Z)}e("defineMetadata",R);function q(S,T,F){if(!he(T))throw new TypeError;return V(F)||(F=pt(F)),L(S,T,F)}e("hasMetadata",q);function j(S,T,F){if(!he(T))throw new TypeError;return V(F)||(F=pt(F)),B(S,T,F)}e("hasOwnMetadata",j);function U(S,T,F){if(!he(T))throw new TypeError;return V(F)||(F=pt(F)),K(S,T,F)}e("getMetadata",U);function P(S,T,F){if(!he(T))throw new TypeError;return V(F)||(F=pt(F)),O(S,T,F)}e("getOwnMetadata",P);function N(S,T){if(!he(S))throw new TypeError;return V(T)||(T=pt(T)),k(S,T)}e("getMetadataKeys",N);function X(S,T){if(!he(S))throw new TypeError;return V(T)||(T=pt(T)),z(S,T)}e("getOwnMetadataKeys",X);function G(S,T,F){if(!he(T))throw new TypeError;if(V(F)||(F=pt(F)),!he(T))throw new TypeError;V(F)||(F=pt(F));var Z=_f(T,F,!1);return V(Z)?!1:Z.OrdinaryDeleteMetadata(S,T,F)}e("deleteMetadata",G);function $(S,T){for(var F=S.length-1;F>=0;--F){var Z=S[F],ve=Z(T);if(!V(ve)&&!xe(ve)){if(!Ir(ve))throw new TypeError;T=ve}}return T}function oe(S,T,F,Z){for(var ve=S.length-1;ve>=0;--ve){var Lt=S[ve],Wt=Lt(T,F,Z);if(!V(Wt)&&!xe(Wt)){if(!he(Wt))throw new TypeError;Z=Wt}}return Z}function L(S,T,F){var Z=B(S,T,F);if(Z)return!0;var ve=Uy(T);return xe(ve)?!1:L(S,ve,F)}function B(S,T,F){var Z=_f(T,F,!1);return V(Z)?!1:Qe(Z.OrdinaryHasOwnMetadata(S,T,F))}function K(S,T,F){var Z=B(S,T,F);if(Z)return O(S,T,F);var ve=Uy(T);if(!xe(ve))return K(S,ve,F)}function O(S,T,F){var Z=_f(T,F,!1);if(!V(Z))return Z.OrdinaryGetOwnMetadata(S,T,F)}function _(S,T,F,Z){var ve=_f(F,Z,!0);ve.OrdinaryDefineOwnMetadata(S,T,F,Z)}function k(S,T){var F=z(S,T),Z=Uy(S);if(Z===null)return F;var ve=k(Z,T);if(ve.length<=0)return F;if(F.length<=0)return ve;for(var Lt=new m,Wt=[],$e=0,ie=F;$e<ie.length;$e++){var ue=ie[$e],pe=Lt.has(ue);pe||(Lt.add(ue),Wt.push(ue))}for(var ye=0,Ke=ve;ye<Ke.length;ye++){var ue=Ke[ye],pe=Lt.has(ue);pe||(Lt.add(ue),Wt.push(ue))}return Wt}function z(S,T){var F=_f(S,T,!1);return F?F.OrdinaryOwnMetadataKeys(S,T):[]}function re(S){if(S===null)return 1;switch(typeof S){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return S===null?1:6;default:return 6}}function V(S){return S===void 0}function xe(S){return S===null}function Pe(S){return typeof S=="symbol"}function he(S){return typeof S=="object"?S!==null:typeof S=="function"}function De(S,T){switch(re(S)){case 0:return S;case 1:return S;case 2:return S;case 3:return S;case 4:return S;case 5:return S}var F=T===3?"string":T===5?"number":"default",Z=Af(S,i);if(Z!==void 0){var ve=Z.call(S,F);if(he(ve))throw new TypeError;return ve}return tt(S,F==="default"?"number":F)}function tt(S,T){if(T==="string"){var F=S.toString;if(_t(F)){var Z=F.call(S);if(!he(Z))return Z}var ve=S.valueOf;if(_t(ve)){var Z=ve.call(S);if(!he(Z))return Z}}else{var ve=S.valueOf;if(_t(ve)){var Z=ve.call(S);if(!he(Z))return Z}var Lt=S.toString;if(_t(Lt)){var Z=Lt.call(S);if(!he(Z))return Z}}throw new TypeError}function Qe(S){return!!S}function lt(S){return""+S}function pt(S){var T=De(S,3);return Pe(T)?T:lt(T)}function Ot(S){return Array.isArray?Array.isArray(S):S instanceof Object?S instanceof Array:Object.prototype.toString.call(S)==="[object Array]"}function _t(S){return typeof S=="function"}function Ir(S){return typeof S=="function"}function En(S){switch(re(S)){case 3:return!0;case 4:return!0;default:return!1}}function Ei(S,T){return S===T||S!==S&&T!==T}function Af(S,T){var F=S[T];if(F!=null){if(!_t(F))throw new TypeError;return F}}function Cp(S){var T=Af(S,s);if(!_t(T))throw new TypeError;var F=T.call(S);if(!he(F))throw new TypeError;return F}function kp(S){return S.value}function Pp(S){var T=S.next();return T.done?!1:T}function Rp(S){var T=S.return;T&&T.call(S)}function Uy(S){var T=Object.getPrototypeOf(S);if(typeof S!="function"||S===f||T!==f)return T;var F=S.prototype,Z=F&&Object.getPrototypeOf(F);if(Z==null||Z===Object.prototype)return T;var ve=Z.constructor;return typeof ve!="function"||ve===S?T:ve}function AN(){var S;!V(w)&&typeof t.Reflect<"u"&&!(w in t.Reflect)&&typeof t.Reflect.defineMetadata=="function"&&(S=TN(t.Reflect));var T,F,Z,ve=new g,Lt={registerProvider:Wt,getProvider:ie,setProvider:pe};return Lt;function Wt(ye){if(!Object.isExtensible(Lt))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case S===ye:break;case V(T):T=ye;break;case T===ye:break;case V(F):F=ye;break;case F===ye:break;default:Z===void 0&&(Z=new m),Z.add(ye);break}}function $e(ye,Ke){if(!V(T)){if(T.isProviderFor(ye,Ke))return T;if(!V(F)){if(F.isProviderFor(ye,Ke))return T;if(!V(Z))for(var mt=Cp(Z);;){var Bt=Pp(mt);if(!Bt)return;var fo=kp(Bt);if(fo.isProviderFor(ye,Ke))return Rp(mt),fo}}}if(!V(S)&&S.isProviderFor(ye,Ke))return S}function ie(ye,Ke){var mt=ve.get(ye),Bt;return V(mt)||(Bt=mt.get(Ke)),V(Bt)&&(Bt=$e(ye,Ke),V(Bt)||(V(mt)&&(mt=new h,ve.set(ye,mt)),mt.set(Ke,Bt))),Bt}function ue(ye){if(V(ye))throw new TypeError;return T===ye||F===ye||!V(Z)&&Z.has(ye)}function pe(ye,Ke,mt){if(!ue(mt))throw new Error("Metadata provider not registered.");var Bt=ie(ye,Ke);if(Bt!==mt){if(!V(Bt))return!1;var fo=ve.get(ye);V(fo)&&(fo=new h,ve.set(ye,fo)),fo.set(Ke,mt)}return!0}}function _N(){var S;return!V(w)&&he(t.Reflect)&&Object.isExtensible(t.Reflect)&&(S=t.Reflect[w]),V(S)&&(S=AN()),!V(w)&&he(t.Reflect)&&Object.isExtensible(t.Reflect)&&Object.defineProperty(t.Reflect,w,{enumerable:!1,configurable:!1,writable:!1,value:S}),S}function IN(S){var T=new g,F={isProviderFor:function(ue,pe){var ye=T.get(ue);return V(ye)?!1:ye.has(pe)},OrdinaryDefineOwnMetadata:Wt,OrdinaryHasOwnMetadata:ve,OrdinaryGetOwnMetadata:Lt,OrdinaryOwnMetadataKeys:$e,OrdinaryDeleteMetadata:ie};return y.registerProvider(F),F;function Z(ue,pe,ye){var Ke=T.get(ue),mt=!1;if(V(Ke)){if(!ye)return;Ke=new h,T.set(ue,Ke),mt=!0}var Bt=Ke.get(pe);if(V(Bt)){if(!ye)return;if(Bt=new h,Ke.set(pe,Bt),!S.setProvider(ue,pe,F))throw Ke.delete(pe),mt&&T.delete(ue),new Error("Wrong provider for target.")}return Bt}function ve(ue,pe,ye){var Ke=Z(pe,ye,!1);return V(Ke)?!1:Qe(Ke.has(ue))}function Lt(ue,pe,ye){var Ke=Z(pe,ye,!1);if(!V(Ke))return Ke.get(ue)}function Wt(ue,pe,ye,Ke){var mt=Z(ye,Ke,!0);mt.set(ue,pe)}function $e(ue,pe){var ye=[],Ke=Z(ue,pe,!1);if(V(Ke))return ye;for(var mt=Ke.keys(),Bt=Cp(mt),fo=0;;){var cb=Pp(Bt);if(!cb)return ye.length=fo,ye;var RN=kp(cb);try{ye[fo]=RN}catch(NN){try{Rp(Bt)}finally{throw NN}}fo++}}function ie(ue,pe,ye){var Ke=Z(pe,ye,!1);if(V(Ke)||!Ke.delete(ue))return!1;if(Ke.size===0){var mt=T.get(pe);V(mt)||(mt.delete(ye),mt.size===0&&T.delete(mt))}return!0}}function TN(S){var T=S.defineMetadata,F=S.hasOwnMetadata,Z=S.getOwnMetadata,ve=S.getOwnMetadataKeys,Lt=S.deleteMetadata,Wt=new g,$e={isProviderFor:function(ie,ue){var pe=Wt.get(ie);return!V(pe)&&pe.has(ue)?!0:ve(ie,ue).length?(V(pe)&&(pe=new m,Wt.set(ie,pe)),pe.add(ue),!0):!1},OrdinaryDefineOwnMetadata:T,OrdinaryHasOwnMetadata:F,OrdinaryGetOwnMetadata:Z,OrdinaryOwnMetadataKeys:ve,OrdinaryDeleteMetadata:Lt};return $e}function _f(S,T,F){var Z=y.getProvider(S,T);if(!V(Z))return Z;if(F){if(y.setProvider(S,T,x))return x;throw new Error("Illegal state.")}}function CN(){var S={},T=[],F=function(){function $e(ie,ue,pe){this._index=0,this._keys=ie,this._values=ue,this._selector=pe}return $e.prototype["@@iterator"]=function(){return this},$e.prototype[s]=function(){return this},$e.prototype.next=function(){var ie=this._index;if(ie>=0&&ie<this._keys.length){var ue=this._selector(this._keys[ie],this._values[ie]);return ie+1>=this._keys.length?(this._index=-1,this._keys=T,this._values=T):this._index++,{value:ue,done:!1}}return{value:void 0,done:!0}},$e.prototype.throw=function(ie){throw this._index>=0&&(this._index=-1,this._keys=T,this._values=T),ie},$e.prototype.return=function(ie){return this._index>=0&&(this._index=-1,this._keys=T,this._values=T),{value:ie,done:!0}},$e}(),Z=function(){function $e(){this._keys=[],this._values=[],this._cacheKey=S,this._cacheIndex=-2}return Object.defineProperty($e.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),$e.prototype.has=function(ie){return this._find(ie,!1)>=0},$e.prototype.get=function(ie){var ue=this._find(ie,!1);return ue>=0?this._values[ue]:void 0},$e.prototype.set=function(ie,ue){var pe=this._find(ie,!0);return this._values[pe]=ue,this},$e.prototype.delete=function(ie){var ue=this._find(ie,!1);if(ue>=0){for(var pe=this._keys.length,ye=ue+1;ye<pe;ye++)this._keys[ye-1]=this._keys[ye],this._values[ye-1]=this._values[ye];return this._keys.length--,this._values.length--,Ei(ie,this._cacheKey)&&(this._cacheKey=S,this._cacheIndex=-2),!0}return!1},$e.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=S,this._cacheIndex=-2},$e.prototype.keys=function(){return new F(this._keys,this._values,ve)},$e.prototype.values=function(){return new F(this._keys,this._values,Lt)},$e.prototype.entries=function(){return new F(this._keys,this._values,Wt)},$e.prototype["@@iterator"]=function(){return this.entries()},$e.prototype[s]=function(){return this.entries()},$e.prototype._find=function(ie,ue){if(!Ei(this._cacheKey,ie)){this._cacheIndex=-1;for(var pe=0;pe<this._keys.length;pe++)if(Ei(this._keys[pe],ie)){this._cacheIndex=pe;break}}return this._cacheIndex<0&&ue&&(this._cacheIndex=this._keys.length,this._keys.push(ie),this._values.push(void 0)),this._cacheIndex},$e}();return Z;function ve($e,ie){return $e}function Lt($e,ie){return ie}function Wt($e,ie){return[$e,ie]}}function kN(){var S=function(){function T(){this._map=new h}return Object.defineProperty(T.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),T.prototype.has=function(F){return this._map.has(F)},T.prototype.add=function(F){return this._map.set(F,F),this},T.prototype.delete=function(F){return this._map.delete(F)},T.prototype.clear=function(){this._map.clear()},T.prototype.keys=function(){return this._map.keys()},T.prototype.values=function(){return this._map.keys()},T.prototype.entries=function(){return this._map.entries()},T.prototype["@@iterator"]=function(){return this.keys()},T.prototype[s]=function(){return this.keys()},T}();return S}function PN(){var S=16,T=u.create(),F=Z();return function(){function ie(){this._key=Z()}return ie.prototype.has=function(ue){var pe=ve(ue,!1);return pe!==void 0?u.has(pe,this._key):!1},ie.prototype.get=function(ue){var pe=ve(ue,!1);return pe!==void 0?u.get(pe,this._key):void 0},ie.prototype.set=function(ue,pe){var ye=ve(ue,!0);return ye[this._key]=pe,this},ie.prototype.delete=function(ue){var pe=ve(ue,!1);return pe!==void 0?delete pe[this._key]:!1},ie.prototype.clear=function(){this._key=Z()},ie}();function Z(){var ie;do ie="@@WeakMap@@"+$e();while(u.has(T,ie));return T[ie]=!0,ie}function ve(ie,ue){if(!n.call(ie,F)){if(!ue)return;Object.defineProperty(ie,F,{value:u.create()})}return ie[F]}function Lt(ie,ue){for(var pe=0;pe<ue;++pe)ie[pe]=Math.random()*255|0;return ie}function Wt(ie){if(typeof Uint8Array=="function"){var ue=new Uint8Array(ie);return typeof crypto<"u"?crypto.getRandomValues(ue):typeof msCrypto<"u"?msCrypto.getRandomValues(ue):Lt(ue,ie),ue}return Lt(new Array(ie),ie)}function $e(){var ie=Wt(S);ie[6]=ie[6]&79|64,ie[8]=ie[8]&191|128;for(var ue="",pe=0;pe<S;++pe){var ye=ie[pe];(pe===4||pe===6||pe===8)&&(ue+="-"),ye<16&&(ue+="0"),ue+=ye.toString(16).toLowerCase()}return ue}}function Fy(S){return S.__=void 0,delete S.__,S}})})(gk||(gk={}))});var IP=Zt((iPe,sy)=>{var sP,aP,cP,lP,uP,fP,dP,hP,pP,iy,hw,mP,gP,pf,yP,wP,bP,xP,vP,EP,SP,AP,_P;(function(r){var e=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof sy=="object"&&typeof sy.exports=="object"?r(t(e,t(sy.exports))):r(t(e));function t(n,o){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,s){return n[i]=o?o(i,s):s}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])};sP=function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)},aP=Object.assign||function(t){for(var n,o=1,i=arguments.length;o<i;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},cP=function(t,n){var o={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&n.indexOf(i)<0&&(o[i]=t[i]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,i=Object.getOwnPropertySymbols(t);s<i.length;s++)n.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(t,i[s])&&(o[i[s]]=t[i[s]]);return o},lP=function(t,n,o,i){var s=arguments.length,a=s<3?n:i===null?i=Object.getOwnPropertyDescriptor(n,o):i,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(t,n,o,i);else for(var l=t.length-1;l>=0;l--)(c=t[l])&&(a=(s<3?c(a):s>3?c(n,o,a):c(n,o))||a);return s>3&&a&&Object.defineProperty(n,o,a),a},uP=function(t,n){return function(o,i){n(o,i,t)}},fP=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},dP=function(t,n,o,i){function s(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(h){try{f(i.next(h))}catch(m){c(m)}}function u(h){try{f(i.throw(h))}catch(m){c(m)}}function f(h){h.done?a(h.value):s(h.value).then(l,u)}f((i=i.apply(t,n||[])).next())})},hP=function(t,n){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,s,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function l(f){return function(h){return u([f,h])}}function u(f){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,s&&(a=f[0]&2?s.return:f[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,f[1])).done)return a;switch(s=0,a&&(f=[f[0]&2,a.value]),f[0]){case 0:case 1:a=f;break;case 4:return o.label++,{value:f[1],done:!1};case 5:o.label++,s=f[1],f=[0];continue;case 7:f=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(f[0]===6||f[0]===2)){o=0;continue}if(f[0]===3&&(!a||f[1]>a[0]&&f[1]<a[3])){o.label=f[1];break}if(f[0]===6&&o.label<a[1]){o.label=a[1],a=f;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(f);break}a[2]&&o.ops.pop(),o.trys.pop();continue}f=n.call(t,o)}catch(h){f=[6,h],s=0}finally{i=a=0}if(f[0]&5)throw f[1];return{value:f[0]?f[1]:void 0,done:!0}}},_P=function(t,n,o,i){i===void 0&&(i=o),t[i]=n[o]},pP=function(t,n){for(var o in t)o!=="default"&&!n.hasOwnProperty(o)&&(n[o]=t[o])},iy=function(t){var n=typeof Symbol=="function"&&Symbol.iterator,o=n&&t[n],i=0;if(o)return o.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},hw=function(t,n){var o=typeof Symbol=="function"&&t[Symbol.iterator];if(!o)return t;var i=o.call(t),s,a=[],c;try{for(;(n===void 0||n-- >0)&&!(s=i.next()).done;)a.push(s.value)}catch(l){c={error:l}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(c)throw c.error}}return a},mP=function(){for(var t=[],n=0;n<arguments.length;n++)t=t.concat(hw(arguments[n]));return t},gP=function(){for(var t=0,n=0,o=arguments.length;n<o;n++)t+=arguments[n].length;for(var i=Array(t),s=0,n=0;n<o;n++)for(var a=arguments[n],c=0,l=a.length;c<l;c++,s++)i[s]=a[c];return i},pf=function(t){return this instanceof pf?(this.v=t,this):new pf(t)},yP=function(t,n,o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=o.apply(t,n||[]),s,a=[];return s={},c("next"),c("throw"),c("return"),s[Symbol.asyncIterator]=function(){return this},s;function c(g){i[g]&&(s[g]=function(w){return new Promise(function(y,x){a.push([g,w,y,x])>1||l(g,w)})})}function l(g,w){try{u(i[g](w))}catch(y){m(a[0][3],y)}}function u(g){g.value instanceof pf?Promise.resolve(g.value.v).then(f,h):m(a[0][2],g)}function f(g){l("next",g)}function h(g){l("throw",g)}function m(g,w){g(w),a.shift(),a.length&&l(a[0][0],a[0][1])}},wP=function(t){var n,o;return n={},i("next"),i("throw",function(s){throw s}),i("return"),n[Symbol.iterator]=function(){return this},n;function i(s,a){n[s]=t[s]?function(c){return(o=!o)?{value:pf(t[s](c)),done:s==="return"}:a?a(c):c}:a}},bP=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],o;return n?n.call(t):(t=typeof iy=="function"?iy(t):t[Symbol.iterator](),o={},i("next"),i("throw"),i("return"),o[Symbol.asyncIterator]=function(){return this},o);function i(a){o[a]=t[a]&&function(c){return new Promise(function(l,u){c=t[a](c),s(l,u,c.done,c.value)})}}function s(a,c,l,u){Promise.resolve(u).then(function(f){a({value:f,done:l})},c)}},xP=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},vP=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o in t)Object.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n.default=t,n},EP=function(t){return t&&t.__esModule?t:{default:t}},SP=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},AP=function(t,n,o){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,o),o},r("__extends",sP),r("__assign",aP),r("__rest",cP),r("__decorate",lP),r("__param",uP),r("__metadata",fP),r("__awaiter",dP),r("__generator",hP),r("__exportStar",pP),r("__createBinding",_P),r("__values",iy),r("__read",hw),r("__spread",mP),r("__spreadArrays",gP),r("__await",pf),r("__asyncGenerator",yP),r("__asyncDelegator",wP),r("__asyncValues",bP),r("__makeTemplateObject",xP),r("__importStar",vP),r("__importDefault",EP),r("__classPrivateFieldGet",SP),r("__classPrivateFieldSet",AP)})});var iN=Zt(By=>{"use strict";Object.defineProperty(By,"__esModule",{value:!0});var nb=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}))}}},Ly=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new nb;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};By.EventIterator=Ly;By.default=Ly});var sN=Zt(Tp=>{"use strict";Object.defineProperty(Tp,"__esModule",{value:!0});var ob=iN();Tp.EventIterator=ob.EventIterator;function hq(r,e,t){return new ob.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}Tp.subscribe=hq;Tp.default=ob.EventIterator});var wq={};Ct(wq,{DEFAULT_SESSION_MAX_PROVIDERS:()=>O4,DEFAULT_SESSION_MIN_PROVIDERS:()=>D4,InsufficientProvidersError:()=>Ff,NoRoutersAvailableError:()=>ms,UnknownCodecError:()=>Kf,UnknownHashAlgorithmError:()=>$f,createHelia:()=>yq,heliaDefaults:()=>ab,libp2pDefaults:()=>My});var ub=Symbol.for("@libp2p/connection");var jo=Symbol.for("@libp2p/content-routing");var ga=Symbol.for("@libp2p/peer-discovery");var Dp=Symbol.for("@libp2p/peer-id");function Op(r){return!!r?.[Dp]}var Wo=Symbol.for("@libp2p/peer-routing");var is="keep-alive";var ss=Symbol.for("@libp2p/transport");var ya;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ya||(ya={}));var ir=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},Lp=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Bp=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},D=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Si=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},If=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var Mp=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},gl=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},yl=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Go=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Up=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},wa=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ge=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},wl=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},as=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Fp=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},cs=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Ai=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},Oe=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},$p=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},zo=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Sn=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var _i=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},ba=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},bl=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Kp=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},ls=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},ho=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Le=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function Vp(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function sr(...r){let e=[];for(let t of r)Vp(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Tr(...r){let e=[];for(let t of r)Vp(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var ze=Symbol.for("@libp2p/service-capabilities"),An=Symbol.for("@libp2p/service-dependencies");var jy={};Ct(jy,{base32:()=>Gt,base32hex:()=>GN,base32hexpad:()=>XN,base32hexpadupper:()=>YN,base32hexupper:()=>zN,base32pad:()=>jN,base32padupper:()=>WN,base32upper:()=>qN,base32z:()=>QN});var Zq=new Uint8Array(0);function fb(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 po(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 db(r){return new TextEncoder().encode(r)}function hb(r){return new TextDecoder().decode(r)}function FN(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function f(g){if(g instanceof Uint8Array||(ArrayBuffer.isView(g)?g=new Uint8Array(g.buffer,g.byteOffset,g.byteLength):Array.isArray(g)&&(g=Uint8Array.from(g))),!(g instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(g.length===0)return"";for(var w=0,y=0,x=0,I=g.length;x!==I&&g[x]===0;)x++,w++;for(var v=(I-x)*u+1>>>0,R=new Uint8Array(v);x!==I;){for(var q=g[x],j=0,U=v-1;(q!==0||j<y)&&U!==-1;U--,j++)q+=256*R[U]>>>0,R[U]=q%a>>>0,q=q/a>>>0;if(q!==0)throw new Error("Non-zero carry");y=j,x++}for(var P=v-y;P!==v&&R[P]===0;)P++;for(var N=c.repeat(w);P<v;++P)N+=r.charAt(R[P]);return N}function h(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var w=0;if(g[w]!==" "){for(var y=0,x=0;g[w]===c;)y++,w++;for(var I=(g.length-w)*l+1>>>0,v=new Uint8Array(I);g[w];){var R=t[g.charCodeAt(w)];if(R===255)return;for(var q=0,j=I-1;(R!==0||q<x)&&j!==-1;j--,q++)R+=a*v[j]>>>0,v[j]=R%256>>>0,R=R/256>>>0;if(R!==0)throw new Error("Non-zero carry");x=q,w++}if(g[w]!==" "){for(var U=I-x;U!==I&&v[U]===0;)U++;for(var P=new Uint8Array(y+(I-U)),N=y;U!==I;)P[N++]=v[U++];return P}}}function m(g){var w=h(g);if(w)return w;throw new Error(`Non-${e} character`)}return{encode:f,decodeUnsafe:h,decode:m}}var $N=FN,KN=$N,pb=KN;var Ky=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")}},Vy=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return mb(this,e)}},Hy=class{decoders;constructor(e){this.decoders=e}or(e){return mb(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 mb(r,e){return new Hy({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var qy=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 Ky(e,t,n),this.decoder=new Vy(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function xl({name:r,prefix:e,encode:t,decode:n}){return new qy(r,e,t,n)}function us({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=pb(t,r);return xl({prefix:e,name:r,encode:n,decode:i=>po(o(i))})}function VN(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let f=o[r[u]];if(f===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|f,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function HN(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function kt({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return xl({prefix:e,name:r,encode(o){return HN(o,n,t)},decode(o){return VN(o,n,t,r)}})}var Gt=kt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),qN=kt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),jN=kt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),WN=kt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),GN=kt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),zN=kt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),XN=kt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),YN=kt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),QN=kt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var Wy={};Ct(Wy,{base58btc:()=>Ve,base58flickr:()=>ZN});var Ve=us({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),ZN=us({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Gy={};Ct(Gy,{base64:()=>Kt,base64pad:()=>JN,base64url:()=>xa,base64urlpad:()=>eD});var Kt=kt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),JN=kt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),xa=kt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),eD=kt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});function tD(r,e){try{if(typeof r=="string"&&r.length>0)return rD(r);if(typeof r=="number"&&isFinite(r))return e?.long?oD(r):nD(r);throw new Error("Value is not a string or number.")}catch(t){let n=iD(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function rD(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var qp=tD;function nD(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function oD(r){let e=Math.abs(r);return e>=864e5?Hp(r,e,864e5,"day"):e>=36e5?Hp(r,e,36e5,"hour"):e>=6e4?Hp(r,e,6e4,"minute"):e>=1e3?Hp(r,e,1e3,"second"):`${r} ms`}function Hp(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function iD(r){return typeof r=="object"&&r!==null&&"message"in r}function zy(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=qp,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let f=0;for(let h=0;h<u.length;h++)f=(f<<5)-f+u.charCodeAt(h),f|=0;return t.colors[Math.abs(f)%t.colors.length]}t.selectColor=e;function t(u){let f,h=null,m,g;function w(...y){if(!w.enabled)return;let x=w,I=Number(new Date),v=I-(f||I);x.diff=v,x.prev=f,x.curr=I,f=I,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let R=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(j,U)=>{if(j==="%%")return"%";R++;let P=t.formatters[U];if(typeof P=="function"){let N=y[R];j=P.call(x,N),y.splice(R,1),R--}return j}),t.formatArgs.call(x,y),(x.log||t.log).apply(x,y)}return w.namespace=u,w.useColors=t.useColors(),w.color=t.selectColor(u),w.extend=n,w.destroy=t.destroy,Object.defineProperty(w,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(m!==t.namespaces&&(m=t.namespaces,g=t.enabled(u)),g),set:y=>{h=y}}),typeof t.init=="function"&&t.init(w),w}function n(u,f){let h=t(this.namespace+(typeof f>"u"?":":f)+u);return h.log=this.log,h}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let f,h=(typeof u=="string"?u:"").split(/[\s,]+/),m=h.length;for(f=0;f<m;f++)h[f]&&(u=h[f].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(f=>"-"+f)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let f,h;for(f=0,h=t.skips.length;f<h;f++)if(t.skips[f].test(u))return!1;for(f=0,h=t.names.length;f<h;f++)if(t.names[f].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var jp=dD(),sD=["#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 aD(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function cD(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+qp(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var lD=console.debug??console.log??(()=>{});function uD(r){try{r?jp?.setItem("debug",r):jp?.removeItem("debug")}catch{}}function fD(){let r;try{r=jp?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function dD(){try{return localStorage}catch{}}function hD(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var gb=zy({formatArgs:cD,save:uD,load:fD,useColors:aD,setupFormatters:hD,colors:sD,storage:jp,log:lD});var Jr=gb;Jr.formatters.b=r=>r==null?"undefined":Ve.baseEncode(r);Jr.formatters.t=r=>r==null?"undefined":Gt.baseEncode(r);Jr.formatters.m=r=>r==null?"undefined":Kt.baseEncode(r);Jr.formatters.p=r=>r==null?"undefined":r.toString();Jr.formatters.c=r=>r==null?"undefined":r.toString();Jr.formatters.k=r=>r==null?"undefined":r.toString();Jr.formatters.a=r=>r==null?"undefined":r.toString();Jr.formatters.e=r=>r==null?"undefined":yb(r.stack)??yb(r.message)??r.toString();function pD(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 fs(){return{forComponent(r){return _n(r)}}}function _n(r){let e=pD(`${r}:trace`);return Jr.enabled(`${r}:trace`)&&Jr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=Jr(`${r}:trace`)),Object.assign(Jr(r),{error:Jr(`${r}:error`),trace:e})}function yb(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var ae=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Yy=$t(bb(),1);var Cf=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Qy=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},xb=r=>globalThis.DOMException===void 0?new Qy(r):new DOMException(r),vb=r=>{let e=r.reason===void 0?xb("This operation was aborted."):r.reason;return e instanceof Error?e:xb(e)};function mo(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,f)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:m}=e;m.aborted&&f(vb(m)),a=()=>{f(vb(m))},m.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,f);return}let h=new Cf;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(m){f(m)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?f(o):(h.message=o??`Promise timed out after ${t} milliseconds`,f(h))},t),(async()=>{try{u(await r)}catch(m){f(m)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function Zy(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var kf=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=Zy(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Xo=class extends Yy.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#f;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:kf,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#x(){return this.#t||this.#r<this.#o}get#v(){return this.#s<this.#f}#E(){this.#s--,this.#d(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#d(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#A;if(this.#x&&this.#v){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#d(););}get concurrency(){return this.#f}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.#f=e,this.#h()}async#_(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=mo(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#_(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof Cf&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function Gp(r){let e=[In.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var Jy={};Ct(Jy,{base10:()=>yD});var yD=us({prefix:"9",name:"base10",alphabet:"0123456789"});var e4={};Ct(e4,{base16:()=>wD,base16upper:()=>bD});var wD=kt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),bD=kt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var t4={};Ct(t4,{base2:()=>xD});var xD=kt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var r4={};Ct(r4,{base256emoji:()=>_D});var Eb=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}"),vD=Eb.reduce((r,e,t)=>(r[t]=e,r),[]),ED=Eb.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function SD(r){return r.reduce((e,t)=>(e+=vD[t],e),"")}function AD(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=ED[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var _D=xl({prefix:"\u{1F680}",name:"base256emoji",encode:SD,decode:AD});var n4={};Ct(n4,{base36:()=>Yo,base36upper:()=>ID});var Yo=us({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),ID=us({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var o4={};Ct(o4,{base8:()=>TD});var TD=kt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var i4={};Ct(i4,{identity:()=>CD});var CD=xl({prefix:"\0",name:"identity",encode:r=>hb(r),decode:r=>db(r)});var zp={};Ct(zp,{code:()=>s4,decode:()=>DD,encode:()=>ND,name:()=>RD});var kD=new TextEncoder,PD=new TextDecoder,RD="json",s4=512;function ND(r){return kD.encode(JSON.stringify(r))}function DD(r){return JSON.parse(PD.decode(r))}var vl={};Ct(vl,{code:()=>va,decode:()=>BD,encode:()=>LD,name:()=>OD});var OD="raw",va=85;function LD(r){return po(r)}function BD(r){return po(r)}var l4={};Ct(l4,{identity:()=>Pr});var xt={};Ct(xt,{Digest:()=>Ea,create:()=>kr,decode:()=>Xe,equals:()=>c4,hasCode:()=>tO});var MD=_b,Sb=128,UD=127,FD=~UD,$D=Math.pow(2,31);function _b(r,e,t){e=e||[],t=t||0;for(var n=t;r>=$D;)e[t++]=r&255|Sb,r/=128;for(;r&FD;)e[t++]=r&255|Sb,r>>>=7;return e[t]=r|0,_b.bytes=t-n+1,e}var KD=a4,VD=128,Ab=127;function a4(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw a4.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&Ab)<<o:(s&Ab)*Math.pow(2,o),o+=7}while(s>=VD);return a4.bytes=i-n,t}var HD=Math.pow(2,7),qD=Math.pow(2,14),jD=Math.pow(2,21),WD=Math.pow(2,28),GD=Math.pow(2,35),zD=Math.pow(2,42),XD=Math.pow(2,49),YD=Math.pow(2,56),QD=Math.pow(2,63),ZD=function(r){return r<HD?1:r<qD?2:r<jD?3:r<WD?4:r<GD?5:r<zD?6:r<XD?7:r<YD?8:r<QD?9:10},JD={encode:MD,decode:KD,encodingLength:ZD},eO=JD,Pf=eO;function Rf(r,e=0){return[Pf.decode(r,e),Pf.decode.bytes]}function El(r,e,t=0){return Pf.encode(r,e,t),e}function Sl(r){return Pf.encodingLength(r)}function kr(r,e){let t=e.byteLength,n=Sl(r),o=n+Sl(t),i=new Uint8Array(o+t);return El(r,i,0),El(t,i,n),i.set(e,o),new Ea(r,t,e,i)}function Xe(r){let e=po(r),[t,n]=Rf(e),[o,i]=Rf(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new Ea(t,o,s,e)}function c4(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&fb(r.bytes,t.bytes)}}var Ea=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function tO(r,e){return r.code===e}var Ib=0,rO="identity",Tb=po;function nO(r){return kr(Ib,Tb(r))}var Pr={code:Ib,name:rO,encode:Tb,digest:nO};var d4={};Ct(d4,{sha256:()=>gt,sha512:()=>Yp});function f4({name:r,code:e,encode:t}){return new u4(r,e,t)}var u4=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?kr(this.code,t):t.then(n=>kr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function kb(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var gt=f4({name:"sha2-256",code:18,encode:kb("SHA-256")}),Yp=f4({name:"sha2-512",code:19,encode:kb("SHA-512")});function Pb(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return iO(t,h4(r),e??Ve.encoder);default:return sO(t,h4(r),e??Gt.encoder)}}var Rb=new WeakMap;function h4(r){let e=Rb.get(r);if(e==null){let t=new Map;return Rb.set(r,t),t}return e}var le=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Nf)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==aO)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=kr(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&c4(e.multihash,n.multihash)}toString(e){return Pb(this,e)}toJSON(){return{"/":Pb(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??Nb(n,o,i.bytes))}else if(t[cO]===!0){let{version:n,multihash:o,code:i}=t,s=Xe(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Nf)throw new Error(`Version 0 CID must use dag-pb (code: ${Nf}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Nb(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Nf,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=po(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new Ea(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[f,h]=Rf(e.subarray(t));return t+=h,f},o=n(),i=Nf;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=oO(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return h4(i).set(n,e),i}};function oO(r,e){switch(r[0]){case"Q":{let t=e??Ve;return[Ve.prefix,t.decode(`${Ve.prefix}${r}`)]}case Ve.prefix:{let t=e??Ve;return[Ve.prefix,t.decode(r)]}case Gt.prefix:{let t=e??Gt;return[Gt.prefix,t.decode(r)]}case Yo.prefix:{let t=e??Yo;return[Yo.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function iO(r,e,t){let{prefix:n}=t;if(n!==Ve.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function sO(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var Nf=112,aO=18;function Nb(r,e,t){let n=Sl(r),o=n+Sl(e),i=new Uint8Array(o+t.byteLength);return El(r,i,0),El(e,i,n),i.set(t,o),i}var cO=Symbol.for("@ipld/js-cid/CID");var Sa={...i4,...t4,...o4,...Jy,...e4,...jy,...n4,...Wy,...Gy,...r4},aW={...d4,...l4};function ke(r=0){return new Uint8Array(r)}function It(r=0){return new Uint8Array(r)}function Ob(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Db=Ob("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),p4=Ob("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=It(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),lO={utf8:Db,"utf-8":Db,hex:Sa.base16,latin1:p4,ascii:p4,binary:p4,...Sa},Qp=lO;function M(r,e="utf8"){let t=Qp[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var m4=60;function Zp(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:In[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:In[e.type],TTL:e.TTL??e.ttl??m4,data:e.data instanceof Uint8Array?M(e.data):e.data}))}}var uO=4;function g4(r,e={}){let t=new Xo({concurrency:e.queryConcurrency??uO});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),Gp(o.types).forEach(a=>{i.append("type",In[a])}),o.onProgress?.(new ae("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Zp(await a.json());return o.onProgress?.(new ae("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function Lb(){return[g4("https://cloudflare-dns.com/dns-query"),g4("https://dns.google/resolve")]}var Ub=$t(Mb(),1);var y4=class{lru;constructor(e){this.lru=(0,Ub.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return Zp({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:In[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??m4)*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 Fb(r){return new y4(r)}var fO=1e3,Jp=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=Fb(e.cacheSize??fO),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["."]=Lb())}async query(e,t={}){let n=Gp(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new ae("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new ae("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var In;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(In||(In={}));function e1(r={}){return new Jp(r)}function dO(r){return r[Symbol.asyncIterator]!=null}function hO(r){if(dO(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Rr=hO;function fe(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var t1=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},Al=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new t1(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 t1(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 w4=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function en(r={}){return pO(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 pO(r,e){e=e??{};let t=e.onEnd,n=new Al,o,i,s,a=fe(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((y,x)=>{i=I=>{i=null,n.push(I);try{y(r(n))}catch(v){x(v)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=fe()})}},l=y=>i!=null?i(y):(n.push(y),o),u=y=>(n=new Al,i!=null?i({error:y}):(n.push({error:y}),o)),f=y=>{if(s)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},h=y=>s?o:(s=!0,y!=null?u(y):l({done:!0})),m=()=>(n=new Al,h(),{done:!0}),g=y=>(h(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:m,throw:g,push:f,end:h,get readableLength(){return n.size},onEmpty:async y=>{let x=y?.signal;if(x?.throwIfAborted(),n.isEmpty())return;let I,v;x!=null&&(I=new Promise((R,q)=>{v=()=>{q(new w4)},x.addEventListener("abort",v)}));try{await Promise.race([a.promise,I])}finally{v!=null&&x!=null&&x?.removeEventListener("abort",v)}}},t==null)return o;let w=o;return o={[Symbol.asyncIterator](){return this},next(){return w.next()},throw(y){return w.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return w.return(),t!=null&&(t(),t=void 0),{done:!0}},push:f,end(y){return w.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return w.readableLength},onEmpty:y=>w.onEmpty(y)},o}var b4=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 Jt(r,e,t,n){let o=new b4(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=f=>{try{if(n?.filter?.(f)===!1)return}catch(h){a(),s(h);return}a(),i(f)},l=f=>{a(),s(f.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var r1=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},n1=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var o1=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function ut(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new o1(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new o1(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var i1=class{deferred;signal;constructor(e){this.signal=e,this.deferred=fe(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new ir)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function mO(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var s1=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=mO(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new ir),this.cleanup())}async join(e={}){let t=new i1(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 ut(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var Kr=class extends Le{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new n1;let n=new s1(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new ir)}),this.clear()}async onEmpty(e){this.size!==0&&await Jt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Jt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Jt(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=en({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new ir("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var gO=["string","number","bigint","symbol"],yO=["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 $b(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(gO.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(wO(r))return"Buffer";let t=bO(r);return t||"Object"}function wO(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function bO(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(yO.includes(e))return e}var E=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};E.uint=new E(0,"uint",!0);E.negint=new E(1,"negint",!0);E.bytes=new E(2,"bytes",!0);E.string=new E(3,"string",!0);E.array=new E(4,"array",!1);E.map=new E(5,"map",!1);E.tag=new E(6,"tag",!1);E.float=new E(7,"float",!0);E.false=new E(7,"false",!0);E.true=new E(7,"true",!0);E.null=new E(7,"null",!0);E.undefined=new E(7,"undefined",!0);E.break=new E(7,"break",!0);var W=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 _l=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",xO=new TextDecoder,vO=new TextEncoder;function a1(r){return _l&&globalThis.Buffer.isBuffer(r)}function Df(r){return r instanceof Uint8Array?a1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var qb=_l?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Vb(r,e,t):(r,e,t)=>t-e>64?xO.decode(r.subarray(e,t)):Vb(r,e,t),c1=_l?r=>r.length>64?globalThis.Buffer.from(r):Kb(r):r=>r.length>64?vO.encode(r):Kb(r),Qo=r=>Uint8Array.from(r),Il=_l?(r,e,t)=>a1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),jb=_l?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),Df(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},Wb=_l?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Gb(r,e){if(a1(r)&&a1(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function Kb(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 Vb(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return x4(n)}var Hb=4096;function x4(r){let e=r.length;if(e<=Hb)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=Hb));return t}var EO=256,Of=class{constructor(e=EO){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=Wb(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=Il(n,0,this.cursor)}else t=jb(this.chunks,this.cursor);return e&&this.reset(),t}};var me="CBOR decode error:",Ii="CBOR encode error:",Lf=[];Lf[23]=1;Lf[24]=2;Lf[25]=3;Lf[26]=5;Lf[27]=9;function Ti(r,e,t){if(r.length-e<t)throw new Error(`${me} not enough data for type`)}var er=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Tn(r,e,t){Ti(r,e,1);let n=r[e];if(t.strict===!0&&n<er[0])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function Cn(r,e,t){Ti(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<er[1])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function kn(r,e,t){Ti(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<er[2])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function Pn(r,e,t){Ti(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<er[3])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${me} integers outside of the safe integer range are not supported`)}function zb(r,e,t,n){return new W(E.uint,Tn(r,e+1,n),2)}function Xb(r,e,t,n){return new W(E.uint,Cn(r,e+1,n),3)}function Yb(r,e,t,n){return new W(E.uint,kn(r,e+1,n),5)}function Qb(r,e,t,n){return new W(E.uint,Pn(r,e+1,n),9)}function Kn(r,e){return ar(r,0,e.value)}function ar(r,e,t){if(t<er[0]){let n=Number(t);r.push([e|n])}else if(t<er[1]){let n=Number(t);r.push([e|24,n])}else if(t<er[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<er[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<er[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${me} encountered BigInt larger than allowable range`)}}Kn.encodedSize=function(e){return ar.encodedSize(e.value)};ar.encodedSize=function(e){return e<er[0]?1:e<er[1]?2:e<er[2]?3:e<er[3]?5:9};Kn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Zb(r,e,t,n){return new W(E.negint,-1-Tn(r,e+1,n),2)}function Jb(r,e,t,n){return new W(E.negint,-1-Cn(r,e+1,n),3)}function ex(r,e,t,n){return new W(E.negint,-1-kn(r,e+1,n),5)}var v4=BigInt(-1),tx=BigInt(1);function rx(r,e,t,n){let o=Pn(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new W(E.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${me} integers outside of the safe integer range are not supported`);return new W(E.negint,v4-BigInt(o),9)}function l1(r,e){let t=e.value,n=typeof t=="bigint"?t*v4-tx:t*-1-1;ar(r,e.type.majorEncoded,n)}l1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*v4-tx:t*-1-1;return n<er[0]?1:n<er[1]?2:n<er[2]?3:n<er[3]?5:9};l1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Bf(r,e,t,n){Ti(r,e,t+n);let o=Il(r,e+t,e+t+n);return new W(E.bytes,o,t+n)}function nx(r,e,t,n){return Bf(r,e,1,t)}function ox(r,e,t,n){return Bf(r,e,2,Tn(r,e+1,n))}function ix(r,e,t,n){return Bf(r,e,3,Cn(r,e+1,n))}function sx(r,e,t,n){return Bf(r,e,5,kn(r,e+1,n))}function ax(r,e,t,n){let o=Pn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer bytes lengths not supported`);return Bf(r,e,9,o)}function u1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?c1(r.value):r.value),r.encodedBytes}function Tl(r,e){let t=u1(e);ar(r,e.type.majorEncoded,t.length),r.push(t)}Tl.encodedSize=function(e){let t=u1(e);return ar.encodedSize(t.length)+t.length};Tl.compareTokens=function(e,t){return AO(u1(e),u1(t))};function AO(r,e){return r.length<e.length?-1:r.length>e.length?1:Gb(r,e)}function Mf(r,e,t,n,o){let i=t+n;Ti(r,e,i);let s=new W(E.string,qb(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=Il(r,e+t,e+i)),s}function cx(r,e,t,n){return Mf(r,e,1,t,n)}function lx(r,e,t,n){return Mf(r,e,2,Tn(r,e+1,n),n)}function ux(r,e,t,n){return Mf(r,e,3,Cn(r,e+1,n),n)}function fx(r,e,t,n){return Mf(r,e,5,kn(r,e+1,n),n)}function dx(r,e,t,n){let o=Pn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer string lengths not supported`);return Mf(r,e,9,o,n)}var hx=Tl;function Cl(r,e,t,n){return new W(E.array,n,t)}function px(r,e,t,n){return Cl(r,e,1,t)}function mx(r,e,t,n){return Cl(r,e,2,Tn(r,e+1,n))}function gx(r,e,t,n){return Cl(r,e,3,Cn(r,e+1,n))}function yx(r,e,t,n){return Cl(r,e,5,kn(r,e+1,n))}function wx(r,e,t,n){let o=Pn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer array lengths not supported`);return Cl(r,e,9,o)}function bx(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return Cl(r,e,1,1/0)}function f1(r,e){ar(r,E.array.majorEncoded,e.value)}f1.compareTokens=Kn.compareTokens;f1.encodedSize=function(e){return ar.encodedSize(e.value)};function kl(r,e,t,n){return new W(E.map,n,t)}function xx(r,e,t,n){return kl(r,e,1,t)}function vx(r,e,t,n){return kl(r,e,2,Tn(r,e+1,n))}function Ex(r,e,t,n){return kl(r,e,3,Cn(r,e+1,n))}function Sx(r,e,t,n){return kl(r,e,5,kn(r,e+1,n))}function Ax(r,e,t,n){let o=Pn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer map lengths not supported`);return kl(r,e,9,o)}function _x(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return kl(r,e,1,1/0)}function d1(r,e){ar(r,E.map.majorEncoded,e.value)}d1.compareTokens=Kn.compareTokens;d1.encodedSize=function(e){return ar.encodedSize(e.value)};function Ix(r,e,t,n){return new W(E.tag,t,1)}function Tx(r,e,t,n){return new W(E.tag,Tn(r,e+1,n),2)}function Cx(r,e,t,n){return new W(E.tag,Cn(r,e+1,n),3)}function kx(r,e,t,n){return new W(E.tag,kn(r,e+1,n),5)}function Px(r,e,t,n){return new W(E.tag,Pn(r,e+1,n),9)}function h1(r,e){ar(r,E.tag.majorEncoded,e.value)}h1.compareTokens=Kn.compareTokens;h1.encodedSize=function(e){return ar.encodedSize(e.value)};var PO=20,RO=21,NO=22,DO=23;function Rx(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${me} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new W(E.null,null,1):new W(E.undefined,void 0,1)}function Nx(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return new W(E.break,void 0,1)}function E4(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${me} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${me} Infinity values are not supported`)}return new W(E.float,r,e)}function Dx(r,e,t,n){return E4(S4(r,e+1),3,n)}function Ox(r,e,t,n){return E4(A4(r,e+1),5,n)}function Lx(r,e,t,n){return E4(Fx(r,e+1),9,n)}function p1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|PO]);else if(n===!0)r.push([E.float.majorEncoded|RO]);else if(n===null)r.push([E.float.majorEncoded|NO]);else if(n===void 0)r.push([E.float.majorEncoded|DO]);else{let o,i=!1;(!t||t.float64!==!0)&&(Mx(n),o=S4(go,1),n===o||Number.isNaN(n)?(go[0]=249,r.push(go.slice(0,3)),i=!0):(Ux(n),o=A4(go,1),n===o&&(go[0]=250,r.push(go.slice(0,5)),i=!0))),i||(OO(n),o=Fx(go,1),go[0]=251,r.push(go.slice(0,9)))}}p1.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){Mx(n);let o=S4(go,1);if(n===o||Number.isNaN(n))return 3;if(Ux(n),o=A4(go,1),n===o)return 5}return 9};var Bx=new ArrayBuffer(9),Vn=new DataView(Bx,1),go=new Uint8Array(Bx,0);function Mx(r){if(r===1/0)Vn.setUint16(0,31744,!1);else if(r===-1/0)Vn.setUint16(0,64512,!1);else if(Number.isNaN(r))Vn.setUint16(0,32256,!1);else{Vn.setFloat32(0,r);let e=Vn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Vn.setUint16(0,31744,!1);else if(t===0)Vn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Vn.setUint16(0,0):o<-14?Vn.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Vn.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function S4(r,e){if(r.length-e<2)throw new Error(`${me} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function Ux(r){Vn.setFloat32(0,r,!1)}function A4(r,e){if(r.length-e<4)throw new Error(`${me} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function OO(r){Vn.setFloat64(0,r,!1)}function Fx(r,e){if(r.length-e<8)throw new Error(`${me} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}p1.compareTokens=Kn.compareTokens;function Ye(r,e,t){throw new Error(`${me} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function m1(r){return()=>{throw new Error(`${me} ${r}`)}}var te=[];for(let r=0;r<=23;r++)te[r]=Ye;te[24]=zb;te[25]=Xb;te[26]=Yb;te[27]=Qb;te[28]=Ye;te[29]=Ye;te[30]=Ye;te[31]=Ye;for(let r=32;r<=55;r++)te[r]=Ye;te[56]=Zb;te[57]=Jb;te[58]=ex;te[59]=rx;te[60]=Ye;te[61]=Ye;te[62]=Ye;te[63]=Ye;for(let r=64;r<=87;r++)te[r]=nx;te[88]=ox;te[89]=ix;te[90]=sx;te[91]=ax;te[92]=Ye;te[93]=Ye;te[94]=Ye;te[95]=m1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)te[r]=cx;te[120]=lx;te[121]=ux;te[122]=fx;te[123]=dx;te[124]=Ye;te[125]=Ye;te[126]=Ye;te[127]=m1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)te[r]=px;te[152]=mx;te[153]=gx;te[154]=yx;te[155]=wx;te[156]=Ye;te[157]=Ye;te[158]=Ye;te[159]=bx;for(let r=160;r<=183;r++)te[r]=xx;te[184]=vx;te[185]=Ex;te[186]=Sx;te[187]=Ax;te[188]=Ye;te[189]=Ye;te[190]=Ye;te[191]=_x;for(let r=192;r<=215;r++)te[r]=Ix;te[216]=Tx;te[217]=Cx;te[218]=kx;te[219]=Px;te[220]=Ye;te[221]=Ye;te[222]=Ye;te[223]=Ye;for(let r=224;r<=243;r++)te[r]=m1("simple values are not supported");te[244]=Ye;te[245]=Ye;te[246]=Ye;te[247]=Rx;te[248]=m1("simple values are not supported");te[249]=Dx;te[250]=Ox;te[251]=Lx;te[252]=Ye;te[253]=Ye;te[254]=Ye;te[255]=Nx;var yo=[];for(let r=0;r<24;r++)yo[r]=new W(E.uint,r,1);for(let r=-1;r>=-24;r--)yo[31-r]=new W(E.negint,r,1);yo[64]=new W(E.bytes,new Uint8Array(0),1);yo[96]=new W(E.string,"",1);yo[128]=new W(E.array,0,1);yo[160]=new W(E.map,0,1);yo[244]=new W(E.false,!1,1);yo[245]=new W(E.true,!0,1);yo[246]=new W(E.null,null,1);function $x(r){switch(r.type){case E.false:return Qo([244]);case E.true:return Qo([245]);case E.null:return Qo([246]);case E.bytes:return r.value.length?void 0:Qo([64]);case E.string:return r.value===""?Qo([96]):void 0;case E.array:return r.value===0?Qo([128]):void 0;case E.map:return r.value===0?Qo([160]):void 0;case E.uint:return r.value<24?Qo([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return Qo([31-Number(r.value)])}}var BO={float64:!1,mapSorter:FO,quickEncodeToken:$x};function MO(){let r=[];return r[E.uint.major]=Kn,r[E.negint.major]=l1,r[E.bytes.major]=Tl,r[E.string.major]=hx,r[E.array.major]=f1,r[E.map.major]=d1,r[E.tag.major]=h1,r[E.float.major]=p1,r}var Kx=MO(),_4=new Of,y1=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${Ii} object contains circular references`);return new r(t,e)}},ds={null:new W(E.null,null),undefined:new W(E.undefined,void 0),true:new W(E.true,!0),false:new W(E.false,!1),emptyArray:new W(E.array,0),emptyMap:new W(E.map,0)},hs={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new W(E.float,r):r>=0?new W(E.uint,r):new W(E.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new W(E.uint,r):new W(E.negint,r)},Uint8Array(r,e,t,n){return new W(E.bytes,r)},string(r,e,t,n){return new W(E.string,r)},boolean(r,e,t,n){return r?ds.true:ds.false},null(r,e,t,n){return ds.null},undefined(r,e,t,n){return ds.undefined},ArrayBuffer(r,e,t,n){return new W(E.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new W(E.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[ds.emptyArray,new W(E.break)]:ds.emptyArray;n=y1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=g1(s,t,n);return t.addBreakTokens?[new W(E.array,r.length),o,new W(E.break)]:[new W(E.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[ds.emptyMap,new W(E.break)]:ds.emptyMap;n=y1.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[g1(l,t,n),g1(o?r.get(l):r[l],t,n)];return UO(a,t),t.addBreakTokens?[new W(E.map,s),a,new W(E.break)]:[new W(E.map,s),a]}};hs.Map=hs.Object;hs.Buffer=hs.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))hs[`${r}Array`]=hs.DataView;function g1(r,e={},t){let n=$b(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||hs[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=hs[n];if(!i)throw new Error(`${Ii} unsupported type: ${n}`);return i(r,n,e,t)}function UO(r,e){e.mapSorter&&r.sort(e.mapSorter)}function FO(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=Kx[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function Vx(r,e,t,n){if(Array.isArray(e))for(let o of e)Vx(r,o,t,n);else t[e.type.major](r,e,n)}function I4(r,e,t){let n=g1(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new Of(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return Df(a.chunks[0])}}return _4.reset(),Vx(_4,n,e,t),_4.toBytes(!0)}function ps(r,e){return e=Object.assign({},BO,e),I4(r,Kx,e)}var $O={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},w1=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=yo[e];if(t===void 0){let n=te[e];if(!n)throw new Error(`${me} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},Uf=Symbol.for("DONE"),b1=Symbol.for("BREAK");function KO(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Pl(e,t);if(i===b1){if(r.value===1/0)break;throw new Error(`${me} got unexpected break to lengthed array`)}if(i===Uf)throw new Error(`${me} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function VO(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=Pl(e,t);if(a===b1){if(r.value===1/0)break;throw new Error(`${me} got unexpected break to lengthed map`)}if(a===Uf)throw new Error(`${me} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${me} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${me} found repeat map key "${a}"`);let c=Pl(e,t);if(c===Uf)throw new Error(`${me} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function Pl(r,e){if(r.done())return Uf;let t=r.next();if(t.type===E.break)return b1;if(t.type.terminal)return t.value;if(t.type===E.array)return KO(t,r,e);if(t.type===E.map)return VO(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Pl(r,e);return e.tags[t.value](n)}throw new Error(`${me} tag not supported (${t.value})`)}throw new Error("unsupported")}function T4(r,e){if(!(r instanceof Uint8Array))throw new Error(`${me} data to decode must be a Uint8Array`);e=Object.assign({},$O,e);let t=e.tokenizer||new w1(r,e),n=Pl(t,e);if(n===Uf)throw new Error(`${me} did not find any content to decode`);if(n===b1)throw new Error(`${me} got unexpected break`);return[n,r.subarray(t.pos())]}function Rn(r,e){let[t,n]=T4(r,e);if(n.length>0)throw new Error(`${me} too many terminals, data makes no sense`);return t}function H(r,e="utf8"){let t=Qp[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}var Ci="/",Hx=new TextEncoder().encode(Ci),x1=Hx[0],it=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=H(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==x1)throw new Error("Invalid key")}toString(e="utf8"){return M(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Ci))}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=Hx),this._buf[0]!==x1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(x1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===x1;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Ci).slice(1)}type(){return HO(this.baseNamespace())}name(){return qO(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Ci)||(e+=Ci),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Ci):new r(e.slice(0,-1).join(Ci))}child(e){return this.toString()===Ci?e:e.toString()===Ci?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(),...jO(e.map(t=>t.namespaces()))])}};function HO(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function qO(r){let e=r.split(":");return e[e.length-1]}function jO(r){return[].concat(...r)}function v1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*WO(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=le.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*k4(n,o))}else{let t=le.asCID(e);t!=null?yield[r.join("/"),t]:yield*k4(e,r)}}function*k4(r,e){if(r==null||r instanceof Uint8Array)return;let t=le.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*WO(i,o)}}function*GO(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&le.asCID(n)==null&&(yield*P4(n,o))}else yield*P4(e,r)}function*P4(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&le.asCID(n)==null&&(yield*GO(o,n))}}function zO(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=le.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var R4=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:v1(),bytes:v1(),value:v1(),asBlock:v1()})}links(){return k4(this.value,[])}tree(){return P4(this.value,[])}get(e="/"){return zO(this.value,e.split("/").filter(Boolean))}};function qx({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new R4({cid:e,bytes:r,value:o})}function ge(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var Gx="/pin/",jx="/pinned-block/",N4=Yo,Wx=1;function E1(r){return r.version===0&&(r=r.toV1()),new it(`${Gx}${r.toString(N4)}`)}var S1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=E1(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new Kr({concurrency:Wx});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ge(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,ps(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=qx({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new it(`${jx}${N4.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=Rn(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,ps(i),n),n.onProgress?.(new ae("helia:pin:add",e))}}async*rm(e,t={}){let n=E1(e),o=await this.datastore.get(n,t),i=Rn(o);await this.datastore.delete(n,t);let s=new Kr({concurrency:Wx});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ge(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:Gx+(e.cid!=null?`${e.cid.toString(Yo)}`:"")},e)){let o=le.parse(t.toString().substring(5),Yo),i=Rn(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new it(`${jx}${N4.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=E1(e),o=await this.datastore.get(n,t);return Rn(o)}async setMetadata(e,t,n){let o=E1(e),i=await this.datastore.get(o,n),s=Rn(i);s.metadata=t??{},await this.datastore.put(o,ps(s),n)}};var D4=1,O4=5;var Ff=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},ms=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},$f=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},Kf=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var cr=class extends Kr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};var L4=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),e}async throw(e){return this.ended=!0,this.error=e,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw this.error??new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=fe(),await ut(this.readNext.promise,t?.signal,t)}};function zx(){return new L4}function XO(r){return r[Symbol.asyncIterator]!=null}async function YO(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)await e.push(n)})),await e.end()}catch(t){await e.end(t).catch(()=>{})}}async function*QO(r){let e=zx();YO(r,e).catch(()=>{}),yield*e}function*ZO(r){for(let e of r)yield*e}function JO(...r){let e=[];for(let t of r)XO(t)||e.push(t);return e.length===r.length?ZO(e):QO(r)}var Vr=JO;var eL=5,A1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??eL,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await sr(...this.routers)}async stop(){await Tr(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new ms("No content routers available");let n=new cr({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Vr(n.toGenerator(),..._a(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new ms("No content routers available");await Promise.all(_a(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(_a(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(_a(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(_a(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new ms("No peer routers available");let n=this,o=Vr(..._a(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Ge("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new ms("No peer routers available");for await(let n of Vr(..._a(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function _a(r,e){return r.filter(t=>t[e]!=null)}var gs={},Rl=r=>{r.addEventListener("message",e=>{Rl.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Rl.dispatchEvent("message",r,e)})};Rl.addEventListener=(r,e)=>{gs[r]==null&&(gs[r]=[]),gs[r].push(e)};Rl.removeEventListener=(r,e)=>{gs[r]!=null&&(gs[r]=gs[r].filter(t=>t===e))};Rl.dispatchEvent=function(r,e,t){gs[r]!=null&&gs[r].forEach(n=>n(e,t))};var B4=Rl;var M4="lock:worker:request-read",U4="lock:worker:release-read",F4="lock:master:grant-read",$4="lock:worker:request-write",K4="lock:worker:release-write",V4="lock:master:grant-write";var Xx=(r=21)=>Math.random().toString().substring(2);var Yx=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let f={type:u.data.type,name:u.data.name,identifier:u.data.identifier};f.type===n&&f.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},Qx=(r,e,t,n)=>async()=>{let o=Xx();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},tL={singleProcess:!1},Zx=r=>{if(r=Object.assign({},tL,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return B4.addEventListener("message",Yx(t,"requestReadLock",M4,U4,F4)),B4.addEventListener("message",Yx(t,"requestWriteLock",$4,K4,V4)),t}return{isWorker:!0,readLock:t=>Qx(t,M4,F4,U4),writeLock:t=>Qx(t,$4,V4,K4)}};var Ia={},ys;async function H4(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>mo((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var rL=(r,e)=>{if(ys.isWorker===!0)return{readLock:ys.readLock(r,e),writeLock:ys.writeLock(r,e)};let t=new Xo({concurrency:1}),n;return{async readLock(){if(n!=null)return H4(n,e);n=new Xo({concurrency:e.concurrency,autoStart:!1});let o=n,i=H4(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,H4(t,e)}}},nL={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ta(r){let e=Object.assign({},nL,r);return ys==null&&(ys=Zx(e),ys.isWorker!==!0&&(ys.addEventListener("requestReadLock",t=>{Ia[t.data.name]!=null&&Ia[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),ys.addEventListener("requestWriteLock",async t=>{Ia[t.data.name]!=null&&Ia[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Ia[e.name]==null&&(Ia[e.name]=rL(e.name,e)),Ia[e.name]}var _1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ta({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await sr(this.child),this.started=!0}async stop(){await Tr(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var q4=new it("/version"),Jx=1;async function ev(r){if(!await r.has(q4)){await r.put(q4,H(`${Jx}`));return}let e=await r.get(q4),t=M(e);if(parseInt(t,10)!==Jx)throw new Error("Unknown datastore version, a datastore migration may be required")}var G4={};Ct(G4,{code:()=>W4,decode:()=>dL,decodeOptions:()=>lL,encode:()=>fL,encodeOptions:()=>aL,name:()=>uL,toByteView:()=>rv});var tv=42;function rv(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function oL(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new W(E.tag,tv),new W(E.bytes,t)]}function iL(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function sL(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 j4={float64:!0,typeEncoders:{Object:oL,undefined:iL,number:sL}},aL={...j4,typeEncoders:{...j4.typeEncoders}};function cL(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return le.decode(r.subarray(1))}var I1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};I1.tags[tv]=cL;var lL={...I1,tags:I1.tags.slice()},uL="dag-cbor",W4=113,fL=r=>ps(r,j4),dL=r=>Rn(rv(r),I1);var e6={};Ct(e6,{code:()=>J4,decode:()=>ov,encode:()=>nv,format:()=>SL,name:()=>EL,parse:()=>_L,stringify:()=>SL});var z4=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===E.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===E.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[E.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[E.negint.major](e,t){this[E.uint.major](e,t)}[E.bytes.major](e,t){throw new Error(`${Ii} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=c1(JSON.stringify(t.value));e.push(n.length>32?Df(n):n)}[E.array.major](e,t){this.prefix(e),this.inRecursive.push({type:E.array,elements:0}),e.push([91])}[E.map.major](e,t){this.prefix(e),this.inRecursive.push({type:E.map,elements:0}),e.push([123])}[E.tag.major](e,t){}[E.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===E.array)e.push([93]);else if(s.type===E.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Ii} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function hL(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Ii} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==E.string||n.type!==E.string)throw new Error(`${Ii} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Ii} unexpected duplicate map keys, this is not supported`)}var pL={addBreakTokens:!0,mapSorter:hL};function X4(r,e){return e=Object.assign({},pL,e),I4(r,new z4,e)}var Nl=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${me} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${me} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new W(E.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${me} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${me} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new W(E.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new W(s>=0?E.uint:E.negint,s,this._pos-e):new W(s>=0?E.uint:E.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${me} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new W(E.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${me} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${me} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${me} unexpected unicode sequence at position ${this._pos}`);let c,l,u,f;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(f=(i&31)<<6|c&63,f>127&&(s=f));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(f=(i&15)<<12|(c&63)<<6|l&63,f>2047&&(f<55296||f>57343)&&(s=f));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(f=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,f>65535&&f<1114112&&(s=f))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${me} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${me} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new W(E.string,x4(t),this._pos-e);default:if(i<32)throw new Error(`${me} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${me} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new W(E.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new W(E.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new W(E.null,null,4);case 102:return this.expect([102,97,108,115,101]),new W(E.false,!1,5);case 116:return this.expect([116,114,117,101]),new W(E.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${me} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new W(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${me} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new W(E.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new W(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${me} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new W(E.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${me} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${me} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function Y4(r,e){return e=Object.assign({tokenizer:new Nl(r,e)},e),Rn(r,e)}function gL(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function yL(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=e.toString();return[new W(E.map,1/0,1),new W(E.string,"/",1),new W(E.string,t,t.length),new W(E.break,void 0,1)]}function T1(r){let e=Kt.encode(r).slice(1);return[new W(E.map,1/0,1),new W(E.string,"/",1),new W(E.map,1/0,1),new W(E.string,"bytes",5),new W(E.string,e,e.length),new W(E.break,void 0,1),new W(E.break,void 0,1)]}function wo(r){return T1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function wL(r){return T1(new Uint8Array(r))}function bL(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function xL(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 vL={typeEncoders:{Object:yL,Buffer:T1,Uint8Array:T1,Int8Array:wo,Uint16Array:wo,Int16Array:wo,Uint32Array:wo,Int32Array:wo,Float32Array:wo,Float64Array:wo,Uint8ClampedArray:wo,BigInt64Array:wo,BigUint64Array:wo,DataView:wo,ArrayBuffer:wL,undefined:bL,number:xL}},Q4=class extends Nl{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===E.map){let t=this._next();if(t.type===E.string&&t.value==="/"){let n=this._next();if(n.type===E.string){if(this._next().type!==E.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new W(E.tag,42,0)}if(n.type===E.map){let o=this._next();if(o.type===E.string&&o.value==="bytes"){let i=this._next();if(i.type===E.string){for(let a=0;a<2;a++)if(this._next().type!==E.break)throw new Error("Invalid encoded Bytes form");let s=Kt.decode(`m${i.value}`);return new W(E.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Z4={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Z4.tags[42]=le.parse;var EL="dag-json",J4=297,nv=r=>X4(r,vL),ov=r=>{let e=gL(r),t=Object.assign(Z4,{tokenizer:new Q4(e,Z4)});return Y4(e,t)},SL=r=>AL.decode(nv(r));var AL=new TextDecoder,_L=r=>ov(IL.encode(r)),IL=new TextEncoder;var s6={};Ct(s6,{code:()=>i6,createLink:()=>pv,createNode:()=>hv,decode:()=>FL,encode:()=>UL,name:()=>ML,prepare:()=>n6,validate:()=>o6});var TL=new TextDecoder;function t6(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 C1(r,e){let t;[t,e]=t6(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 iv(r,e){let t;return[t,e]=t6(r,e),[t&7,t>>3,e]}function CL(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=iv(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=C1(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=C1(r,n),e.Name=TL.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=t6(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function sv(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=iv(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=C1(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]=C1(r,t),n.push(CL(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var cv=new TextEncoder,av=2**32,kL=2**31;function PL(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=Vf(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=cv.encode(r.Name);t-=n.length,e.set(n,t),t=Vf(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=Vf(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function lv(r){let e=NL(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=Vf(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=PL(r.Links[o],t.subarray(0,n));n-=i,n=Vf(t,n,i)-1,t[n]=18}return t}function RL(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Dl(t)}if(typeof r.Name=="string"){let t=cv.encode(r.Name).length;e+=1+t+Dl(t)}return typeof r.Tsize=="number"&&(e+=1+Dl(r.Tsize)),e}function NL(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Dl(t)}if(r.Links)for(let t of r.Links){let n=RL(t);e+=1+n+Dl(n)}return e}function Vf(r,e,t){e-=Dl(t);let n=e;for(;t>=kL;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Dl(r){return r%2===0&&r++,Math.floor((DL(r)+6)/7)}function DL(r){let e=0;return r>=av&&(r=Math.floor(r/av),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+OL[r]}var OL=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var LL=["Data","Links"],BL=["Hash","Name","Tsize"],r6=new TextEncoder;function fv(r,e){if(r===e)return 0;let t=r.Name?r6.encode(r.Name):[],n=e.Name?r6.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function uv(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function dv(r){if(typeof r.asCID=="object"){let t=le.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=le.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=le.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=le.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function n6(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=r6.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(dv),e.Links.sort(fv);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function o6(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!uv(r,LL))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!uv(t,BL))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&fv(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function hv(r,e=[]){return n6({Data:r,Links:e})}function pv(r,e,t){return dv({Hash:t,Name:r,Tsize:e})}function mv(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var ML="dag-pb",i6=112;function UL(r){o6(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),lv(e)}function FL(r){let e=mv(r),t=sv(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=le.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Ol(r){return r?.then!=null}function gv(r=[],e){let t={[i6]:s6,[va]:vl,[W4]:G4,[J4]:e6,[s4]:zp};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ol(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new Kf(`Could not load codec for ${n}`)}}function yv(r=[],e){let t={[gt.code]:gt,[Yp.code]:Yp,[Pr.code]:Pr};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ol(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new $f(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}function Ne(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}var Hn=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var ki=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var k1=0,P1=class extends ki{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===k1||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===k1)return e.multihash.digest;if(this.child==null)throw new Hn;return this.child.get(e)}has(e){return e.multihash.code===k1?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==k1&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function $L(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 Ll=$L;function KL(r){return r[Symbol.asyncIterator]!=null}function VL(r,e){let t=0;if(KL(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Ll(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var bo=VL;function HL(r){return r[Symbol.asyncIterator]!=null}function wv(r){return r?.then!=null}function qL(r,e){let t=0;if(HL(r))return async function*(){for await(let c of r){let l=e(c,t++);wv(l)&&await l,yield c}}();let n=Ll(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);wv(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Ca=qL;var R1=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new P1(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new ae("blocks:put:duplicate",e)),e):(n.onProgress?.(new ae("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new ae("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=bo(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new ae("blocks:put-many:duplicate",i)),!s}),o=Ca(n,async({cid:i,block:s})=>{t.onProgress?.(new ae("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new ae("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new ae("blocks:get:providers:get",e));let o=await bv(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new ae("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new ae("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new ae("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new ae("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Ca(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new ae("blocks:get-many:providers:get",n));let i=await bv(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new ae("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new ae("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new ae("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new ae("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new ae("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},N1=class extends R1{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await sr(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Tr(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new a6({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},a6=class extends R1{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=Ne([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=Ne([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function jL(r){return typeof r.retrieve=="function"}var WL=(r,e)=>{if(e==null)throw new D(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Ol(o)?n=await o:n=o,!ge(n.digest,r.multihash.digest))throw new cs("Hash of downloaded block did not match multihash from passed CID")}};async function bv(r,e,t,n){let o=WL(r,t),i=new AbortController,s=Ne([i.signal,n.signal]);i.signal;let a=[];for(let c of e)jL(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async f=>{await o(f),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Hf=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},qf=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},D1=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var xv={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new D1("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var tn=xv;function st(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=It(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}var Ev=Symbol.for("@achingbrain/uint8arraylist");function vv(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 Bl(r){return!!r?.[Ev]}var J=class r{bufs;length;[Ev]=!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(Bl(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(Bl(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=vv(this.bufs,e);return t.buf[t.index]}set(e,t){let n=vv(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(Bl(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return st(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:st(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let f=e-a;n.push(s.subarray(f,f+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!Bl(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let f=0;f<i;f++)s[f]=-1;for(let f=0;f<o;f++)s[n[f]]=f;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let f=t;f<=c;f+=u){u=0;for(let h=l;h>=0;h--){let m=this.get(f+h);if(n[h]!==m){u=Math.max(1,h-a[m]);break}}if(u===0)return f}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=It(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=ke(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=ke(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=ke(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=It(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=ke(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=ke(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=ke(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=ke(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=ke(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!ge(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var zL=parseInt("11111",2),c6=parseInt("10000000",2),XL=parseInt("01111111",2),Sv={0:jf,1:jf,2:YL,3:JL,4:eB,5:ZL,6:QL,16:jf,22:jf,48:jf};function qn(r,e={offset:0}){let t=r[e.offset]&zL;if(e.offset++,Sv[t]!=null)return Sv[t](r,e);throw new Error("No decoder for tag "+t)}function Wf(r,e){let t=0;if((r[e.offset]&c6)===c6){let n=r[e.offset]&XL,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function jf(r,e){Wf(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=qn(r,e);if(n===null)break;t.push(n)}return t}function YL(r,e){let t=Wf(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function QL(r,e){let t=Wf(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let i=0,s=0;o<40?(i=0,s=o):o<80?(i=1,s=o-40):(i=2,s=o-80);let a=`${i}.${s}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let u=0;for(let f=0;f<c.length;f++)u+=c[f]<<f*7;a+=`.${u}`,c=[]}}return a}function ZL(r,e){return e.offset++,null}function JL(r,e){let t=Wf(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function eB(r,e){let t=Wf(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function tB(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new J;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function O1(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=tB(r.byteLength);return new J(Uint8Array.from([e.byteLength|c6]),e)}function Hr(r){let e=new J,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new J(Uint8Array.from([2]),O1(e),e)}function Gf(r){let e=Uint8Array.from([0]),t=new J(e,r);return new J(Uint8Array.from([3]),O1(t),t)}function Av(r){return new J(Uint8Array.from([4]),O1(r),r)}function xo(r,e=48){let t=new J;for(let n of r)t.append(n);return new J(Uint8Array.from([e]),O1(t),t)}var _v="1.2.840.10045.3.1.7",Iv="1.3.132.0.34",Tv="1.3.132.0.35";async function Cv(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function kv(r,e){let t=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]),n=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},t,e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Pv(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);return crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},n,e,t.subarray())}var rB=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),nB=Uint8Array.from([6,5,43,129,4,0,34]),oB=Uint8Array.from([6,5,43,129,4,0,35]),Rv={ext:!0,kty:"EC",crv:"P-256"},Nv={ext:!0,kty:"EC",crv:"P-384"},Dv={ext:!0,kty:"EC",crv:"P-521"},Ml=32,Ul=48,Fl=66;function Ov(r){let e=qn(r);return l6(e)}function l6(r){let e=r[1],t=M(e,"base64url"),n=r[2][1][0],o=1,i,s;if(e.byteLength===Ml)return i=M(n.subarray(o,o+Ml),"base64url"),s=M(n.subarray(o+Ml),"base64url"),new Pa({...Rv,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Ul)return i=M(n.subarray(o,o+Ul),"base64url"),s=M(n.subarray(o+Ul),"base64url"),new Pa({...Nv,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Fl)return i=M(n.subarray(o,o+Fl),"base64url"),s=M(n.subarray(o+Fl),"base64url"),new Pa({...Dv,key_ops:["sign"],d:t,x:i,y:s});throw new D(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function u6(r){let e=qn(r);return Lv(e)}function Lv(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Ml*2+1)return n=M(e.subarray(t,t+Ml),"base64url"),o=M(e.subarray(t+Ml),"base64url"),new ka({...Rv,key_ops:["verify"],x:n,y:o});if(e.byteLength===Ul*2+1)return n=M(e.subarray(t,t+Ul),"base64url"),o=M(e.subarray(t+Ul),"base64url"),new ka({...Nv,key_ops:["verify"],x:n,y:o});if(e.byteLength===Fl*2+1)return n=M(e.subarray(t,t+Fl),"base64url"),o=M(e.subarray(t+Fl),"base64url"),new ka({...Dv,key_ops:["verify"],x:n,y:o});throw new D(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function Bv(r){return xo([Hr(Uint8Array.from([1])),Av(H(r.d??"","base64url")),xo([Uv(r.crv)],160),xo([Gf(new J(Uint8Array.from([4]),H(r.x??"","base64url"),H(r.y??"","base64url")))],161)]).subarray()}function Mv(r){return xo([Hr(Uint8Array.from([1])),xo([Uv(r.crv)],160),xo([Gf(new J(Uint8Array.from([4]),H(r.x??"","base64url"),H(r.y??"","base64url")))],161)]).subarray()}function Uv(r){if(r==="P-256")return rB;if(r==="P-384")return nB;if(r==="P-521")return oB;throw new D(`Invalid curve ${r}`)}async function Fv(r="P-256"){let e=await Cv(r);return new Pa(e.privateKey)}var ka=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=Mv(this.jwk)),this._raw}toMultihash(){return Pr.digest(tr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}async verify(e,t){return Pv(this.jwk,t,e)}},Pa=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new ka({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=Bv(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}async sign(e){return kv(this.jwk,e)}};var Ra=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function iB(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Zo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function ws(r,...e){if(!iB(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function Na(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.createHasher");Zo(r.outputLen),Zo(r.blockLen)}function Kl(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 $v(r,e){ws(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function Nr(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function Da(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function vo(r,e){return r<<32-e|r>>>e}function L1(r,e){return r<<e|r>>>32-e>>>0}var sB=async()=>{};async function Kv(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await sB(),n+=i)}}function f6(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function bs(r){return typeof r=="string"&&(r=f6(r)),ws(r),r}function d6(r){return typeof r=="string"&&(r=f6(r)),ws(r),r}function h6(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ws(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function Vv(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("options should be object or undefined");return Object.assign(r,e)}var $l=class{};function zf(r){let e=n=>r().update(bs(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Oa(r=32){if(Ra&&typeof Ra.getRandomValues=="function")return Ra.getRandomValues(new Uint8Array(r));if(Ra&&typeof Ra.randomBytes=="function")return Uint8Array.from(Ra.randomBytes(r));throw new Error("crypto.getRandomValues must be defined")}function aB(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function B1(r,e,t){return r&e^~r&t}function M1(r,e,t){return r&e^r&t^e&t}var La=class extends $l{constructor(e,t,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Da(this.buffer)}update(e){Kl(this),e=bs(e),ws(e);let{view:t,buffer:n,blockLen:o}=this,i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=Da(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Kl(this),$v(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,Nr(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(n,0),s=0);for(let f=s;f<o;f++)t[f]=0;aB(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=Da(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f<l;f++)a.setUint32(4*f,u[f],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=i,e.length=o,e.pos=a,o%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},Pi=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var lr=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var U1=BigInt(4294967295),Hv=BigInt(32);function cB(r,e=!1){return e?{h:Number(r&U1),l:Number(r>>Hv&U1)}:{h:Number(r>>Hv&U1)|0,l:Number(r&U1)|0}}function qv(r,e=!1){let t=r.length,n=new Uint32Array(t),o=new Uint32Array(t);for(let i=0;i<t;i++){let{h:s,l:a}=cB(r[i],e);[n[i],o[i]]=[s,a]}return[n,o]}var p6=(r,e,t)=>r>>>t,m6=(r,e,t)=>r<<32-t|e>>>t,Ba=(r,e,t)=>r>>>t|e<<32-t,Ma=(r,e,t)=>r<<32-t|e>>>t,Xf=(r,e,t)=>r<<64-t|e>>>t-32,Yf=(r,e,t)=>r>>>t-32|e<<64-t;function Jo(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var jv=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),Wv=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,Gv=(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,Xv=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),Yv=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var uB=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),xs=new Uint32Array(64),F1=class extends La{constructor(e=32){super(64,e,8,!1),this.A=Pi[0]|0,this.B=Pi[1]|0,this.C=Pi[2]|0,this.D=Pi[3]|0,this.E=Pi[4]|0,this.F=Pi[5]|0,this.G=Pi[6]|0,this.H=Pi[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let f=0;f<16;f++,t+=4)xs[f]=e.getUint32(t,!1);for(let f=16;f<64;f++){let h=xs[f-15],m=xs[f-2],g=vo(h,7)^vo(h,18)^h>>>3,w=vo(m,17)^vo(m,19)^m>>>10;xs[f]=w+xs[f-7]+g+xs[f-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let f=0;f<64;f++){let h=vo(a,6)^vo(a,11)^vo(a,25),m=u+h+B1(a,c,l)+uB[f]+xs[f]|0,w=(vo(n,2)^vo(n,13)^vo(n,22))+M1(n,o,i)|0;u=l,l=c,c=a,a=s+m|0,s=i,i=o,o=n,n=m+w|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){Nr(xs)}destroy(){this.set(0,0,0,0,0,0,0,0),Nr(this.buffer)}};var Qv=qv(["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))),fB=Qv[0],dB=Qv[1],vs=new Uint32Array(80),Es=new Uint32Array(80),$1=class extends La{constructor(e=64){super(128,e,16,!1),this.Ah=lr[0]|0,this.Al=lr[1]|0,this.Bh=lr[2]|0,this.Bl=lr[3]|0,this.Ch=lr[4]|0,this.Cl=lr[5]|0,this.Dh=lr[6]|0,this.Dl=lr[7]|0,this.Eh=lr[8]|0,this.El=lr[9]|0,this.Fh=lr[10]|0,this.Fl=lr[11]|0,this.Gh=lr[12]|0,this.Gl=lr[13]|0,this.Hh=lr[14]|0,this.Hl=lr[15]|0}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:f,Fl:h,Gh:m,Gl:g,Hh:w,Hl:y}=this;return[e,t,n,o,i,s,a,c,l,u,f,h,m,g,w,y]}set(e,t,n,o,i,s,a,c,l,u,f,h,m,g,w,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=f|0,this.Fl=h|0,this.Gh=m|0,this.Gl=g|0,this.Hh=w|0,this.Hl=y|0}process(e,t){for(let v=0;v<16;v++,t+=4)vs[v]=e.getUint32(t),Es[v]=e.getUint32(t+=4);for(let v=16;v<80;v++){let R=vs[v-15]|0,q=Es[v-15]|0,j=Ba(R,q,1)^Ba(R,q,8)^p6(R,q,7),U=Ma(R,q,1)^Ma(R,q,8)^m6(R,q,7),P=vs[v-2]|0,N=Es[v-2]|0,X=Ba(P,N,19)^Xf(P,N,61)^p6(P,N,6),G=Ma(P,N,19)^Yf(P,N,61)^m6(P,N,6),$=Gv(U,G,Es[v-7],Es[v-16]),oe=zv($,j,X,vs[v-7],vs[v-16]);vs[v]=oe|0,Es[v]=$|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:f,El:h,Fh:m,Fl:g,Gh:w,Gl:y,Hh:x,Hl:I}=this;for(let v=0;v<80;v++){let R=Ba(f,h,14)^Ba(f,h,18)^Xf(f,h,41),q=Ma(f,h,14)^Ma(f,h,18)^Yf(f,h,41),j=f&m^~f&w,U=h&g^~h&y,P=Xv(I,q,U,dB[v],Es[v]),N=Yv(P,x,R,j,fB[v],vs[v]),X=P|0,G=Ba(n,o,28)^Xf(n,o,34)^Xf(n,o,39),$=Ma(n,o,28)^Yf(n,o,34)^Yf(n,o,39),oe=n&i^n&a^i&a,L=o&s^o&c^s&c;x=w|0,I=y|0,w=m|0,y=g|0,m=f|0,g=h|0,{h:f,l:h}=Jo(l|0,u|0,N|0,X|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let B=jv(X,$,L);n=Wv(B,N,G,oe),o=B|0}({h:n,l:o}=Jo(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=Jo(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=Jo(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=Jo(this.Dh|0,this.Dl|0,l|0,u|0),{h:f,l:h}=Jo(this.Eh|0,this.El|0,f|0,h|0),{h:m,l:g}=Jo(this.Fh|0,this.Fl|0,m|0,g|0),{h:w,l:y}=Jo(this.Gh|0,this.Gl|0,w|0,y|0),{h:x,l:I}=Jo(this.Hh|0,this.Hl|0,x|0,I|0),this.set(n,o,i,s,a,c,l,u,f,h,m,g,w,y,x,I)}roundClean(){Nr(vs,Es)}destroy(){Nr(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var K1=zf(()=>new F1);var V1=zf(()=>new $1);var b6=BigInt(0),w6=BigInt(1);function Ua(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function x6(r){if(!Ua(r))throw new Error("Uint8Array expected")}function ei(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}function Qf(r){let e=r.toString(16);return e.length&1?"0"+e:e}function eE(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?b6:BigInt("0x"+r)}var tE=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",hB=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Ss(r){if(x6(r),tE)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=hB[r[t]];return e}var Ri={_0:48,_9:57,A:65,F:70,a:97,f:102};function Zv(r){if(r>=Ri._0&&r<=Ri._9)return r-Ri._0;if(r>=Ri.A&&r<=Ri.F)return r-(Ri.A-10);if(r>=Ri.a&&r<=Ri.f)return r-(Ri.a-10)}function Zf(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(tE)return Uint8Array.fromHex(r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=Zv(r.charCodeAt(i)),a=Zv(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function Ni(r){return eE(Ss(r))}function ti(r){return x6(r),eE(Ss(Uint8Array.from(r).reverse()))}function Fa(r,e){return Zf(r.toString(16).padStart(e*2,"0"))}function As(r,e){return Fa(r,e).reverse()}function ft(r,e,t){let n;if(typeof e=="string")try{n=Zf(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(Ua(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function _s(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];x6(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var g6=r=>typeof r=="bigint"&&b6<=r;function H1(r,e,t){return g6(r)&&g6(e)&&g6(t)&&e<=r&&r<t}function Dr(r,e,t,n){if(!H1(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function rE(r){let e;for(e=0;r>b6;r>>=w6,e+=1);return e}var $a=r=>(w6<<BigInt(r))-w6,y6=r=>new Uint8Array(r),Jv=r=>Uint8Array.from(r);function nE(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=y6(r),o=y6(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...f)=>t(o,n,...f),c=(f=y6(0))=>{o=a(Jv([0]),f),n=a(),f.length!==0&&(o=a(Jv([1]),f),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let f=0,h=[];for(;f<e;){n=a();let m=n.slice();h.push(m),f+=n.length}return _s(...h)};return(f,h)=>{s(),c(f);let m;for(;!(m=h(l()));)c();return s(),m}}var pB={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"||Ua(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 Eo(r,e,t={}){let n=(o,i,s)=>{let a=pB[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}function Vl(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var qr=BigInt(0),zt=BigInt(1),Ka=BigInt(2),mB=BigInt(3),v6=BigInt(4),oE=BigInt(5),iE=BigInt(8),gB=BigInt(9),yB=BigInt(16);function Ze(r,e){let t=r%e;return t>=qr?t:e+t}function yt(r,e,t){let n=r;for(;e-- >qr;)n*=n,n%=t;return n}function q1(r,e){if(r===qr)throw new Error("invert: expected non-zero number");if(e<=qr)throw new Error("invert: expected positive modulus, got "+e);let t=Ze(r,e),n=e,o=qr,i=zt,s=zt,a=qr;for(;t!==qr;){let l=n/t,u=n%t,f=o-s*l,h=i-a*l;n=t,t=u,o=s,i=a,s=f,a=h}if(n!==zt)throw new Error("invert: does not exist");return Ze(o,e)}function wB(r){let e=r-zt,t=0;for(;e%Ka===qr;)e/=Ka,t++;let n=Ka,o=So(r);for(;n<r&&sE(o,n);)if(n++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(t===1){let s=(r+zt)/v6;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(e+zt)/Ka;return function(a,c){if(!sE(a,c))throw new Error("Cannot find square root");let l=t,u=a.pow(a.mul(a.ONE,n),e),f=a.pow(c,i),h=a.pow(c,e);for(;!a.eql(h,a.ONE);){if(a.eql(h,a.ZERO))return a.ZERO;let m=1;for(let w=a.sqr(h);m<l&&!a.eql(w,a.ONE);m++)w=a.sqr(w);let g=a.pow(u,zt<<BigInt(l-m-1));u=a.sqr(g),f=a.mul(f,g),h=a.mul(h,u),l=m}return f}}function bB(r){return r%v6===mB?function(t,n){let o=(r+zt)/v6,i=t.pow(n,o);if(!t.eql(t.sqr(i),n))throw new Error("Cannot find square root");return i}:r%iE===oE?function(t,n){let o=t.mul(n,Ka),i=(r-oE)/iE,s=t.pow(o,i),a=t.mul(n,s),c=t.mul(t.mul(a,Ka),s),l=t.mul(a,t.sub(c,t.ONE));if(!t.eql(t.sqr(l),n))throw new Error("Cannot find square root");return l}:(r%yB,wB(r))}var aE=(r,e)=>(Ze(r,e)&zt)===zt,xB=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function E6(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=xB.reduce((n,o)=>(n[o]="function",n),e);return Eo(r,t)}function vB(r,e,t){if(t<qr)throw new Error("invalid exponent, negatives unsupported");if(t===qr)return r.ONE;if(t===zt)return e;let n=r.ONE,o=e;for(;t>qr;)t&zt&&(n=r.mul(n,o)),o=r.sqr(o),t>>=zt;return n}function Hl(r,e,t=!1){let n=new Array(e.length).fill(t?r.ZERO:void 0),o=e.reduce((s,a,c)=>r.is0(a)?s:(n[c]=s,r.mul(s,a)),r.ONE),i=r.inv(o);return e.reduceRight((s,a,c)=>r.is0(a)?s:(n[c]=r.mul(s,n[c]),r.mul(s,a)),i),n}function EB(r,e){let t=(r.ORDER-zt)/Ka,n=r.pow(e,t),o=r.eql(n,r.ONE),i=r.eql(n,r.ZERO),s=r.eql(n,r.neg(r.ONE));if(!o&&!i&&!s)throw new Error("Cannot find square root: probably non-prime P");return o?1:i?0:-1}function sE(r,e){let t=EB(r,e);return t===0||t===1}function S6(r,e){e!==void 0&&Zo(e);let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function So(r,e,t=!1,n={}){if(r<=qr)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=S6(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:$a(o),ZERO:qr,ONE:zt,create:c=>Ze(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return qr<=c&&c<r},is0:c=>c===qr,isOdd:c=>(c&zt)===zt,neg:c=>Ze(-c,r),eql:(c,l)=>c===l,sqr:c=>Ze(c*c,r),add:(c,l)=>Ze(c+l,r),sub:(c,l)=>Ze(c-l,r),mul:(c,l)=>Ze(c*l,r),pow:(c,l)=>vB(a,c,l),div:(c,l)=>Ze(c*q1(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>q1(c,r),sqrt:n.sqrt||(c=>(s||(s=bB(r)),s(a,c))),toBytes:c=>t?As(c,i):Fa(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?ti(c):Ni(c)},invertBatch:c=>Hl(a,c),cmov:(c,l,u)=>u?l:c});return Object.freeze(a)}function cE(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 A6(r){let e=cE(r);return e+Math.ceil(e/2)}function lE(r,e,t=!1){let n=r.length,o=cE(e),i=A6(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?ti(r):Ni(r),a=Ze(s,e-zt)+zt;return t?As(a,o):Fa(a,o)}var uE=BigInt(0),k6=BigInt(1);function _6(r,e){let t=e.negate();return r?t:e}function dE(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function I6(r,e){dE(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=$a(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function fE(r,e,t){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=t,a=Number(r&o),c=r>>s;a>n&&(a-=i,c+=k6);let l=e*n,u=l+Math.abs(a)-1,f=a===0,h=a<0,m=e%2!==0;return{nextN:c,offset:u,isZero:f,isNeg:h,isNegF:m,offsetF:l}}function SB(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function AB(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var T6=new WeakMap,hE=new WeakMap;function C6(r){return hE.get(r)||1}function j1(r,e){return{constTimeNegate:_6,hasPrecomputes(t){return C6(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>uE;)n&k6&&(o=o.add(i)),i=i.double(),n>>=k6;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=I6(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let i=r.ZERO,s=r.BASE,a=I6(t,e);for(let c=0;c<a.windows;c++){let{nextN:l,offset:u,isZero:f,isNeg:h,isNegF:m,offsetF:g}=fE(o,c,a);o=l,f?s=s.add(_6(m,n[g])):i=i.add(_6(h,n[u]))}return{p:i,f:s}},wNAFUnsafe(t,n,o,i=r.ZERO){let s=I6(t,e);for(let a=0;a<s.windows&&o!==uE;a++){let{nextN:c,offset:l,isZero:u,isNeg:f}=fE(o,a,s);if(o=c,!u){let h=n[l];i=i.add(f?h.negate():h)}}return i},getPrecomputes(t,n,o){let i=T6.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&T6.set(n,o(i))),i},wNAFCached(t,n,o){let i=C6(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=C6(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){dE(n,e),hE.set(t,n),T6.delete(t)}}}function W1(r,e,t,n){if(SB(t,r),AB(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=rE(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=$a(s),c=new Array(Number(a)+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let f=l;f>=0;f-=s){c.fill(o);for(let m=0;m<n.length;m++){let g=n[m],w=Number(g>>BigInt(f)&a);c[w]=c[w].add(t[m])}let h=o;for(let m=c.length-1,g=o;m>0;m--)g=g.add(c[m]),h=h.add(g);if(u=u.add(h),f!==0)for(let m=0;m<s;m++)u=u.double()}return u}function Jf(r){return E6(r.Fp),Eo(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...S6(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var ri=BigInt(0),jr=BigInt(1),pE=BigInt(2),_B=BigInt(8),IB={zip215:!0};function TB(r){let e=Jf(r);return Eo(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function mE(r){let e=TB(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=pE<<BigInt(a*8)-jr,u=t.create,f=So(e.n,e.nBitLength),h=e.uvRatio||((O,_)=>{try{return{isValid:!0,value:t.sqrt(O*t.inv(_))}}catch{return{isValid:!1,value:ri}}}),m=e.adjustScalarBytes||(O=>O),g=e.domain||((O,_,k)=>{if(ei("phflag",k),_.length||k)throw new Error("Contexts/pre-hash are not supported");return O});function w(O,_,k=!1){let z=k?jr:ri;Dr("coordinate "+O,_,z,l)}function y(O){if(!(O instanceof v))throw new Error("ExtendedPoint expected")}let x=Vl((O,_)=>{let{ex:k,ey:z,ez:re}=O,V=O.is0();_==null&&(_=V?_B:t.inv(re));let xe=u(k*_),Pe=u(z*_),he=u(re*_);if(V)return{x:ri,y:jr};if(he!==jr)throw new Error("invZ was invalid");return{x:xe,y:Pe}}),I=Vl(O=>{let{a:_,d:k}=e;if(O.is0())throw new Error("bad point: ZERO");let{ex:z,ey:re,ez:V,et:xe}=O,Pe=u(z*z),he=u(re*re),De=u(V*V),tt=u(De*De),Qe=u(Pe*_),lt=u(De*u(Qe+he)),pt=u(tt+u(k*u(Pe*he)));if(lt!==pt)throw new Error("bad point: equation left != right (1)");let Ot=u(z*re),_t=u(V*xe);if(Ot!==_t)throw new Error("bad point: equation left != right (2)");return!0});class v{constructor(_,k,z,re){w("x",_),w("y",k),w("z",z,!0),w("t",re),this.ex=_,this.ey=k,this.ez=z,this.et=re,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(_){if(_ instanceof v)throw new Error("extended point not allowed");let{x:k,y:z}=_||{};return w("x",k),w("y",z),new v(k,z,jr,u(k*z))}static normalizeZ(_){let k=Hl(t,_.map(z=>z.ez));return _.map((z,re)=>z.toAffine(k[re])).map(v.fromAffine)}static msm(_,k){return W1(v,f,_,k)}_setWindowSize(_){j.setWindowSize(this,_)}assertValidity(){I(this)}equals(_){y(_);let{ex:k,ey:z,ez:re}=this,{ex:V,ey:xe,ez:Pe}=_,he=u(k*Pe),De=u(V*re),tt=u(z*Pe),Qe=u(xe*re);return he===De&&tt===Qe}is0(){return this.equals(v.ZERO)}negate(){return new v(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:_}=e,{ex:k,ey:z,ez:re}=this,V=u(k*k),xe=u(z*z),Pe=u(pE*u(re*re)),he=u(_*V),De=k+z,tt=u(u(De*De)-V-xe),Qe=he+xe,lt=Qe-Pe,pt=he-xe,Ot=u(tt*lt),_t=u(Qe*pt),Ir=u(tt*pt),En=u(lt*Qe);return new v(Ot,_t,En,Ir)}add(_){y(_);let{a:k,d:z}=e,{ex:re,ey:V,ez:xe,et:Pe}=this,{ex:he,ey:De,ez:tt,et:Qe}=_,lt=u(re*he),pt=u(V*De),Ot=u(Pe*z*Qe),_t=u(xe*tt),Ir=u((re+V)*(he+De)-lt-pt),En=_t-Ot,Ei=_t+Ot,Af=u(pt-k*lt),Cp=u(Ir*En),kp=u(Ei*Af),Pp=u(Ir*Af),Rp=u(En*Ei);return new v(Cp,kp,Rp,Pp)}subtract(_){return this.add(_.negate())}wNAF(_){return j.wNAFCached(this,_,v.normalizeZ)}multiply(_){let k=_;Dr("scalar",k,jr,n);let{p:z,f:re}=this.wNAF(k);return v.normalizeZ([z,re])[0]}multiplyUnsafe(_,k=v.ZERO){let z=_;return Dr("scalar",z,ri,n),z===ri?q:this.is0()||z===jr?this:j.wNAFCachedUnsafe(this,z,v.normalizeZ,k)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return j.unsafeLadder(this,n).is0()}toAffine(_){return x(this,_)}clearCofactor(){let{h:_}=e;return _===jr?this:this.multiplyUnsafe(_)}static fromHex(_,k=!1){let{d:z,a:re}=e,V=t.BYTES;_=ft("pointHex",_,V),ei("zip215",k);let xe=_.slice(),Pe=_[V-1];xe[V-1]=Pe&-129;let he=ti(xe),De=k?l:t.ORDER;Dr("pointHex.y",he,ri,De);let tt=u(he*he),Qe=u(tt-jr),lt=u(z*tt-re),{isValid:pt,value:Ot}=h(Qe,lt);if(!pt)throw new Error("Point.fromHex: invalid y coordinate");let _t=(Ot&jr)===jr,Ir=(Pe&128)!==0;if(!k&&Ot===ri&&Ir)throw new Error("Point.fromHex: x=0 and x_0=1");return Ir!==_t&&(Ot=u(-Ot)),v.fromAffine({x:Ot,y:he})}static fromPrivateKey(_){let{scalar:k}=N(_);return R.multiply(k)}toRawBytes(){let{x:_,y:k}=this.toAffine(),z=As(k,t.BYTES);return z[z.length-1]|=_&jr?128:0,z}toHex(){return Ss(this.toRawBytes())}}v.BASE=new v(e.Gx,e.Gy,jr,u(e.Gx*e.Gy)),v.ZERO=new v(ri,jr,jr,ri);let{BASE:R,ZERO:q}=v,j=j1(v,a*8);function U(O){return Ze(O,n)}function P(O){return U(ti(O))}function N(O){let _=t.BYTES;O=ft("private key",O,_);let k=ft("hashed private key",i(O),2*_),z=m(k.slice(0,_)),re=k.slice(_,2*_),V=P(z);return{head:z,prefix:re,scalar:V}}function X(O){let{head:_,prefix:k,scalar:z}=N(O),re=R.multiply(z),V=re.toRawBytes();return{head:_,prefix:k,scalar:z,point:re,pointBytes:V}}function G(O){return X(O).pointBytes}function $(O=Uint8Array.of(),..._){let k=_s(..._);return P(i(g(k,ft("context",O),!!o)))}function oe(O,_,k={}){O=ft("message",O),o&&(O=o(O));let{prefix:z,scalar:re,pointBytes:V}=X(_),xe=$(k.context,z,O),Pe=R.multiply(xe).toRawBytes(),he=$(k.context,Pe,V,O),De=U(xe+he*re);Dr("signature.s",De,ri,n);let tt=_s(Pe,As(De,t.BYTES));return ft("result",tt,t.BYTES*2)}let L=IB;function B(O,_,k,z=L){let{context:re,zip215:V}=z,xe=t.BYTES;O=ft("signature",O,2*xe),_=ft("message",_),k=ft("publicKey",k,xe),V!==void 0&&ei("zip215",V),o&&(_=o(_));let Pe=ti(O.slice(xe,2*xe)),he,De,tt;try{he=v.fromHex(k,V),De=v.fromHex(O.slice(0,xe),V),tt=R.multiplyUnsafe(Pe)}catch{return!1}if(!V&&he.isSmallOrder())return!1;let Qe=$(re,De.toRawBytes(),he.toRawBytes(),_);return De.add(he.multiplyUnsafe(Qe)).subtract(tt).clearCofactor().equals(v.ZERO)}return R._setWindowSize(8),{CURVE:e,getPublicKey:G,sign:oe,verify:B,ExtendedPoint:v,utils:{getExtendedPublicKey:X,randomPrivateKey:()=>s(t.BYTES),precompute(O=8,_=v.BASE){return _._setWindowSize(O),_.multiply(BigInt(3)),_}}}}var ql=BigInt(0),P6=BigInt(1);function CB(r){return Eo(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function gE(r){let e=CB(r),{P:t}=e,n=So(t),o=v=>Ze(v,t),i=e.montgomeryBits,s=Math.ceil(i/8),a=e.nByteLength,c=e.adjustScalarBytes||(v=>v),l=e.powPminus2||(v=>n.pow(v,t-BigInt(2)));function u(v,R,q){let j=o(v*(R-q));return R=o(R-j),q=o(q+j),[R,q]}let f=(e.a-BigInt(2))/BigInt(4);function h(v,R){Dr("u",v,ql,t),Dr("scalar",R,ql,t);let q=R,j=v,U=P6,P=ql,N=v,X=P6,G=ql,$;for(let L=BigInt(i-1);L>=ql;L--){let B=q>>L&P6;G^=B,$=u(G,U,N),U=$[0],N=$[1],$=u(G,P,X),P=$[0],X=$[1],G=B;let K=U+P,O=o(K*K),_=U-P,k=o(_*_),z=O-k,re=N+X,V=N-X,xe=o(V*K),Pe=o(re*_),he=xe+Pe,De=xe-Pe;N=o(he*he),X=o(j*o(De*De)),U=o(O*k),P=o(z*(O+o(f*z)))}$=u(G,U,N),U=$[0],N=$[1],$=u(G,P,X),P=$[0],X=$[1];let oe=l(P);return o(U*oe)}function m(v){return As(o(v),s)}function g(v){let R=ft("u coordinate",v,s);return a===32&&(R[31]&=127),ti(R)}function w(v){let R=ft("scalar",v),q=R.length;if(q!==s&&q!==a){let j=""+s+" or "+a;throw new Error("invalid scalar, expected "+j+" bytes, got "+q)}return ti(c(R))}function y(v,R){let q=g(R),j=w(v),U=h(q,j);if(U===ql)throw new Error("invalid private or public key received");return m(U)}let x=m(e.Gu);function I(v){return y(v,x)}return{scalarMult:y,scalarMultBase:I,getSharedSecret:(v,R)=>y(v,R),getPublicKey:v=>I(v),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:x}}var ed=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),yE=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),cQ=BigInt(0),kB=BigInt(1),wE=BigInt(2),PB=BigInt(3),RB=BigInt(5),NB=BigInt(8);function xE(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=ed,a=r*r%i*r%i,c=yt(a,wE,i)*a%i,l=yt(c,kB,i)*r%i,u=yt(l,RB,i)*l%i,f=yt(u,e,i)*u%i,h=yt(f,t,i)*f%i,m=yt(h,n,i)*h%i,g=yt(m,o,i)*m%i,w=yt(g,o,i)*m%i,y=yt(w,e,i)*u%i;return{pow_p_5_8:yt(y,wE,i)*r%i,b2:a}}function vE(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function DB(r,e){let t=ed,n=Ze(e*e*e,t),o=Ze(n*n*e,t),i=xE(r*o).pow_p_5_8,s=Ze(r*n*i,t),a=Ze(e*s*s,t),c=s,l=Ze(s*yE,t),u=a===r,f=a===Ze(-r,t),h=a===Ze(-r*yE,t);return u&&(s=c),(f||h)&&(s=l),aE(s,t)&&(s=Ze(-s,t)),{isValid:u||f,value:s}}var bE=So(ed,void 0,!0),OB={a:bE.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:bE,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:NB,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:V1,randomBytes:Oa,adjustScalarBytes:vE,uvRatio:DB},td=mE(OB);var rd=gE({P:ed,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=ed,{pow_p_5_8:t,b2:n}=xE(r);return Ze(yt(t,PB,e)*n,e)},adjustScalarBytes:vE,randomBytes:Oa});var Va=32,jn=64,R6=32;function EE(){let r=td.utils.randomPrivateKey(),e=td.getPublicKey(r);return{privateKey:LB(r,e),publicKey:e}}function SE(r,e){let t=r.subarray(0,R6);return td.sign(e instanceof Uint8Array?e:e.subarray(),t)}function AE(r,e,t){return td.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function LB(r,e){let t=new Uint8Array(jn);for(let n=0;n<R6;n++)t[n]=r[n],t[R6+n]=e[n];return t}var nd=class{type="Ed25519";raw;constructor(e){this.raw=Wl(e,Va)}toMultihash(){return Pr.digest(tr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return AE(this.raw,t,e)}},jl=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Wl(e,jn),this.publicKey=new nd(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return SE(this.raw,e)}};function N6(r){if(r.length>jn){r=Wl(r,jn+Va);let n=r.subarray(0,jn),o=r.subarray(jn,r.length);return new jl(n,o)}r=Wl(r,jn);let e=r.subarray(0,jn),t=r.subarray(Va);return new jl(e,t)}function D6(r){return r=Wl(r,Va),new nd(r)}async function IE(){let{privateKey:r,publicKey:e}=EE();return new jl(r,e)}function Wl(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new D(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var BB=Math.pow(2,7),MB=Math.pow(2,14),UB=Math.pow(2,21),O6=Math.pow(2,28),L6=Math.pow(2,35),B6=Math.pow(2,42),M6=Math.pow(2,49),et=128,Or=127;function Ce(r){if(r<BB)return 1;if(r<MB)return 2;if(r<UB)return 3;if(r<O6)return 4;if(r<L6)return 5;if(r<B6)return 6;if(r<M6)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function U6(r,e,t=0){switch(Ce(r)){case 8:e[t++]=r&255|et,r/=128;case 7:e[t++]=r&255|et,r/=128;case 6:e[t++]=r&255|et,r/=128;case 5:e[t++]=r&255|et,r/=128;case 4:e[t++]=r&255|et,r>>>=7;case 3:e[t++]=r&255|et,r>>>=7;case 2:e[t++]=r&255|et,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function FB(r,e,t=0){switch(Ce(r)){case 8:e.set(t++,r&255|et),r/=128;case 7:e.set(t++,r&255|et),r/=128;case 6:e.set(t++,r&255|et),r/=128;case 5:e.set(t++,r&255|et),r/=128;case 4:e.set(t++,r&255|et),r>>>=7;case 3:e.set(t++,r&255|et),r>>>=7;case 2:e.set(t++,r&255|et),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function F6(r,e){let t=r[e],n=0;if(n+=t&Or,t<et||(t=r[e+1],n+=(t&Or)<<7,t<et)||(t=r[e+2],n+=(t&Or)<<14,t<et)||(t=r[e+3],n+=(t&Or)<<21,t<et)||(t=r[e+4],n+=(t&Or)*O6,t<et)||(t=r[e+5],n+=(t&Or)*L6,t<et)||(t=r[e+6],n+=(t&Or)*B6,t<et)||(t=r[e+7],n+=(t&Or)*M6,t<et))return n;throw new RangeError("Could not decode varint")}function $B(r,e){let t=r.get(e),n=0;if(n+=t&Or,t<et||(t=r.get(e+1),n+=(t&Or)<<7,t<et)||(t=r.get(e+2),n+=(t&Or)<<14,t<et)||(t=r.get(e+3),n+=(t&Or)<<21,t<et)||(t=r.get(e+4),n+=(t&Or)*O6,t<et)||(t=r.get(e+5),n+=(t&Or)*L6,t<et)||(t=r.get(e+6),n+=(t&Or)*B6,t<et)||(t=r.get(e+7),n+=(t&Or)*M6,t<et))return n;throw new RangeError("Could not decode varint")}function Ue(r,e,t=0){return e==null&&(e=It(Ce(r))),e instanceof Uint8Array?U6(r,e,t):FB(r,e,t)}function rt(r,e=0){return r instanceof Uint8Array?F6(r,e):$B(r,e)}var $6=new Float32Array([-0]),Is=new Uint8Array($6.buffer);function TE(r,e,t){$6[0]=r,e[t]=Is[0],e[t+1]=Is[1],e[t+2]=Is[2],e[t+3]=Is[3]}function CE(r,e){return Is[0]=r[e],Is[1]=r[e+1],Is[2]=r[e+2],Is[3]=r[e+3],$6[0]}var K6=new Float64Array([-0]),Lr=new Uint8Array(K6.buffer);function kE(r,e,t){K6[0]=r,e[t]=Lr[0],e[t+1]=Lr[1],e[t+2]=Lr[2],e[t+3]=Lr[3],e[t+4]=Lr[4],e[t+5]=Lr[5],e[t+6]=Lr[6],e[t+7]=Lr[7]}function PE(r,e){return Lr[0]=r[e],Lr[1]=r[e+1],Lr[2]=r[e+2],Lr[3]=r[e+3],Lr[4]=r[e+4],Lr[5]=r[e+5],Lr[6]=r[e+6],Lr[7]=r[e+7],K6[0]}var KB=BigInt(Number.MAX_SAFE_INTEGER),VB=BigInt(Number.MIN_SAFE_INTEGER),Nn=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 Ha;if(e<KB&&e>VB)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>RE&&(o=0n,++n>RE&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return Ha;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):Ha}},Ha=new Nn(0,0);Ha.toBigInt=function(){return 0n};Ha.zzEncode=Ha.zzDecode=function(){return this};Ha.length=function(){return 1};var RE=4294967296n;function NE(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 DE(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function V6(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Ao(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function G1(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var H6=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,Ao(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 Ao(this,4);return G1(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Ao(this,4);return G1(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Ao(this,4);let e=CE(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Ao(this,4);let e=PE(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 Ao(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return DE(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Ao(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Ao(this);while((this.buf[this.pos++]&128)!==0);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new Nn(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 Ao(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 Ao(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 Ao(this,8);let e=G1(this.buf,this.pos+=4),t=G1(this.buf,this.pos+=4);return new Nn(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=F6(this.buf,this.pos);return this.pos+=Ce(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function q6(r){return new H6(r instanceof Uint8Array?r:r.subarray())}function Se(r,e,t){let n=q6(r);return e.decode(n,void 0,t)}function j6(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return It(s);o+s>e&&(n=It(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var qa=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function W6(){}var z6=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},HB=j6();function qB(r){return globalThis.Buffer!=null?It(r):HB(r)}var id=class{len;head;tail;states;constructor(){this.len=0,this.head=new qa(W6,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new qa(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new X6((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(z1,10,Nn.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=Nn.fromBigInt(e);return this._push(z1,t.length(),t)}uint64Number(e){return this._push(U6,Ce(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=Nn.fromBigInt(e).zzEncode();return this._push(z1,t.length(),t)}sint64Number(e){let t=Nn.fromNumber(e).zzEncode();return this._push(z1,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(G6,1,e?1:0)}fixed32(e){return this._push(od,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=Nn.fromBigInt(e);return this._push(od,4,t.lo)._push(od,4,t.hi)}fixed64Number(e){let t=Nn.fromNumber(e);return this._push(od,4,t.lo)._push(od,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(TE,4,e)}double(e){return this._push(kE,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(G6,1,0):this.uint32(t)._push(WB,t,e)}string(e){let t=NE(e);return t!==0?this.uint32(t)._push(V6,t,e):this._push(G6,1,0)}fork(){return this.states=new z6(this),this.head=this.tail=new qa(W6,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 qa(W6,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=qB(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function G6(r,e,t){e[t]=r&255}function jB(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var X6=class extends qa{next;constructor(e,t){super(jB,e,t),this.next=void 0}};function z1(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 od(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 WB(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(id.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(GB,e,r),this},id.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(zB,e,r),this});function GB(r,e,t){e.set(r,t)}function zB(r,e,t){r.length<40?V6(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(H(r),t)}function Y6(){return new id}function Ae(r,e){let t=Y6();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Gl;(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"})(Gl||(Gl={}));function X1(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function vt(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return X1("enum",Gl.VARINT,t,n)}function _e(r,e){return X1("message",Gl.LENGTH_DELIMITED,r,e)}var at=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},sd=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var dt;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(dt||(dt={}));var Q6;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(Q6||(Q6={}));(function(r){r.codec=()=>vt(Q6)})(dt||(dt={}));var ni;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),dt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=dt.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(ni||(ni={}));var ad;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),dt.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=dt.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(ad||(ad={}));function Wr(r){if(isNaN(r)||r<=0)throw new D("random bytes length must be a Number bigger than 0");return Oa(r)}var ld={};Ct(ld,{MAX_RSA_KEY_SIZE:()=>Z6,generateRSAKeyPair:()=>a5,jwkToJWKKeyPair:()=>UE,jwkToPkcs1:()=>ZB,jwkToPkix:()=>r5,jwkToRSAPrivateKey:()=>s5,pkcs1MessageToJwk:()=>e5,pkcs1MessageToRSAPrivateKey:()=>Y1,pkcs1ToJwk:()=>QB,pkcs1ToRSAPrivateKey:()=>n5,pkixMessageToJwk:()=>t5,pkixMessageToRSAPublicKey:()=>i5,pkixToJwk:()=>JB,pkixToRSAPublicKey:()=>o5});var oi=K1;var zl=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=ld.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return le.createV1(114,this._multihash)}toString(){return Ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return ME(this.jwk,t,e)}},cd=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=ld.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return BE(this.jwk,e)}};var Z6=8192,J6=18,XB=1062,YB=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function QB(r){let e=qn(r);return e5(e)}function e5(r){return{n:M(r[1],"base64url"),e:M(r[2],"base64url"),d:M(r[3],"base64url"),p:M(r[4],"base64url"),q:M(r[5],"base64url"),dp:M(r[6],"base64url"),dq:M(r[7],"base64url"),qi:M(r[8],"base64url"),kty:"RSA"}}function ZB(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new D("JWK was missing components");return xo([Hr(Uint8Array.from([0])),Hr(H(r.n,"base64url")),Hr(H(r.e,"base64url")),Hr(H(r.d,"base64url")),Hr(H(r.p,"base64url")),Hr(H(r.q,"base64url")),Hr(H(r.dp,"base64url")),Hr(H(r.dq,"base64url")),Hr(H(r.qi,"base64url"))]).subarray()}function JB(r){let e=qn(r,{offset:0});return t5(e)}function t5(r){let e=qn(r[1],{offset:0});return{kty:"RSA",n:M(e[0],"base64url"),e:M(e[1],"base64url")}}function r5(r){if(r.n==null||r.e==null)throw new D("JWK was missing components");return xo([YB,Gf(xo([Hr(H(r.n,"base64url")),Hr(H(r.e,"base64url"))]))]).subarray()}function n5(r){let e=qn(r);return Y1(e)}function Y1(r){let e=e5(r);return s5(e)}function o5(r,e){if(r.byteLength>=XB)throw new Si("Key size is too large");let t=qn(r,{offset:0});return i5(t,r,e)}function i5(r,e,t){let n=t5(r);if(t==null){let o=oi(ni.encode({Type:dt.RSA,Data:e}));t=kr(J6,o)}return new zl(n,t)}function s5(r){if($E(r)>Z6)throw new D("Key size is too large");let e=UE(r),t=oi(ni.encode({Type:dt.RSA,Data:r5(e.publicKey)})),n=kr(J6,t);return new cd(e.privateKey,new zl(e.publicKey,n))}async function a5(r){if(r>Z6)throw new D("Key size is too large");let e=await FE(r),t=oi(ni.encode({Type:dt.RSA,Data:r5(e.publicKey)})),n=kr(J6,t);return new cd(e.privateKey,new zl(e.publicKey,n))}function UE(r){if(r==null)throw new D("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function FE(r){let e=await tn.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 eM(e);return{privateKey:t[0],publicKey:t[1]}}async function BE(r,e){let t=await tn.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await tn.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function ME(r,e,t){let n=await tn.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return tn.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function eM(r){if(r.privateKey==null||r.publicKey==null)throw new D("Private and public key are required");return Promise.all([tn.get().subtle.exportKey("jwk",r.privateKey),tn.get().subtle.exportKey("jwk",r.publicKey)])}function $E(r){if(r.kty!=="RSA")throw new D("invalid key type");if(r.n==null)throw new D("invalid key modulus");return H(r.n,"base64url").length*8}var Q1=class extends $l{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,Na(e);let n=bs(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),Nr(i)}update(e){return Kl(this),this.iHash.update(e),this}digestInto(e){Kl(this),ws(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Ts=(r,e,t)=>new Q1(r,e).update(t).digest();Ts.create=(r,e)=>new Q1(r,e);function KE(r){r.lowS!==void 0&&ei("lowS",r.lowS),r.prehash!==void 0&&ei("prehash",r.prehash)}function tM(r){let e=Jf(r);Eo(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var c5=class extends Error{constructor(e=""){super(e)}},Di={Err:c5,_tlv:{encode:(r,e)=>{let{Err:t}=Di;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=Qf(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?Qf(o.length/2|128):"";return Qf(r)+i+o+e},decode(r,e){let{Err:t}=Di,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Di;if(r<Oi)throw new e("integer: negative integers are not allowed");let t=Qf(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Di;if(r[0]&128)throw new e("invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return Ni(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Di,o=ft("signature",r),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Di,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Oi=BigInt(0),rr=BigInt(1),NZ=BigInt(2),VE=BigInt(3),DZ=BigInt(4);function rM(r){let e=tM(r),{Fp:t}=e,n=So(e.n,e.nBitLength),o=e.toBytes||((w,y,x)=>{let I=y.toAffine();return _s(Uint8Array.from([4]),t.toBytes(I.x),t.toBytes(I.y))}),i=e.fromBytes||(w=>{let y=w.subarray(1),x=t.fromBytes(y.subarray(0,t.BYTES)),I=t.fromBytes(y.subarray(t.BYTES,2*t.BYTES));return{x,y:I}});function s(w){let{a:y,b:x}=e,I=t.sqr(w),v=t.mul(I,w);return t.add(t.add(v,t.mul(w,y)),x)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(w){return H1(w,rr,e.n)}function c(w){let{allowedPrivateKeyLengths:y,nByteLength:x,wrapPrivateKey:I,n:v}=e;if(y&&typeof w!="bigint"){if(Ua(w)&&(w=Ss(w)),typeof w!="string"||!y.includes(w.length))throw new Error("invalid private key");w=w.padStart(x*2,"0")}let R;try{R=typeof w=="bigint"?w:Ni(ft("private key",w,x))}catch{throw new Error("invalid private key, expected hex or "+x+" bytes, got "+typeof w)}return I&&(R=Ze(R,v)),Dr("private key",R,rr,v),R}function l(w){if(!(w instanceof h))throw new Error("ProjectivePoint expected")}let u=Vl((w,y)=>{let{px:x,py:I,pz:v}=w;if(t.eql(v,t.ONE))return{x,y:I};let R=w.is0();y==null&&(y=R?t.ONE:t.inv(v));let q=t.mul(x,y),j=t.mul(I,y),U=t.mul(v,y);if(R)return{x:t.ZERO,y:t.ZERO};if(!t.eql(U,t.ONE))throw new Error("invZ was invalid");return{x:q,y:j}}),f=Vl(w=>{if(w.is0()){if(e.allowInfinityPoint&&!t.is0(w.py))return;throw new Error("bad point: ZERO")}let{x:y,y:x}=w.toAffine();if(!t.isValid(y)||!t.isValid(x))throw new Error("bad point: x or y not FE");let I=t.sqr(x),v=s(y);if(!t.eql(I,v))throw new Error("bad point: equation left != right");if(!w.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(y,x,I){if(y==null||!t.isValid(y))throw new Error("x required");if(x==null||!t.isValid(x)||t.is0(x))throw new Error("y required");if(I==null||!t.isValid(I))throw new Error("z required");this.px=y,this.py=x,this.pz=I,Object.freeze(this)}static fromAffine(y){let{x,y:I}=y||{};if(!y||!t.isValid(x)||!t.isValid(I))throw new Error("invalid affine point");if(y instanceof h)throw new Error("projective point not allowed");let v=R=>t.eql(R,t.ZERO);return v(x)&&v(I)?h.ZERO:new h(x,I,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(y){let x=Hl(t,y.map(I=>I.pz));return y.map((I,v)=>I.toAffine(x[v])).map(h.fromAffine)}static fromHex(y){let x=h.fromAffine(i(ft("pointHex",y)));return x.assertValidity(),x}static fromPrivateKey(y){return h.BASE.multiply(c(y))}static msm(y,x){return W1(h,n,y,x)}_setWindowSize(y){g.setWindowSize(this,y)}assertValidity(){f(this)}hasEvenY(){let{y}=this.toAffine();if(t.isOdd)return!t.isOdd(y);throw new Error("Field doesn't support isOdd")}equals(y){l(y);let{px:x,py:I,pz:v}=this,{px:R,py:q,pz:j}=y,U=t.eql(t.mul(x,j),t.mul(R,v)),P=t.eql(t.mul(I,j),t.mul(q,v));return U&&P}negate(){return new h(this.px,t.neg(this.py),this.pz)}double(){let{a:y,b:x}=e,I=t.mul(x,VE),{px:v,py:R,pz:q}=this,j=t.ZERO,U=t.ZERO,P=t.ZERO,N=t.mul(v,v),X=t.mul(R,R),G=t.mul(q,q),$=t.mul(v,R);return $=t.add($,$),P=t.mul(v,q),P=t.add(P,P),j=t.mul(y,P),U=t.mul(I,G),U=t.add(j,U),j=t.sub(X,U),U=t.add(X,U),U=t.mul(j,U),j=t.mul($,j),P=t.mul(I,P),G=t.mul(y,G),$=t.sub(N,G),$=t.mul(y,$),$=t.add($,P),P=t.add(N,N),N=t.add(P,N),N=t.add(N,G),N=t.mul(N,$),U=t.add(U,N),G=t.mul(R,q),G=t.add(G,G),N=t.mul(G,$),j=t.sub(j,N),P=t.mul(G,X),P=t.add(P,P),P=t.add(P,P),new h(j,U,P)}add(y){l(y);let{px:x,py:I,pz:v}=this,{px:R,py:q,pz:j}=y,U=t.ZERO,P=t.ZERO,N=t.ZERO,X=e.a,G=t.mul(e.b,VE),$=t.mul(x,R),oe=t.mul(I,q),L=t.mul(v,j),B=t.add(x,I),K=t.add(R,q);B=t.mul(B,K),K=t.add($,oe),B=t.sub(B,K),K=t.add(x,v);let O=t.add(R,j);return K=t.mul(K,O),O=t.add($,L),K=t.sub(K,O),O=t.add(I,v),U=t.add(q,j),O=t.mul(O,U),U=t.add(oe,L),O=t.sub(O,U),N=t.mul(X,K),U=t.mul(G,L),N=t.add(U,N),U=t.sub(oe,N),N=t.add(oe,N),P=t.mul(U,N),oe=t.add($,$),oe=t.add(oe,$),L=t.mul(X,L),K=t.mul(G,K),oe=t.add(oe,L),L=t.sub($,L),L=t.mul(X,L),K=t.add(K,L),$=t.mul(oe,K),P=t.add(P,$),$=t.mul(O,K),U=t.mul(B,U),U=t.sub(U,$),$=t.mul(B,oe),N=t.mul(O,N),N=t.add(N,$),new h(U,P,N)}subtract(y){return this.add(y.negate())}is0(){return this.equals(h.ZERO)}wNAF(y){return g.wNAFCached(this,y,h.normalizeZ)}multiplyUnsafe(y){let{endo:x,n:I}=e;Dr("scalar",y,Oi,I);let v=h.ZERO;if(y===Oi)return v;if(this.is0()||y===rr)return this;if(!x||g.hasPrecomputes(this))return g.wNAFCachedUnsafe(this,y,h.normalizeZ);let{k1neg:R,k1:q,k2neg:j,k2:U}=x.splitScalar(y),P=v,N=v,X=this;for(;q>Oi||U>Oi;)q&rr&&(P=P.add(X)),U&rr&&(N=N.add(X)),X=X.double(),q>>=rr,U>>=rr;return R&&(P=P.negate()),j&&(N=N.negate()),N=new h(t.mul(N.px,x.beta),N.py,N.pz),P.add(N)}multiply(y){let{endo:x,n:I}=e;Dr("scalar",y,rr,I);let v,R;if(x){let{k1neg:q,k1:j,k2neg:U,k2:P}=x.splitScalar(y),{p:N,f:X}=this.wNAF(j),{p:G,f:$}=this.wNAF(P);N=g.constTimeNegate(q,N),G=g.constTimeNegate(U,G),G=new h(t.mul(G.px,x.beta),G.py,G.pz),v=N.add(G),R=X.add($)}else{let{p:q,f:j}=this.wNAF(y);v=q,R=j}return h.normalizeZ([v,R])[0]}multiplyAndAddUnsafe(y,x,I){let v=h.BASE,R=(j,U)=>U===Oi||U===rr||!j.equals(v)?j.multiplyUnsafe(U):j.multiply(U),q=R(this,x).add(R(y,I));return q.is0()?void 0:q}toAffine(y){return u(this,y)}isTorsionFree(){let{h:y,isTorsionFree:x}=e;if(y===rr)return!0;if(x)return x(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:y,clearCofactor:x}=e;return y===rr?this:x?x(h,this):this.multiplyUnsafe(e.h)}toRawBytes(y=!0){return ei("isCompressed",y),this.assertValidity(),o(h,this,y)}toHex(y=!0){return ei("isCompressed",y),Ss(this.toRawBytes(y))}}h.BASE=new h(e.Gx,e.Gy,t.ONE),h.ZERO=new h(t.ZERO,t.ONE,t.ZERO);let m=e.nBitLength,g=j1(h,e.endo?Math.ceil(m/2):m);return{CURVE:e,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function nM(r){let e=Jf(r);return Eo(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function HE(r){let e=nM(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(L){return Ze(L,n)}function a(L){return q1(L,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:f}=rM({...e,toBytes(L,B,K){let O=B.toAffine(),_=t.toBytes(O.x),k=_s;return ei("isCompressed",K),K?k(Uint8Array.from([B.hasEvenY()?2:3]),_):k(Uint8Array.from([4]),_,t.toBytes(O.y))},fromBytes(L){let B=L.length,K=L[0],O=L.subarray(1);if(B===o&&(K===2||K===3)){let _=Ni(O);if(!H1(_,rr,t.ORDER))throw new Error("Point is not on curve");let k=u(_),z;try{z=t.sqrt(k)}catch(xe){let Pe=xe instanceof Error?": "+xe.message:"";throw new Error("Point is not on curve"+Pe)}let re=(z&rr)===rr;return(K&1)===1!==re&&(z=t.neg(z)),{x:_,y:z}}else if(B===i&&K===4){let _=t.fromBytes(O.subarray(0,t.BYTES)),k=t.fromBytes(O.subarray(t.BYTES,2*t.BYTES));return{x:_,y:k}}else{let _=o,k=i;throw new Error("invalid Point, expected length of "+_+", or uncompressed "+k+", got "+B)}}}),h=L=>Ss(Fa(L,e.nByteLength));function m(L){let B=n>>rr;return L>B}function g(L){return m(L)?s(-L):L}let w=(L,B,K)=>Ni(L.slice(B,K));class y{constructor(B,K,O){Dr("r",B,rr,n),Dr("s",K,rr,n),this.r=B,this.s=K,O!=null&&(this.recovery=O),Object.freeze(this)}static fromCompact(B){let K=e.nByteLength;return B=ft("compactSignature",B,K*2),new y(w(B,0,K),w(B,K,2*K))}static fromDER(B){let{r:K,s:O}=Di.toSig(ft("DER",B));return new y(K,O)}assertValidity(){}addRecoveryBit(B){return new y(this.r,this.s,B)}recoverPublicKey(B){let{r:K,s:O,recovery:_}=this,k=j(ft("msgHash",B));if(_==null||![0,1,2,3].includes(_))throw new Error("recovery id invalid");let z=_===2||_===3?K+e.n:K;if(z>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let re=(_&1)===0?"02":"03",V=c.fromHex(re+h(z)),xe=a(z),Pe=s(-k*xe),he=s(O*xe),De=c.BASE.multiplyAndAddUnsafe(V,Pe,he);if(!De)throw new Error("point at infinify");return De.assertValidity(),De}hasHighS(){return m(this.s)}normalizeS(){return this.hasHighS()?new y(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return Zf(this.toDERHex())}toDERHex(){return Di.hexFromSig(this)}toCompactRawBytes(){return Zf(this.toCompactHex())}toCompactHex(){return h(this.r)+h(this.s)}}let x={isValidPrivateKey(L){try{return l(L),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let L=A6(e.n);return lE(e.randomBytes(L),e.n)},precompute(L=8,B=c.BASE){return B._setWindowSize(L),B.multiply(BigInt(3)),B}};function I(L,B=!0){return c.fromPrivateKey(L).toRawBytes(B)}function v(L){let B=Ua(L),K=typeof L=="string",O=(B||K)&&L.length;return B?O===o||O===i:K?O===2*o||O===2*i:L instanceof c}function R(L,B,K=!0){if(v(L))throw new Error("first arg must be private key");if(!v(B))throw new Error("second arg must be public key");return c.fromHex(B).multiply(l(L)).toRawBytes(K)}let q=e.bits2int||function(L){if(L.length>8192)throw new Error("input is too large");let B=Ni(L),K=L.length*8-e.nBitLength;return K>0?B>>BigInt(K):B},j=e.bits2int_modN||function(L){return s(q(L))},U=$a(e.nBitLength);function P(L){return Dr("num < 2^"+e.nBitLength,L,Oi,U),Fa(L,e.nByteLength)}function N(L,B,K=X){if(["recovered","canonical"].some(Qe=>Qe in K))throw new Error("sign() legacy options not supported");let{hash:O,randomBytes:_}=e,{lowS:k,prehash:z,extraEntropy:re}=K;k==null&&(k=!0),L=ft("msgHash",L),KE(K),z&&(L=ft("prehashed msgHash",O(L)));let V=j(L),xe=l(B),Pe=[P(xe),P(V)];if(re!=null&&re!==!1){let Qe=re===!0?_(t.BYTES):re;Pe.push(ft("extraEntropy",Qe))}let he=_s(...Pe),De=V;function tt(Qe){let lt=q(Qe);if(!f(lt))return;let pt=a(lt),Ot=c.BASE.multiply(lt).toAffine(),_t=s(Ot.x);if(_t===Oi)return;let Ir=s(pt*s(De+_t*xe));if(Ir===Oi)return;let En=(Ot.x===_t?0:2)|Number(Ot.y&rr),Ei=Ir;return k&&m(Ir)&&(Ei=g(Ir),En^=1),new y(_t,Ei,En)}return{seed:he,k2sig:tt}}let X={lowS:e.lowS,prehash:!1},G={lowS:e.lowS,prehash:!1};function $(L,B,K=X){let{seed:O,k2sig:_}=N(L,B,K),k=e;return nE(k.hash.outputLen,k.nByteLength,k.hmac)(O,_)}c.BASE._setWindowSize(8);function oe(L,B,K,O=G){let _=L;B=ft("msgHash",B),K=ft("publicKey",K);let{lowS:k,prehash:z,format:re}=O;if(KE(O),"strict"in O)throw new Error("options.strict was renamed to lowS");if(re!==void 0&&re!=="compact"&&re!=="der")throw new Error("format must be compact or der");let V=typeof _=="string"||Ua(_),xe=!V&&!re&&typeof _=="object"&&_!==null&&typeof _.r=="bigint"&&typeof _.s=="bigint";if(!V&&!xe)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let Pe,he;try{if(xe&&(Pe=new y(_.r,_.s)),V){try{re!=="compact"&&(Pe=y.fromDER(_))}catch(En){if(!(En instanceof Di.Err))throw En}!Pe&&re!=="der"&&(Pe=y.fromCompact(_))}he=c.fromHex(K)}catch{return!1}if(!Pe||k&&Pe.hasHighS())return!1;z&&(B=e.hash(B));let{r:De,s:tt}=Pe,Qe=j(B),lt=a(tt),pt=s(Qe*lt),Ot=s(De*lt),_t=c.BASE.multiplyAndAddUnsafe(he,pt,Ot)?.toAffine();return _t?s(_t.x)===De:!1}return{CURVE:e,getPublicKey:I,getSharedSecret:R,sign:$,verify:oe,ProjectivePoint:c,Signature:y,utils:x}}function oM(r){return{hash:r,hmac:(e,...t)=>Ts(r,e,h6(...t)),randomBytes:Oa}}function qE(r,e){let t=n=>HE({...r,...oM(n)});return{...t(e),create:t}}var GE=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),jE=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),iM=BigInt(1),l5=BigInt(2),WE=(r,e)=>(r+e/l5)/e;function sM(r){let e=GE,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,f=yt(u,t,e)*u%e,h=yt(f,t,e)*u%e,m=yt(h,l5,e)*l%e,g=yt(m,o,e)*m%e,w=yt(g,i,e)*g%e,y=yt(w,a,e)*w%e,x=yt(y,c,e)*y%e,I=yt(x,a,e)*w%e,v=yt(I,t,e)*u%e,R=yt(v,s,e)*g%e,q=yt(R,n,e)*l%e,j=yt(q,l5,e);if(!u5.eql(u5.sqr(j),r))throw new Error("Cannot find square root");return j}var u5=So(GE,void 0,void 0,{sqrt:sM}),Wn=qE({a:BigInt(0),b:BigInt(7),Fp:u5,n:jE,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=jE,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-iM*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=WE(i*r,e),c=WE(-n*r,e),l=Ze(r-a*t-c*o,e),u=Ze(-a*n-c*i,e),f=l>s,h=u>s;if(f&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:f,k1:l,k2neg:h,k2:u}}}},K1),VZ=BigInt(0);var HZ=Wn.ProjectivePoint;function f5(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var zE=32;function XE(r,e){let t=gt.digest(e instanceof Uint8Array?e:e.subarray());if(f5(t))return t.then(({digest:n})=>Wn.sign(n,r).toDERRawBytes()).catch(n=>{throw new Hf(String(n))});try{return Wn.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Hf(String(n))}}function YE(r,e,t){let n=gt.digest(t instanceof Uint8Array?t:t.subarray());if(f5(n))return n.then(({digest:o})=>Wn.verify(e,o,r)).catch(o=>{throw new qf(String(o))});try{return Wn.verify(e,n.digest,r)}catch(o){throw new qf(String(o))}}var ud=class{type="secp256k1";raw;_key;constructor(e){this._key=JE(e),this.raw=QE(this._key)}toMultihash(){return Pr.digest(tr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return Ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return YE(this._key,t,e)}},fd=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=ZE(e),this.publicKey=new ud(t??eS(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return XE(this.raw,e)}};function d5(r){return new fd(r)}function h5(r){return new ud(r)}async function tS(){let r=aM();return new fd(r)}function QE(r){return Wn.ProjectivePoint.fromHex(r).toRawBytes(!0)}function ZE(r){try{return Wn.getPublicKey(r,!0),r}catch(e){throw new If(String(e))}}function JE(r){try{return Wn.ProjectivePoint.fromHex(r),r}catch(e){throw new Si(String(e))}}function eS(r){try{return Wn.getPublicKey(r,!0)}catch(e){throw new If(String(e))}}function aM(){return Wn.utils.randomPrivateKey()}async function Xl(r,e){if(r==="Ed25519")return IE();if(r==="secp256k1")return tS();if(r==="RSA")return a5(cM(e));if(r==="ECDSA")return Fv(lM(e));throw new ho}function Mt(r,e){let{Type:t,Data:n}=ni.decode(r),o=n??new Uint8Array;switch(t){case dt.RSA:return o5(o,e);case dt.Ed25519:return D6(o);case dt.secp256k1:return h5(o);case dt.ECDSA:return u6(o);default:throw new ho}}function Z1(r){let{Type:e,Data:t}=ni.decode(r.digest),n=t??new Uint8Array;switch(e){case dt.Ed25519:return D6(n);case dt.secp256k1:return h5(n);case dt.ECDSA:return u6(n);default:throw new ho}}function tr(r){return ni.encode({Type:dt[r.type],Data:r.raw})}function rS(r){let e=ad.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case dt.RSA:return n5(t);case dt.Ed25519:return N6(t);case dt.secp256k1:return d5(t);case dt.ECDSA:return Ov(t);default:throw new ho}}function nS(r){if(r.byteLength===jn)return N6(r);if(r.byteLength===zE)return d5(r);let e=qn(r),t=e[2]?.[0];if(t===_v||t===Iv||t===Tv)return l6(e);if(e.length>8)return Y1(e);throw new D("Could not extract private key from raw bytes")}function ja(r){return ad.encode({Type:dt[r.type],Data:r.raw})}function cM(r){return r==null?2048:parseInt(r,10)}function lM(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new D("Unsupported curve, should be P-256, P-384 or P-521")}async function J1(r){if(r.type==="RSA")return{privateKey:await crypto.subtle.importKey("jwk",r.jwk,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),publicKey:await crypto.subtle.importKey("jwk",r.publicKey.jwk,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])};if(r.type==="ECDSA")return{privateKey:await crypto.subtle.importKey("jwk",r.jwk,{name:"ECDSA",namedCurve:r.jwk.crv??"P-256"},!0,["sign"]),publicKey:await crypto.subtle.importKey("jwk",r.publicKey.jwk,{name:"ECDSA",namedCurve:r.publicKey.jwk.crv??"P-256"},!0,["verify"])};throw new D("Only RSA and ECDSA keys are supported")}function oS(r,e,t,n){Na(r);let o=Vv({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(Zo(i),Zo(s),Zo(a),i<1)throw new Error("iterations (c) should be >= 1");let c=d6(e),l=d6(t),u=new Uint8Array(s),f=Ts.create(r,c),h=f._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:f,PRFSalt:h}}function iS(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),Nr(o),t}function sS(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=oS(r,e,t,n),l,u=new Uint8Array(4),f=Da(u),h=new Uint8Array(a.outputLen);for(let m=1,g=0;g<i;m++,g+=a.outputLen){let w=s.subarray(g,g+a.outputLen);f.setInt32(0,m,!1),(l=c._cloneInto(l)).update(u).digestInto(h),w.set(h.subarray(0,w.length));for(let y=1;y<o;y++){a._cloneInto(l).update(h).digestInto(h);for(let x=0;x<w.length;x++)w[x]^=h[x]}}return iS(a,c,s,l,h)}async function em(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=oS(r,e,t,n),u,f=new Uint8Array(4),h=Da(f),m=new Uint8Array(c.outputLen);for(let g=1,w=0;w<i;g++,w+=c.outputLen){let y=a.subarray(w,w+c.outputLen);h.setInt32(0,g,!1),(u=l._cloneInto(u)).update(f).digestInto(m),y.set(m.subarray(0,y.length)),await Kv(o-1,s,()=>{c._cloneInto(u).update(m).digestInto(m);for(let x=0;x<y.length;x++)y[x]^=m[x]})}return iS(c,l,a,u,m)}var dd=Uint32Array.from([1732584193,4023233417,2562383102,271733878,3285377520]),Cs=new Uint32Array(80),tm=class extends La{constructor(){super(64,20,8,!1),this.A=dd[0]|0,this.B=dd[1]|0,this.C=dd[2]|0,this.D=dd[3]|0,this.E=dd[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)Cs[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Cs[c]=L1(Cs[c-3]^Cs[c-8]^Cs[c-14]^Cs[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=B1(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=M1(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let f=L1(n,5)+l+a+u+Cs[c]|0;a=s,s=i,i=L1(o,30),o=n,n=f}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){Nr(Cs)}destroy(){this.set(0,0,0,0,0),Nr(this.buffer)}},aS=zf(()=>new tm);var cS=aS;var Yl=V1;var lS={sha1:cS,"sha2-256":oi,"sha2-512":Yl};function hd(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(lS).join(" / ");throw new D(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=lS[o],s=sS(i,r,e,{c:t,dkLen:n});return Kt.encode(s).substring(1)}var p5={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},uS={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},fS=new globalThis.TextEncoder;function uM(r,e){let t=p5[e],n=uS[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function fM(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=p5[e],o=uS[e],i=r;for(;i.length>0;){let s=fS.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function m5(r,{size:e=32,utf8Buffer:t}={}){if(!p5[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return fM(r,e,t);r=fS.encode(r)}return uM(r,e)}var pd={hash:r=>Number(m5(r,{size:32})),hashV:(r,e)=>dM(pd.hash(r,e))};function dM(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),H(e,"base16")}var g5=64,_o=class{fp;h;seed;constructor(e,t,n,o=2){if(o>g5)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=ke(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ge(this.fp,e.fp):!1}};function Wa(r,e){return Math.floor(Math.random()*(e-r))+r}var Ga=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof _o))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof _o))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof _o))throw new TypeError("Invalid Fingerprint");let t=Wa(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof _o))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var hM=500,md=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??pd,this.seed=e.seed??Wa(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=H(e));let t=new _o(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new Ga(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Ga(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[Wa(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new Ga(this.bucketSize));for(let a=0;a<hM;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new Ga(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=H(e));let t=new _o(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=H(e));let t=new _o(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},pM={1:.5,2:.84,4:.95,8:.98};function mM(r=.001){return r>.002?2:r>1e-5?4:8}function dS(r,e=.001){let t=mM(e),n=pM[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),g5);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var rm=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??pd,this.seed=e.seed??Wa(0,Math.pow(2,10)),this.filterSeries=[new md({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=H(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new md({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=H(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=H(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function rn(r,e=.001,t){return new rm({...dS(r,e),...t??{}})}var za=class extends Le{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=rn(this.maxProviders)}async retrieve(e,t={}){let n=Kt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=fe();if(this.requests.set(n,i.promise),this.providers.length===0){let u=!1;this.initialPeerSearchComplete==null&&(u=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,u&&this.log("found initial session peers for %c",e)}let s=!1,a=new Kr({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",u=>{this.log.error("error querying provider %o, evicting from session",u.detail.job.options.provider,u.detail.error),this.evict(u.detail.job.options.provider)}),a.addEventListener("success",u=>{s=!0,i.resolve(u.detail.result)}),a.addEventListener("idle",()=>{if(s||t.signal?.aborted===!0){this.log.trace("session idle, found block");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let u=0;u<this.minProviders&&this.providers.length!==0;u++){let f=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(f)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(u=>{this.log.error("could not find new providers for %c",e,u),i.reject(u)})});let c=u=>{a.add(async()=>this.queryProvider(e,u.detail,t),{provider:u.detail}).catch(f=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,f)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async u=>a.add(async()=>this.queryProvider(e,u,t),{provider:u}))).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)});let l=()=>{i.reject(new ir(t.signal?.reason??"Session aborted")),a.abort()};t.signal?.addEventListener("abort",l);try{return await i.promise}finally{this.removeEventListener("provider",c),t.signal?.removeEventListener("abort",l),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=fe(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new Ff(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var nm=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??fs(),this.log=this.logger.forComponent("helia"),this.getHasher=yv(e.hashers,e.loadHasher),this.getCodec=gv(e.codecs,e.loadCodec),this.dns=e.dns??e1(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new A1(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[jo]!=null&&i.push(o[jo]),o[Wo]!=null&&i.push(o[Wo]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new N1(t);this.pins=new S1(e.datastore,n,this.getCodec),this.blockstore=new _1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await ev(this.datastore),await sr(this.blockstore,this.datastore,this.routing)}async stop(){await Tr(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Rr(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new ae("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new ae("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var om=class extends nm{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var im=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Ql=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},sm=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},gd=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function am(r){return r[Symbol.asyncIterator]!=null}function hS(r,e){if(r.byteLength>e)throw new Ql("Message length too long")}var lm=r=>{let e=Ce(r),t=It(e);return Ue(r,t),lm.bytes=e,t};lm.bytes=0;function Io(r,e){e=e??{};let t=e.lengthEncoder??lm,n=e?.maxDataLength??4194304;function*o(i){hS(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return am(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}Io.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??lm,n=e?.maxDataLength??4194304;return hS(r,n),new J(t(r.byteLength),r)};var Xa;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Xa||(Xa={}));var y5=r=>{let e=rt(r);return y5.bytes=Ce(e),e};y5.bytes=0;function To(r,e){let t=new J,n=Xa.LENGTH,o=-1,i=e?.lengthDecoder??y5,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===Xa.LENGTH)try{if(o=i(t),o<0)throw new im("Invalid message length");if(o>a)throw new Ql("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Xa.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new sm("Message length length too long");break}throw l}if(n===Xa.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Xa.LENGTH}}}return am(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new gd("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new gd("Unexpected end of input")}()}To.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return To(n,{...e??{},onLength:i=>{t=i}})};function yM(r){return r[Symbol.asyncIterator]!=null}function wM(r,e){let t=0;if(yM(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Ll(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var nn=wM;function nr(r,...e){if(r==null)throw new Error("Empty pipeline");if(b5(r)){let n=r;r=()=>n.source}else if(mS(r)||pS(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&b5(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++)b5(t[n])&&(t[n]=xM(t[n]));return bM(...t)}var bM=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},pS=r=>r?.[Symbol.asyncIterator]!=null,mS=r=>r?.[Symbol.iterator]!=null,b5=r=>r==null?!1:r.sink!=null&&r.source!=null,xM=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=en({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(pS(i))o=async function*(){yield*i,n.end()};else if(mS(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Vr(n,o())}return r.source};function vM(r){return r[Symbol.asyncIterator]!=null}function EM(r,e){return vM(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 ks=EM;var yd="/ipfs/bitswap/1.2.0";var Ut;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ut||(Ut={}));var x5;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(x5||(x5={}));(function(r){r.codec=()=>vt(x5)})(Ut||(Ut={}));var Zl;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),Ut.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ke(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=Ut.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Zl||(Zl={}));var um;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),Zl.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new at('Decode error - map field "entries" had too many elements');i.entries.push(Zl.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(um||(um={}));var Jl;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:ke(0),data:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Jl||(Jl={}));var Gn;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Gn||(Gn={}));var fm;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(fm||(fm={}));(function(r){r.codec=()=>vt(fm)})(Gn||(Gn={}));var eu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&fm[t.type]!==0&&(n.uint32(16),Gn.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ke(0),type:Gn.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Gn.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(eu||(eu={}));var Ya;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),um.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),Jl.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),eu.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=um.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new at('Decode error - map field "blocks" had too many elements');i.blocks.push(Jl.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new at('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(eu.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ya||(Ya={}));function gS(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var dm=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var SM=4193648,AM=SM+16;function*yS(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=Ya.encode(l).byteLength,{added:f,hasMore:h,newSize:m}=v5(o,l.blocks,a,e,u,_M);a+=f,u=m;let g=h;({added:f,hasMore:h,newSize:m}=v5(n,l.blockPresences,s,e,u,IM)),s+=f,u=m;let w=h;if({added:f,hasMore:h,newSize:m}=v5(t,l.wantlist.entries,i,e,u,TM),i+=f,u=m,c=!g&&!w&&!h,c||(l.wantlist.full=!1),yield Ya.encode(l),c)break}}function v5(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>AM)throw new dm("Cannot send block as after encoding it is over the max message size");let f=o+u;if(f>n){a=!0;break}e.push(l),s++,o=f}return{hasMore:a,added:s,newSize:o}}function _M(r){return E5(3,Jl.encode(r))}function IM(r){return E5(4,eu.encode(r))}function TM(r){return E5(1,Zl.encode(r))}function E5(r,e){let t=Ce(r),n=Ce(e.byteLength);return t+n+e.byteLength}var hm=class extends Le{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[yd],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new cr({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new zo(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await nr(t,s=>To(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=Ya.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new ae("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Rr(nn(ks(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=gS(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new D("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new ae("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,yd,i);await a.closeRead();try{await nr(yS(s,this.maxOutgoingMessageSize),c=>Io(c),a),await a.close(i)}catch(c){i?.onProgress?.(new ae("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Sn("Network isn't running");t?.onProgress?.(new ae("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Jt(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(yd))return!0;throw new Ai(`${e} did not support ${yd}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};var wS=Symbol.for("nodejs.util.inspect.custom"),BM=114,wd=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Dp]=!0;toString(){return this.string==null&&(this.string=Ve.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return le.createV1(BM,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ge(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ge(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[wS](){return`PeerId(${this.toString()})`}},bd=class extends wd{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},xd=class extends wd{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},vd=class extends wd{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},MM=2336,Ed=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Pr.digest(H(this.url))}[wS](){return`PeerId(${this.url})`}[Dp]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return le.createV1(MM,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=M(e)),e.toString()===this.toString())}};var UM=114,bS=2336;function wt(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Xe(Ve.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Co(le.parse(r));if(e==null)throw new D('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Xe(e.decode(r))}return Vt(t)}function ii(r){if(r.type==="Ed25519")return new xd({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new vd({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new bd({multihash:r.toCID().multihash,publicKey:r});throw new ho}function xS(r){return ii(r.publicKey)}function Vt(r){if($M(r))return new bd({multihash:r});if(FM(r))try{let e=Z1(r);if(e.type==="Ed25519")return new xd({multihash:r,publicKey:e});if(e.type==="secp256k1")return new vd({multihash:r,publicKey:e})}catch{let t=M(r.digest);return new Ed(new URL(t))}throw new cs("Supplied PeerID Multihash is invalid")}function Co(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==UM&&r.code!==bS)throw new Fp("Supplied PeerID CID is invalid");if(r.code===bS){let e=M(r.multihash.digest);return new Ed(new URL(e))}return Vt(r.multihash)}function FM(r){return r.code===Pr.code}function $M(r){return r.code===gt.code}function Qa(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function pm(r){let e=Xe(Ve.decode(`z${r}`));return Vt(e)}var or=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return Qa(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return Qa(this.map.values(),e=>e.key)}values(){return Qa(this.map.values(),e=>e.value)}get size(){return this.map.size}};var Gr=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 Qa(this.set.entries(),e=>{let t=pm(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=pm(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Qa(this.set.values(),e=>pm(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function S5(){return new Gr}var mm=class{filter;constructor(e,t){this.filter=rn(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function A5(r,e=.001){return new mm(r,e)}var _5=class extends or{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 Sd(r){let{name:e,metrics:t}=r,n;return t!=null?n=new _5({name:e,metrics:t}):n=new or,n}var Li=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=Kt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=Kt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=Kt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function KM(r){let e=new Uint8Array(r.reduce((n,o)=>n+Ce(o),0)),t=0;for(let n of r)e=Ue(n,e,t),t+=Ce(n);return e}var vS=KM;function I5(r){return vS([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var gm=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Li,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===Ut.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:I5(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Gn.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:I5(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Gn.DoNotHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var ym=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Sd({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new gm({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=le.decode(o.cid),s=M(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===Ut.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??Ut.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=M(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};var T5=class extends za{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function ES(r,e){return new T5(r,e)}var wm=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var C5=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 bm(r){let{name:e,metrics:t}=r,n;return t!=null?n=new C5({name:e,metrics:t}):n=new Map,n}function VM(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=rt(r);e.push(t),r=r.slice(Ce(t))}return e}var SS=VM;var xm=class extends Le{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=Sd({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=bm({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=M(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Ut.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ut.WantHave&&t.wantType===Ut.WantBlock&&(o.wantType=Ut.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ut.WantBlock?(await Jt(this,"block",t?.signal,{filter:a=>ge(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Jt(this,"presence",t?.signal,{filter:s=>ge(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=fe(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Li;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=M(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Li;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ut.WantHave,priority:1}),await this.network.sendMessage(t,o),(await Jt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ge(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Ut.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Li;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ut.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await Jt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ge(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=M(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=SS(o.prefix),s=i[0],a=i[1],c=i[2],l=c===gt.code?gt:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let f=le.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,f),this.safeDispatchEvent("block",{detail:{sender:e,cid:f,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:f,has:!0,block:o.data}});let h=M(f.multihash.bytes,"base64"),m=this.wants.get(h);m!=null&&(m.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=le.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Gn.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Li(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:Ut.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var vm=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 wm(e),this.network=new hm(e,t),this.peerWantLists=new ym({...e,network:this.network},t),this.wantList=new xm({...e,network:this.network},t)}createSession(e={}){return ES({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=Ne([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var AS=(r,e={})=>new vm(r,e);var k5=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=AS(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function P5(r={}){return e=>new k5(e,r)}var Em=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let f=this.readChar();if(f===void 0)return;let h=Number.parseInt(f,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var _S=45,HM=15,tu=new Em;function Sm(r){if(!(r.length>HM))return tu.new(r).parseWith(()=>tu.readIPv4Addr())}function Am(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>_S))return tu.new(r).parseWith(()=>tu.readIPv6Addr())}function Za(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>_S)return;let t=tu.new(r).parseWith(()=>tu.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function ko(r){return!!Sm(r)}function ru(r){return!!Am(r)}function _m(r){return!!Za(r)}var TS=$t(IS(),1),qM=["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"],jM=qM.map(r=>new TS.Netmask(r));function R5(r){for(let e of jM)if(e.contains(r))return!0;return!1}function WM(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function GM(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return R5(o)}function zM(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function XM(r){let e=r.split(":"),t=e[e.length-1];return R5(t)}function YM(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function zr(r){return ko(r)?R5(r):WM(r)?GM(r):zM(r)?XM(r):ru(r)?YM(r):void 0}var QM=r=>r.toString().split("/").slice(1),nu=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Be=r=>({match:e=>nu(t=>t===r).match(e),pattern:r}),Ja=()=>({match:r=>nu(e=>typeof e=="string").match(r),pattern:"{string}"}),_d=()=>({match:r=>nu(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),nt=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{Ve.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Id=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{xa.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Je=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Br=(...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(", ")})`}),He=(...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 ot(...r){function e(o){let i=QM(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var ZM=nt(),CS=ot(ZM),Tm=He(Be("dns4"),Ja()),Cm=He(Be("dns6"),Ja()),km=He(Be("dnsaddr"),Ja()),D5=He(Be("dns"),Ja()),vne=ot(Tm,Je(nt())),Ene=ot(Cm,Je(nt())),Sne=ot(km,Je(nt())),Td=ot(Br(D5,km,Tm,Cm),Je(nt())),kS=He(Be("ip4"),nu(ko)),PS=He(Be("ip6"),nu(ru)),O5=Br(kS,PS),Bi=Br(O5,D5,Tm,Cm,km),RS=ot(Br(O5,He(Br(D5,km,Tm,Cm),Je(nt())))),L5=ot(kS),B5=ot(PS),NS=ot(O5),M5=He(Bi,Be("tcp"),_d()),Cd=He(Bi,Be("udp"),_d()),ec=ot(He(M5,Je(nt()))),Ane=ot(Cd),U5=He(Cd,Be("quic"),Je(nt())),Pm=He(Cd,Be("quic-v1"),Je(nt())),JM=Br(U5,Pm),_ne=ot(U5),DS=ot(Pm),N5=Br(Bi,M5,Cd,U5,Pm),OS=Br(He(N5,Be("ws"),Je(nt()))),Mi=ot(OS),LS=Br(He(N5,Be("wss"),Je(nt())),He(N5,Be("tls"),Je(He(Be("sni"),Ja())),Be("ws"),Je(nt()))),tc=ot(LS),BS=He(Cd,Be("webrtc-direct"),Je(Id()),Je(Id()),Je(nt())),kd=ot(BS),MS=He(Pm,Be("webtransport"),Je(Id()),Je(Id()),Je(nt())),F5=ot(MS),Im=Br(OS,LS,He(M5,Je(nt())),He(JM,Je(nt())),He(Bi,Je(nt())),BS,MS,nt()),Rm=ot(Im),eU=He(Im,Be("p2p-circuit"),nt()),on=ot(eU),tU=Br(He(Im,Be("p2p-circuit"),Be("webrtc"),Je(nt())),He(Im,Be("webrtc"),Je(nt())),He(Be("webrtc"),Je(nt()))),Pd=ot(tU),rU=Br(He(Bi,Be("tcp"),_d(),Be("http"),Je(nt())),He(Bi,Be("http"),Je(nt()))),US=ot(rU),nU=Br(He(Bi,Be("tcp"),Br(He(Be("443"),Be("http")),He(_d(),Be("https"))),Je(nt())),He(Bi,Be("tls"),Be("http"),Je(nt())),He(Bi,Be("https"),Je(nt()))),FS=ot(nU),oU=Br(He(Be("memory"),Ja(),Je(nt()))),Ine=ot(oU);function $S(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function KS(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function $5(r){switch(r.length){case rc:return r.join(".");case nc:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function VS(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function HS(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var rc=4,nc=16,Nne=parseInt("0xFFFF",16),iU=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Rd(r,e){e.length===nc&&r.length===rc&&$S(e,0,11)&&(e=e.slice(12)),e.length===rc&&r.length===nc&&KS(r,iU,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function qS(r,e){if(typeof e=="string"&&(e=Za(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function K5(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=rc,o=Sm(e);if(o==null&&(n=nc,o=Am(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=V5(i,8*n);return{network:Rd(o,s),mask:s}}function V5(r,e){if(e!==8*rc&&e!==8*nc)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var oc=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=K5(e));else{let n=Za(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=Za(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=V5(o,8*n.length);this.network=Rd(n,this.mask)}}contains(e){return qS({network:this.network,mask:this.mask},e)}toString(){let e=VS(this.mask),t=e!==-1?String(e):HS(this.mask);return $5(this.network)+"/"+t}};function jS(r,e){return new oc(r).contains(e)}var WS=ko,sU=ru,H5=function(r){let e=0;if(r=r.toString().trim(),WS(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(sU(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=WS(t[n]),s;i&&(s=H5(t[n]),t[n]=M(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,M(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},GS=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var ou={},q5={},cU=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];cU.forEach(r=>{let e=lU(...r);q5[e.code]=e,ou[e.name]=e});function lU(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Ie(r){if(typeof r=="number"){if(q5[r]!=null)return q5[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(ou[r]!=null)return ou[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var uU=Ie("ip4"),fU=Ie("ip6"),dU=Ie("ipcidr");function z5(r,e){switch(Ie(r).code){case 4:case 41:return pU(e);case 42:return G5(e);case 43:return M(e,"base10");case 6:case 273:case 33:case 132:return YS(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return G5(e);case 421:return wU(e);case 444:return XS(e);case 445:return XS(e);case 466:return yU(e);case 481:return globalThis.encodeURIComponent(G5(e));default:return M(e,"base16")}}function X5(r,e){switch(Ie(r).code){case 4:return zS(e);case 41:return zS(e);case 42:return W5(e);case 43:return H(e,"base10");case 6:case 273:case 33:case 132:return Q5(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return W5(e);case 421:return mU(e);case 444:return bU(e);case 445:return xU(e);case 466:return gU(e);case 481:return W5(globalThis.decodeURIComponent(e));default:return H(e,"base16")}}function Y5(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===uU.code||n===fU.code)&&(t=o),n===dU.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new oc(t,e)}var j5=Object.values(Sa).map(r=>r.decoder),hU=function(){let r=j5[0].or(j5[1]);return j5.slice(2).forEach(e=>r=r.or(e)),r}();function zS(r){if(!_m(r))throw new Error("invalid ip address");return H5(r)}function pU(r){let e=GS(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!_m(e))throw new Error("invalid ip address");return e}function Q5(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function YS(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function W5(r){let e=H(r),t=Uint8Array.from(Ue(e.length));return st([t,e],t.length+e.length)}function G5(r){let e=rt(r);if(r=r.slice(Ce(e)),r.length!==e)throw new Error("inconsistent lengths");return M(r)}function mU(r){let e;r[0]==="Q"||r[0]==="1"?e=Xe(Ve.decode(`z${r}`)).bytes:e=le.parse(r).multihash.bytes;let t=Uint8Array.from(Ue(e.length));return st([t,e],t.length+e.length)}function gU(r){let e=hU.decode(r),t=Uint8Array.from(Ue(e.length));return st([t,e],t.length+e.length)}function yU(r){let e=rt(r),t=r.slice(Ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+M(t,"base64url")}function wU(r){let e=rt(r),t=r.slice(Ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return M(t,"base58btc")}function bU(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=Gt.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=Q5(n);return st([t,o],t.length+o.length)}function xU(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=Gt.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=Q5(n);return st([t,o],t.length+o.length)}function XS(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=M(e,"base32"),o=YS(t);return`${n}:${o}`}function QS(r){r=Z5(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=Ie(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new Nm("invalid address: "+r);if(a.path===!0){n=Z5(o.slice(i).join("/")),e.push([a.code,X5(a.code,n)]),t.push([a.code,n]);break}let c=X5(a.code,o[i]);e.push([a.code,c]),t.push([a.code,z5(a.code,c)])}return{string:ZS(t),bytes:Dm(e),tuples:e,stringTuples:t,path:n}}function J5(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=rt(r,o),s=Ce(i),a=Ie(i),c=vU(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new Nm("Invalid address Uint8Array: "+M(r,"base16"));e.push([i,l]);let u=z5(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:ZS(t),tuples:e,stringTuples:t,path:n}}function ZS(r){let e=[];return r.map(t=>{let n=Ie(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Z5(e.join("/"))}function Dm(r){return st(r.map(e=>{let t=Ie(e[0]),n=Uint8Array.from(Ue(t.code));return e.length>1&&e[1]!=null&&(n=st([n,e[1]])),n}))}function vU(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=rt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ce(t)}}function Z5(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var Nm=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var EU=Symbol.for("nodejs.util.inspect.custom"),t8=Symbol.for("@multiformats/js-multiaddr/multiaddr"),SU=[Ie("dns").code,Ie("dns4").code,Ie("dns6").code,Ie("dnsaddr").code],e8=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Om=class r{bytes;#e;#t;#r;#o;[t8]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=J5(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=QS(e)}else if(Ps(e))t=J5(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=Ie("tcp"),a=Ie("udp"),c=Ie("ip4"),l=Ie("ip6"),u=Ie("dns6"),f=Ie("ip6zone");for(let[m,g]of this.stringTuples())m===f.code&&(i=`%${g??""}`),SU.includes(m)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${g??""}${i}`,e=m===u.code?6:4),(m===s.code||m===a.code)&&(t=Ie(m).name==="tcp"?"tcp":"udp",o=parseInt(g??"")),(m===c.code||m===l.code)&&(t=Ie(m).name==="tcp"?"tcp":"udp",n=`${g??""}${i}`,e=m===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},Ie(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Ie(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(Dm(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===ou.p2p.code&&e.push([n,o]),n===ou["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?M(Ve.decode(`z${n}`),"base58btc"):M(le.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return ge(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=iu.get(t.name);if(n==null)throw new e8(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>ne(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[EU](){return`Multiaddr(${this.#e})`}};var iu=new Map;function Ps(r){return!!r?.[t8]}function ne(r){return new Om(r)}var AU=[Ie("tcp").code,Ie("dns").code,Ie("dnsaddr").code,Ie("dns4").code,Ie("dns6").code];function JS(r){return rA("sni",r)?.[1]}function eA(r){let e=rA("tcp",r)?.[1];return e==null?"":`:${e}`}function rA(r,e){let t;try{t=Ie(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function tA(r){return r.some(([e,t])=>e===Ie("tls").code)}function Po(r,e,t){let n=nA[Ie(r).name];if(n==null)throw new Error(`Can't interpret protocol ${Ie(r).name}`);let o=n(e,t);return r===Ie("ip6").code?`[${o}]`:o}var nA={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${Po(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Po(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Po(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Po(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=tA(e),n=JS(e),o=eA(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Po(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Po(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Po(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=tA(e),n=JS(e),o=eA(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Po(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Lm(r,e){let n=ne(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=Ie(o[0]),s=nA[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&AU.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Bm=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return Kt.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);if(a==null){this.#e++;let c={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await u.arrayBuffer())}),this.#a.set(o,a)}return await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function _U(r,e,t){return r.filter(n=>{if(FS.matches(n)||e&&US.matches(n))return t||Td.matches(n)?!0:zr(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*Mm(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=_U(s.multiaddrs,n,o);if(a.length===0)continue;let c=Lm(a[0]);yield new Bm(c,{logger:t,transformRequestInit:i.transformRequestInit})}}var r8=class extends za{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Um,this.allowLocal=t.allowLocal??Fm,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*Mm(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function oA(r,e){return new r8(r,e)}var $m=class{allowInsecure;allowLocal;transformRequestInit;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??Um,this.allowLocal=t.allowLocal??Fm,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of Mm(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return oA({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Um=!1,Fm=!1;function n8(r={}){return e=>new $m(e,r)}async function*Km(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var RU=$t(Vm(),1);var Ro=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Hm=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},su=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},qm=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},jm=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},Wm=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Nd=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var sn;(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=()=>vt(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(sn||(sn={}));var IU=_n("ipns:utils"),iA=H("/ipns/");var TU=0,CU=18;function sA(r){let e;if(r.pubKey!=null)try{e=Mt(r.pubKey)}catch(t){throw IU.error(t),t}if(e!=null)return e}function aA(r){let e=H("ipns-signature:");return st([e,r])}function Dd(r){return"signatureV1"in r?sn.encode({value:H(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:H(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):sn.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function si(r){let e=sn.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new Ro("Missing data or signatureV2");let t=cA(e.data),n=kU(t.Value),o=M(t.Validity);if(e.value!=null&&e.signatureV1!=null)return PU(e),{value:n,validityType:sn.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:sn.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function Od(r){return st([iA,r.bytes])}function au(r){let e=Xe(r.slice(iA.length));if(!Gm(e,TU)&&!Gm(e,CU))throw new cs("Multihash in IPNS key was not identity or sha2-256");return e}function cA(r){let e=Rn(r);if(e.ValidityType===0)e.ValidityType=sn.ValidityType.EOL;else throw new su("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function kU(r){let e=M(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${le.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${le.parse(e).toV1().toString()}`}catch{}throw new jm("Value must be a valid content path starting with /")}function PU(r){if(r.data==null)throw new Wm("Record data is missing");let e=cA(r.data);if(!ge(e.Value,r.value??new Uint8Array(0)))throw new Ro('Field "value" did not match between protobuf and CBOR');if(!ge(e.Validity,r.validity??new Uint8Array(0)))throw new Ro('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Ro('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Ro('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Ro('Field "ttl" did not match between protobuf and CBOR')}function Gm(r,e){return r.code===e}var Eie=_n("ipns"),Sie=5*60*1e9,NU="/ipns/",Aie=NU.length;var lA=$t(Vm(),1);var zm=_n("ipns:validator"),DU=1024*10,OU=async(r,e)=>{let t=si(e),n;try{let o=aA(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw zm.error("record signature verification failed"),new Ro("Record signature verification failed");if(t.validityType===sn.ValidityType.EOL){if(lA.default.fromString(t.validity).toDate().getTime()<Date.now())throw zm.error("record has expired"),new Hm("record has expired")}else if(t.validityType!=null)throw zm.error("the validity type is unsupported"),new su("The validity type is unsupported");zm("ipns record for %s is valid",t.value)};async function Xm(r,e){if(e.byteLength>DU)throw new qm("The record is too large");let t=au(r),n;Gm(t,0)&&(n=Z1(t));let o=si(e),i=sA(o)??n;if(i==null)throw new Nd("Could not extract public key from IPNS record or routing key");let s=Od(i.toMultihash());if(!ge(s,r))throw new Nd("Embedded public key did not match routing key");await OU(i,e)}var Ym=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Ld(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),Bl(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Ym("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var cu=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},No=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function LU(r){return r[Symbol.asyncIterator]!=null}function BU(r){if(LU(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var uA=BU;var fA=H("/ipns/");function dA(r){return ge(r.subarray(0,fA.byteLength),fA)}var Qm=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*nn(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!dA(e))return;let o=au(e),i=le.createV1(114,o),s=si(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!dA(e))throw new Ge("Not found");let n=au(e),o=le.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Dd(i)}catch(i){throw i.name==="BadResponseError"?new Ge("Not found"):i}}},Zm=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await uA(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Ge("Not found")}async*getClosestPeers(e,t={}){}};var fr=_n("delegated-routing-v1-http-api-client"),Jm={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},e0=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new Xo({concurrency:t.concurrentRequests??Jm.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Jm.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Qm(this),this.peerRouting=new Zm(this),this.cacheName=t.cacheName??Jm.cacheName,this.cacheTTL=t.cacheTTL??Jm.cacheTTL}get[jo](){return this.contentRouting}get[Wo](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&fr("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){fr("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=fe(),s=fe();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l==null)throw new No("No response received");if(!l.ok)throw l.status===404?new Ge("No matching records found"):l.status===422?new cu("Request does not conform to schema or semantic constraints"):new No(`Unexpected status code: ${l.status}`);if(l.body==null)throw new No("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new No("No Content-Type header received");if(u?.startsWith("application/json")){let f=await l.json();for(let h of f.Providers){let m=this.#e(h);m!=null&&(yield m)}}else if(u.includes("application/x-ndjson"))for await(let f of Ld(Km(l.body))){let h=this.#e(f);h!=null&&(yield h)}else throw new No(`Unsupported Content-Type: ${u}`)}finally{o.clear(),s.resolve(),fr("getProviders finished: %c",e)}}async*getPeers(e,t={}){fr("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=fe(),s=fe();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)throw new Ge("No matching records found");if(l.status===422)throw new cu("Request does not conform to schema or semantic constraints");if(l.body==null)throw new No("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let f=await l.json();for(let h of f.Peers){let m=this.#e(h);m!=null&&(yield m)}}else for await(let f of Ld(Km(l.body))){let h=this.#e(f);h!=null&&(yield h)}}catch(a){fr.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),fr("getPeers finished: %c",e)}}async getIPNS(e,t={}){fr("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=fe(),s=fe();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(fr("getIPNS GET %s %d",a,l.status),l.status===404)throw new Ge("No matching records found");if(l.status===422)throw new cu("Request does not conform to schema or semantic constraints");if(l.body==null)throw new No("GET ipns response had no body");let u=await l.arrayBuffer(),f=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Xm(Od(e.multihash),f),si(f)}catch(c){throw fr.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),fr("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){fr("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=Ne([this.shutDownController.signal,o,n.signal]);let s=fe(),a=fe();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Dd(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},f=await this.#r(c,u);if(fr("putIPNS PUT %s %d",c,f.status),f.status!==200)throw new No("PUT ipns response had status other than 200")}catch(l){throw fr.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),fr("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(ne)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:wt(e.ID),Addrs:n,Protocols:t}}catch(t){fr.error("could not conform record to peer schema",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return fr("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return fr("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let f=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,f)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function hA(r,e={}){return new e0(new URL(r),e)}function i8(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var pA="[a-fA-F\\d:]",Rs=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${pA})|(?<=${pA})(?=\\s|$))`:"",Do="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",Ht="[a-fA-F\\d]{1,4}",t0=`
4
4
  (?:
5
- (?:${st}:){7}(?:${st}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
6
- (?:${st}:){6}(?:${sn}|:${st}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
7
- (?:${st}:){5}(?::${sn}|(?::${st}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
8
- (?:${st}:){4}(?:(?::${st}){0,1}:${sn}|(?::${st}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
9
- (?:${st}:){3}(?:(?::${st}){0,2}:${sn}|(?::${st}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
10
- (?:${st}:){2}(?:(?::${st}){0,3}:${sn}|(?::${st}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
11
- (?:${st}:){1}(?:(?::${st}){0,4}:${sn}|(?::${st}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
12
- (?::(?:(?::${st}){0,5}:${sn}|(?::${st}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
5
+ (?:${Ht}:){7}(?:${Ht}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
6
+ (?:${Ht}:){6}(?:${Do}|:${Ht}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
7
+ (?:${Ht}:){5}(?::${Do}|(?::${Ht}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
8
+ (?:${Ht}:){4}(?:(?::${Ht}){0,1}:${Do}|(?::${Ht}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
9
+ (?:${Ht}:){3}(?:(?::${Ht}){0,2}:${Do}|(?::${Ht}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
10
+ (?:${Ht}:){2}(?:(?::${Ht}){0,3}:${Do}|(?::${Ht}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
11
+ (?:${Ht}:){1}(?:(?::${Ht}){0,4}:${Do}|(?::${Ht}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
12
+ (?::(?:(?::${Ht}){0,5}:${Do}|(?::${Ht}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
13
13
  )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
14
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),__=new RegExp(`(?:^${sn}$)|(?:^${Pd}$)`),C_=new RegExp(`^${sn}$`),k_=new RegExp(`^${Pd}$`),Dm=r=>r&&r.exact?__:new RegExp(`(?:${No(r)}${sn}${No(r)})|(?:${No(r)}${Pd}${No(r)})`,"g");Dm.v4=r=>r&&r.exact?C_:new RegExp(`${No(r)}${sn}${No(r)}`,"g");Dm.v6=r=>r&&r.exact?k_:new RegExp(`${No(r)}${Pd}${No(r)}`,"g");var Lm=Dm;function Nm(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function I7(){return!1}var{toString:P_}=Object.prototype;function Om(r){return P_.call(r)==="[object RegExp]"}var T7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Mm(r,e={}){if(!Om(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(T7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?T7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Bm(r,e,{timeout:t}={}){try{return Nm(()=>Mm(r).test(e),{timeout:t})()}catch(n){if(I7(n))return!1;throw n}}var R_=15,D_=45,_7={timeout:400};function Um(r){return r.length>D_?!1:Bm(Lm.v6({exact:!0}),r,_7)}function C7(r){return r.length>R_?!1:Bm(Lm.v4({exact:!0}),r,_7)}var k7={http:"80",https:"443",ws:"80",wss:"443"},L_=["http","https","ws","wss"];function P7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=N_(r),a="/"+[O_(o,t),M_(i,n),B_(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return $(a)}function N_(r){let[e]=r.split(":");L_.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=U_(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function O_(r,e){if(!(r==null||r==="")){if(C7(r))return["ip4",r];if(Um(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(Um(t))return["ip6",t]}return[e,r]}}function M_(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function B_(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function U_(r){if(!(r==null||r===""||k7[r]==null))return k7[r]}var F_=["https://trustless-gateway.link","https://4everland.io"],V_=2336;function $_(r){return r=r.toString(),{id:Qr(Q.createV1(V_,Jt.digest(N(r)))),multiaddrs:[P7(r)]}}var Fm=class{gateways;constructor(e={}){this.gateways=(e.gateways??F_).map(t=>$_(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function Vm(r={}){return new Fm(r)}var $m=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function Km(r){return new $m(r)}var Ac=class extends qn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(at.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(at.encode(e.multihash.bytes));if(t==null)throw new Pr;return t}has(e){return this.data.has(at.encode(e.multihash.bytes))}async delete(e){this.data.delete(at.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:Q.createV1(ri,ve(at.decode(e))),block:t}}};var tQ=hr("blockstore:core:tiered");var L7="SHARDING";function H_(r){return r[Symbol.asyncIterator]!=null}function q_(r){if(H_(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Ri=q_;function z_(r){return r[Symbol.asyncIterator]!=null}function W_(r,e){return z_(r)?async function*(){yield*(await Ri(r)).sort(e)}():function*(){yield*Ri(r).sort(e)}()}var Rd=W_;var Gn=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await Rt(this.putMany(e,n)),e=[],await Rt(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=en(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>en(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Rd(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=en(n,()=>o++>=i)}return e.limit!=null&&(n=uo(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=en(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>en(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>Rd(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=en(n,()=>i++>=o)}return e.limit!=null&&(n=uo(n,e.limit)),n}};var Di=class extends Gn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Pr;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Ne(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Ne(e)}};var NQ=new Ne(L7);var QQ=hr("datastore:core:tiered");var Dd=class extends Wu{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};function Ld(r){return r[Symbol.asyncIterator]!=null}var Nd=r=>{let e=ue(r),t=Be(e);return De(r,t),Nd.bytes=e,t};Nd.bytes=0;function O7(r,e){e=e??{};let t=e.lengthEncoder??Nd;function*n(o){let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return Ld(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}O7.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Nd;return new ee(t(r.byteLength),r)};var Od=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Md=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Bd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Ic=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var G_=8,Q_=1024*1024*4,Li;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(Li||(Li={}));var Hm=r=>{let e=yt(r);return Hm.bytes=ue(e),e};Hm.bytes=0;function Tc(r,e){let t=new ee,n=Li.LENGTH,o=-1,i=e?.lengthDecoder??Hm,s=e?.maxLengthLength??G_,a=e?.maxDataLength??Q_;function*c(){for(;t.byteLength>0;){if(n===Li.LENGTH)try{if(o=i(t),o<0)throw new Od("Invalid message length");if(o>a)throw new Md("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=Li.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Bd("Message length length too long");break}throw l}if(n===Li.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=Li.LENGTH}}}return Ld(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ic("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ic("Unexpected end of input")}()}Tc.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Tc(n,{...e??{},onLength:i=>{t=i}})};var qm=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=J(),this.haveNext=J()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=J(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=J(),await et(this.readNext.promise,t?.signal,t)}};function M7(){return new qm}var Ud=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var zm=class extends Error{code;constructor(e,t){super(e),this.code=t}},Wm=class extends zm{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Ni(r,e){let t=M7();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ee;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new Wm("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:f}=await Promise.race([n.next(),l]);return d===!0?new ee:f}for(;o.byteLength<s;){let{value:d,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new Ud("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var Fd=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Vd=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},$d=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function An(r,e={}){let t=Ni(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ue(e.maxDataLength));let n=e?.lengthDecoder??yt,o=e?.lengthEncoder??De;return{read:async s=>{let a=-1,c=new ee;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new Fd("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new $d("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Vd("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ee(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ee(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Gm(){let r=J(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function B7(){let r=Gm(),e=Gm();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Ks=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Kd(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function Qm(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Ut(r,...e){if(!Qm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function Ym(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function U7(r,e){Ut(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function Xm(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var Qn=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),F7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),Y_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!Y_)throw new Error("Non little-endian hardware is not supported");function X_(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Hd(r){if(typeof r=="string")r=X_(r);else if(Qm(r))r=qd(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function V7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function $7(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var Zm=(r,e)=>{function t(n,...o){if(Ut(n),r.nonceLength!==void 0){let u=o[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?Ut(u):Ut(u,r.nonceLength)}let i=r.tagLength;i&&o[1]!==void 0&&Ut(o[1]);let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Ut(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Ut(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Ut(u),i&&u.length<i)throw new Error("invalid ciphertext length: smaller than tagLength="+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function jm(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!Z_(e))throw new Error("invalid output, must be aligned");return e}function Jm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function Z_(r){return r.byteOffset%4===0}function qd(r){return Uint8Array.from(r)}function Yn(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var H7=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),j_=H7("expand 16-byte k"),J_=H7("expand 32-byte k"),eC=Qn(j_),tC=Qn(J_);function Y(r,e){return r<<e|r>>>32-e}function e3(r){return r.byteOffset%4===0}var zd=64,rC=16,q7=2**32-1,K7=new Uint32Array;function nC(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(zd),u=Qn(l),d=e3(o)&&e3(i),f=d?Qn(o):K7,h=d?Qn(i):K7;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=q7)throw new Error("arx: counter overflow");let g=Math.min(zd,c-p);if(d&&g===zd){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,x;y<rC;y++)x=m+y,h[x]=f[x]^u[y];p+=zd;continue}for(let m=0,y;m<g;m++)y=p+m,i[y]=o[y]^l[m];p+=g}}function t3(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=V7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Kd(o),Kd(s),Xm(i),Xm(t),(a,c,l,u,d=0)=>{Ut(a),Ut(c),Ut(l);let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),Ut(u),Kd(d),d<0||d>=q7)throw new Error("arx: counter overflow");if(u.length<f)throw new Error(`arx: output (${u.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=qd(a)),m=tC;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=eC,h.push(g);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);e3(c)||h.push(c=qd(c));let y=Qn(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,y,Qn(c.subarray(0,16)),y),c=c.subarray(16)}let x=16-o;if(x!==c.length)throw new Error(`arx: nonce must be ${x} or 16 bytes`);if(x!==12){let I=new Uint8Array(12);I.set(c,i?0:12-c.length),c=I,h.push(c)}let w=Qn(c);return nC(r,m,y,w,l,u,d,s),Yn(...h),u}}var xt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,r3=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Hd(e),Ut(e,32);let t=xt(e,0),n=xt(e,2),o=xt(e,4),i=xt(e,6),s=xt(e,8),a=xt(e,10),c=xt(e,12),l=xt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let u=0;u<8;u++)this.pad[u]=xt(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],f=s[5],h=s[6],p=s[7],g=s[8],m=s[9],y=xt(e,t+0),x=xt(e,t+2),w=xt(e,t+4),I=xt(e,t+6),M=xt(e,t+8),D=xt(e,t+10),R=xt(e,t+12),S=xt(e,t+14),A=i[0]+(y&8191),F=i[1]+((y>>>13|x<<3)&8191),L=i[2]+((x>>>10|w<<6)&8191),U=i[3]+((w>>>7|I<<9)&8191),K=i[4]+((I>>>4|M<<12)&8191),C=i[5]+(M>>>1&8191),k=i[6]+((M>>>14|D<<2)&8191),v=i[7]+((D>>>11|R<<5)&8191),E=i[8]+((R>>>8|S<<8)&8191),_=i[9]+(S>>>5|o),T=0,H=T+A*a+F*(5*m)+L*(5*g)+U*(5*p)+K*(5*h);T=H>>>13,H&=8191,H+=C*(5*f)+k*(5*d)+v*(5*u)+E*(5*l)+_*(5*c),T+=H>>>13,H&=8191;let q=T+A*c+F*a+L*(5*m)+U*(5*g)+K*(5*p);T=q>>>13,q&=8191,q+=C*(5*h)+k*(5*f)+v*(5*d)+E*(5*u)+_*(5*l),T+=q>>>13,q&=8191;let X=T+A*l+F*c+L*a+U*(5*m)+K*(5*g);T=X>>>13,X&=8191,X+=C*(5*p)+k*(5*h)+v*(5*f)+E*(5*d)+_*(5*u),T+=X>>>13,X&=8191;let ce=T+A*u+F*l+L*c+U*a+K*(5*m);T=ce>>>13,ce&=8191,ce+=C*(5*g)+k*(5*p)+v*(5*h)+E*(5*f)+_*(5*d),T+=ce>>>13,ce&=8191;let se=T+A*d+F*u+L*l+U*c+K*a;T=se>>>13,se&=8191,se+=C*(5*m)+k*(5*g)+v*(5*p)+E*(5*h)+_*(5*f),T+=se>>>13,se&=8191;let fe=T+A*f+F*d+L*u+U*l+K*c;T=fe>>>13,fe&=8191,fe+=C*a+k*(5*m)+v*(5*g)+E*(5*p)+_*(5*h),T+=fe>>>13,fe&=8191;let Ee=T+A*h+F*f+L*d+U*u+K*l;T=Ee>>>13,Ee&=8191,Ee+=C*c+k*a+v*(5*m)+E*(5*g)+_*(5*p),T+=Ee>>>13,Ee&=8191;let Oe=T+A*p+F*h+L*f+U*d+K*u;T=Oe>>>13,Oe&=8191,Oe+=C*l+k*c+v*a+E*(5*m)+_*(5*g),T+=Oe>>>13,Oe&=8191;let Me=T+A*g+F*p+L*h+U*f+K*d;T=Me>>>13,Me&=8191,Me+=C*u+k*l+v*c+E*a+_*(5*m),T+=Me>>>13,Me&=8191;let Ke=T+A*m+F*g+L*p+U*h+K*f;T=Ke>>>13,Ke&=8191,Ke+=C*d+k*u+v*l+E*c+_*a,T+=Ke>>>13,Ke&=8191,T=(T<<2)+T|0,T=T+H|0,H=T&8191,T=T>>>13,q+=T,i[0]=H,i[1]=q,i[2]=X,i[3]=ce,i[4]=se,i[5]=fe,i[6]=Ee,i[7]=Oe,i[8]=Me,i[9]=Ke}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;Yn(n)}update(e){Ym(this);let{buffer:t,blockLen:n}=this;e=Hd(e);let o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){Yn(this.h,this.r,this.buffer,this.pad)}digestInto(e){Ym(this),U7(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function oC(r){let e=(n,o)=>r(o).update(Hd(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var z7=oC(r=>new r3(r));function Q7(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],y=e[7],x=o,w=t[0],I=t[1],M=t[2],D=s,R=a,S=c,A=l,F=u,L=d,U=f,K=h,C=p,k=g,v=m,E=y,_=x,T=w,H=I,q=M;for(let ce=0;ce<i;ce+=2)D=D+F|0,_=Y(_^D,16),C=C+_|0,F=Y(F^C,12),D=D+F|0,_=Y(_^D,8),C=C+_|0,F=Y(F^C,7),R=R+L|0,T=Y(T^R,16),k=k+T|0,L=Y(L^k,12),R=R+L|0,T=Y(T^R,8),k=k+T|0,L=Y(L^k,7),S=S+U|0,H=Y(H^S,16),v=v+H|0,U=Y(U^v,12),S=S+U|0,H=Y(H^S,8),v=v+H|0,U=Y(U^v,7),A=A+K|0,q=Y(q^A,16),E=E+q|0,K=Y(K^E,12),A=A+K|0,q=Y(q^A,8),E=E+q|0,K=Y(K^E,7),D=D+L|0,q=Y(q^D,16),v=v+q|0,L=Y(L^v,12),D=D+L|0,q=Y(q^D,8),v=v+q|0,L=Y(L^v,7),R=R+U|0,_=Y(_^R,16),E=E+_|0,U=Y(U^E,12),R=R+U|0,_=Y(_^R,8),E=E+_|0,U=Y(U^E,7),S=S+K|0,T=Y(T^S,16),C=C+T|0,K=Y(K^C,12),S=S+K|0,T=Y(T^S,8),C=C+T|0,K=Y(K^C,7),A=A+F|0,H=Y(H^A,16),k=k+H|0,F=Y(F^k,12),A=A+F|0,H=Y(H^A,8),k=k+H|0,F=Y(F^k,7);let X=0;n[X++]=s+D|0,n[X++]=a+R|0,n[X++]=c+S|0,n[X++]=l+A|0,n[X++]=u+F|0,n[X++]=d+L|0,n[X++]=f+U|0,n[X++]=h+K|0,n[X++]=p+C|0,n[X++]=g+k|0,n[X++]=m+v|0,n[X++]=y+E|0,n[X++]=x+_|0,n[X++]=w+T|0,n[X++]=I+H|0,n[X++]=M+q|0}function iC(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],y=t[1],x=t[2],w=t[3];for(let M=0;M<20;M+=2)o=o+c|0,m=Y(m^o,16),f=f+m|0,c=Y(c^f,12),o=o+c|0,m=Y(m^o,8),f=f+m|0,c=Y(c^f,7),i=i+l|0,y=Y(y^i,16),h=h+y|0,l=Y(l^h,12),i=i+l|0,y=Y(y^i,8),h=h+y|0,l=Y(l^h,7),s=s+u|0,x=Y(x^s,16),p=p+x|0,u=Y(u^p,12),s=s+u|0,x=Y(x^s,8),p=p+x|0,u=Y(u^p,7),a=a+d|0,w=Y(w^a,16),g=g+w|0,d=Y(d^g,12),a=a+d|0,w=Y(w^a,8),g=g+w|0,d=Y(d^g,7),o=o+l|0,w=Y(w^o,16),p=p+w|0,l=Y(l^p,12),o=o+l|0,w=Y(w^o,8),p=p+w|0,l=Y(l^p,7),i=i+u|0,m=Y(m^i,16),g=g+m|0,u=Y(u^g,12),i=i+u|0,m=Y(m^i,8),g=g+m|0,u=Y(u^g,7),s=s+d|0,y=Y(y^s,16),f=f+y|0,d=Y(d^f,12),s=s+d|0,y=Y(y^s,8),f=f+y|0,d=Y(d^f,7),a=a+c|0,x=Y(x^a,16),h=h+x|0,c=Y(c^h,12),a=a+c|0,x=Y(x^a,8),h=h+x|0,c=Y(c^h,7);let I=0;n[I++]=o,n[I++]=i,n[I++]=s,n[I++]=a,n[I++]=m,n[I++]=y,n[I++]=x,n[I++]=w}var sC=t3(Q7,{counterRight:!1,counterLength:4,allowShortKeys:!1}),aC=t3(Q7,{counterRight:!1,counterLength:8,extendNonceFn:iC,allowShortKeys:!1});var cC=new Uint8Array(16),W7=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(cC.subarray(t))},lC=new Uint8Array(32);function G7(r,e,t,n,o){let i=r(e,t,lC),s=z7.create(i);o&&W7(s,o),W7(s,n);let a=new Uint8Array(16),c=F7(a);Jm(c,0,BigInt(o?o.length:0),!0),Jm(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return Yn(i,a),l}var Y7=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=jm(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=G7(r,e,t,c,n);return s.set(l,a),Yn(l),s},decrypt(i,s){s=jm(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=G7(r,e,t,a,n);if(!$7(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),Yn(l),s}}),n3=Zm({blockSize:64,nonceLength:12,tagLength:16},Y7(sC)),oX=Zm({blockSize:64,nonceLength:24,tagLength:16},Y7(aC));function Z7(r,e,t){return ai(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ao(r,qr(t),qr(e))}var o3=new Uint8Array([0]),X7=new Uint8Array;function j7(r,e,t,n=32){if(ai(r),po(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=X7);let i=new Uint8Array(o*r.outputLen),s=Ao.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)o3[0]=l+1,a.update(l===0?X7:c).update(t).update(o3).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),o3.fill(0),i.slice(0,n)}var i3={hashSHA256(r){return Ir(r.subarray())},getHKDF(r,e){let t=Z7(Ir,e,r),o=j7(Ir,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=La.utils.randomPrivateKey();return{publicKey:La.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:La.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return La.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return n3(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return n3(n,e,t).decrypt(r.subarray(),o)}};var J7=i3;function e9(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Hs=r=>{let e=Be(2);return e[0]=r>>8,e[1]=r,e};Hs.bytes=2;var _c=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};_c.bytes=2;function t9(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function s3(r,e){!e.enabled||!Ks||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${O(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${O(r.privateKey,"hex")}`)):e("Missing local static keys."))}function a3(r,e){!e.enabled||!Ks||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${O(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${O(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function r9(r,e){!e.enabled||!Ks||e(r?`REMOTE_STATIC_PUBLIC_KEY ${O(r.subarray(),"hex")}`:"Missing remote static public key.")}function c3(r,e){!e.enabled||!Ks||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${O(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function l3(r,e,t){!t.enabled||!Ks||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&O(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&O(e.k,"hex")}`))}function sr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Be(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var qs=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var uC=0,dC=4294967295,fC="Cipherstate has reached maximum n, a new handshake must be performed",Wd=class{n;bytes;view;constructor(e=uC){this.n=e,this.bytes=ae(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>dC)throw new Error(fC)}};var Oi=ae(0),zs=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Wd(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},u3=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=N(t,"utf-8");this.h=hC(e,n),this.ck=this.h,this.cs=new zs(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new zs(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ee(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,Oi);return[new zs(this.crypto,e),new zs(this.crypto,t)]}},d3=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new u3(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Cc=class extends d3{writeMessageA(e){return new ee(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ee(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ee(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new qs(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new qs(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new qs(`handshake stage 2 validation fail: ${t.message}`)}}};function hC(r,e){if(e.length<=32){let t=ae(32);return t.set(e),t}else return r.hash(e)}var Gd;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(Gd||(Gd={}));var kc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),Gd.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:ae(0),identitySig:ae(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=Gd.codec().decode(t,t.uint32());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(kc||(kc={}));async function f3(r,e,t){let n=await r.sign(n9(e));return kc.encode({identityKey:Ot(r.publicKey),identitySig:n,extensions:t})}async function h3(r,e,t){try{let n=kc.decode(r),o=rt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=n9(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new fl(n.message)}}function n9(r){let e=N("noise-libp2p-static-key:");return r instanceof Uint8Array?ke([e,r],e.length+r.length):(r.prepend(e),r)}async function o9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await f3(i,a.publicKey,l),d=new Cc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});s3(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Oi),e),t.trace("Stage 0 - Initiator finished sending first message."),a3(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),c3(d.re,t),r9(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await h3(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=d.ss.split();return l3(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(Oi,m),decrypt:(m,y)=>g.decryptWithAd(Oi,m,y)}}async function i9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await f3(i,a.publicKey,l),d=new Cc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});s3(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),c3(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),a3(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await h3(f,d.rs,c),[p,g]=d.ss.split();return l3(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(Oi,m),decrypt:(m,y)=>p.decryptWithAd(Oi,m,y)}}var a9=16;function c9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new ee(Hs(s.byteLength),s)}}}function l9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-a9<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-a9);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var Qd=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??J7;this.crypto=e9(c),this.extensions=o,this.metrics=a?t9(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ae(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Ae]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=An(e,{lengthEncoder:Hs,lengthDecoder:_c,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(s)}}async secureInbound(e,t){let n=An(e,{lengthEncoder:Hs,lengthDecoder:_c,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=rt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:xn(s)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await o9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await i9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=B7(),i=e.unwrap();return await ut(n,c9(t,this.metrics),i,s=>Tc(s,{lengthDecoder:_c}),l9(t,this.metrics),n),o}};function Yd(r={}){return e=>new Qd(e,r)}function Xd(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var an=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Ws=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Gs=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},Zd=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},jd=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},Jd=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},e1=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Qs=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var u9=new Set([an.name,Ws.name,Gs.name,jd.name,Jd.name,e1.name,Qs.name]),Rc=256*1024,d9=16*1024*1024;var f9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Rc,maxStreamWindowSize:d9,maxMessageSize:64*1024};function h9(r){if(r.keepAliveInterval<=0)throw new P("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new P("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new P("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Rc)throw new P("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new P("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new P("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new P("MaxMessageSize must be greater than a kilobyte")}var Je;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Je||(Je={}));var We;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(We||(We={}));var MZ=Object.values(We).filter(r=>typeof r!="string"),p9=0,Rr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Rr||(Rr={}));var Oo=12;var m9=2**24;function pC(r){if(r[0]!==p9)throw new an("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*m9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*m9+(r[9]<<16)+(r[10]<<8)+r[11]}}var t1=class{source;buffer;frameInProgress;constructor(e){this.source=mC(e),this.buffer=new ee,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Je.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new Zd("decoding frame already in progress");if(this.buffer.length<Oo)return;let e=pC(this.buffer.subarray(0,Oo));return this.buffer.consume(Oo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function mC(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function p3(r){let e=new Uint8Array(Oo);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function g9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function r1(r,e){let t=Xd(r).return?.();g9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var gC=5e3;function m3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Mo=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=J(),this.closed=J(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??gC,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Pt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new jo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);m3(o)&&await o}let n=()=>{r1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ee(o):o;let i=this.sendData(o,t);m3(i)&&(this.sendingData=J(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await et(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await et(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await et(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await et(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();m3(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new pl("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Dr;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Dr||(Dr={}));var n1=class extends Mo{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Dr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Rc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=vi(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Oo,e.length),o=this.getSendFlags();this.sendFrame({type:Je.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Je.WindowUpdate,flag:We.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|We.FIN;this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new Kt("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Qs("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&We.ACK)===We.ACK&&this.state===Dr.SYNSent&&(this.state=Dr.Established),(e&We.FIN)===We.FIN&&this.remoteCloseWrite(),(e&We.RST)===We.RST&&this.reset()}getSendFlags(){switch(this.state){case Dr.Init:return this.state=Dr.SYNSent,We.SYN;case Dr.SYNReceived:return this.state=Dr.Established,We.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Je.WindowUpdate,flag:e,streamID:this._id,length:o})}};var y9="/yamux/1.0.0",yC=500,o1=class{protocol=y9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Ae]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new g3(this._components,{...this._init,...e})}},g3=class{protocol=y9;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...f9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),h9(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Pt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=Xd(n);if(a.return!=null){let c=a.return();wC(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new t1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Rr.NormalTermination}catch(a){u9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Rr.ProtocolError):(this.log?.error("internal error in sink",a),i=Rr.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new lo("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Dr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new mn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new mn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new mn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Rr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(yC);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Rr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new P("Stream already exists with that id");let i=new n1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Je.Ping:{this.handlePing(e);return}case Je.GoAway:{this.handleGoAway(i);return}default:throw new an("Invalid frame type")}else switch(e.type){case Je.Data:case Je.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new an("Invalid frame type")}}handlePing(e){if(e.flag===We.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,We.ACK);else if(e.flag===We.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new an("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Ws("ping not requested");if(this.activePing.id!==e)throw new Gs("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Rr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&We.SYN)===We.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Je.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Je.WindowUpdate:{s.handleWindowUpdate(e);return}case Je.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new P("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Je.WindowUpdate,flag:We.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Je.WindowUpdate,flag:We.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Dr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Je.Data){if(t===void 0)throw new an("Invalid frame");this.source.push(new ee(p3(e),t))}else this.source.push(p3(e))}sendPing(e,t=We.SYN){t===We.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Je.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Rr.NormalTermination){this.log?.("sending GoAway reason=%s",Rr[e]),this.localGoAway=e,this.sendFrame({type:Je.GoAway,flag:0,streamID:0,length:e})}};function wC(r){return r!=null&&typeof r.then=="function"}function w9(r={}){return e=>new o1(e,r)}var bC=41;function i1(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===bC)return t7("2000::/3",t)}catch{}return!1}function s1(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function Lr(r){try{if(!s1(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:Qt(e)??!1}catch{}return!0}function b9(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=le([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}function Ge(r,e){let t=An(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var x9="libp2p",E9="autonat",v9="1.0.0";var $e;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>qe(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>qe(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),d.id!=null&&(f.uint32(10),f.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={addrs:[]},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.id=d.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');p.addrs.push(d.bytes());break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,f)=>te(d,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(d.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:h.limits?.peer});break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,f)=>te(d,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(d.status,f)),d.statusText!=null&&(f.uint32(18),f.string(d.statusText)),d.addr!=null&&(f.uint32(26),f.bytes(d.addr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,f)=>te(d,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,u)=>te(l,r.codec(),u)})($e||($e={}));var IC=4,TC=8,a1=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??x9}/${E9}/${v9}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=new Map,this.findPeers=b9(this.findRandomPeers.bind(this),6e4),this.addressFilter=rr(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Ae]=["@libp2p/autonat"];get[dr](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=le([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout);let n=Ge(e.stream,{maxDataLength:this.maxMessageSize}).pb($e);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=ve(a.id);s=it(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>$(d)).filter(d=>{let f=d.toOptions();return Lr(d)?!1:f.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(oe("p2p").code).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:$e.MessageType.DIAL_RESPONSE,dialResponse:{status:$e.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||o.multiaddr.toOptions().family===6&&(!t||!i1(o.multiaddr))||Lr(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:X2(),queue:new gt({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>s.toOptions().family===6),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=Ge(s).pb($e),[,c]=await Promise.all([a.write({type:$e.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==$e.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==$e.ResponseStatus.OK&&l!==$e.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===$e.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===$e.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===IC&&this.confirmAddress(o),o.failure===TC&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function S9(r={}){return e=>new a1(e,r)}var _C=z("dns4"),CC=z("dns6"),kC=z("dnsaddr"),Bi=nt(z("dns"),kC,_C,CC),u1=nt(z("ip4"),z("ip6")),Ys=nt(ie(u1,z("tcp")),ie(Bi,z("tcp"))),d1=ie(u1,z("udp")),PC=ie(d1,z("utp")),RC=ie(d1,z("quic")),DC=ie(d1,z("quic-v1")),y3=nt(ie(Ys,z("ws")),ie(Bi,z("ws"))),c1=nt(ie(y3,z("p2p")),y3),w3=nt(ie(Ys,z("wss")),ie(Bi,z("wss")),ie(Ys,z("tls"),z("ws")),ie(Bi,z("tls"),z("ws"))),l1=nt(ie(w3,z("p2p")),w3),b3=nt(ie(Ys,z("http")),ie(u1,z("http")),ie(Bi,z("http"))),x3=nt(ie(Ys,z("https")),ie(u1,z("https")),ie(Bi,z("https"))),A9=ie(d1,z("webrtc-direct"),z("certhash")),_9=nt(ie(A9,z("p2p")),A9),I9=ie(DC,z("webtransport"),z("certhash"),z("certhash")),C9=nt(ie(I9,z("p2p")),I9),k9=nt(ie(c1,z("p2p-webrtc-star"),z("p2p")),ie(l1,z("p2p-webrtc-star"),z("p2p")),ie(c1,z("p2p-webrtc-star")),ie(l1,z("p2p-webrtc-star"))),eJ=nt(ie(c1,z("p2p-websocket-star"),z("p2p")),ie(l1,z("p2p-websocket-star"),z("p2p")),ie(c1,z("p2p-websocket-star")),ie(l1,z("p2p-websocket-star"))),P9=nt(ie(b3,z("p2p-webrtc-direct"),z("p2p")),ie(x3,z("p2p-webrtc-direct"),z("p2p")),ie(b3,z("p2p-webrtc-direct")),ie(x3,z("p2p-webrtc-direct"))),Ui=nt(y3,w3,b3,x3,k9,P9,Ys,PC,RC,Bi,_9,C9),tJ=nt(ie(Ui,z("p2p-stardust"),z("p2p")),ie(Ui,z("p2p-stardust"))),Bo=nt(ie(Ui,z("p2p")),k9,P9,_9,C9,z("p2p")),T9=nt(ie(Bo,z("p2p-circuit"),Bo),ie(Bo,z("p2p-circuit")),ie(z("p2p-circuit"),Bo),ie(Ui,z("p2p-circuit")),ie(z("p2p-circuit"),Ui),z("p2p-circuit")),R9=()=>nt(ie(T9,R9),T9),Mi=R9(),D9=nt(ie(Mi,Bo,Mi),ie(Bo,Mi),ie(Mi,Bo),Mi,Bo);var rJ=nt(ie(Mi,z("webrtc"),z("p2p")),ie(Mi,z("webrtc")),ie(Ui,z("webrtc"),z("p2p")),ie(Ui,z("webrtc")),z("webrtc"));function L9(r){function e(t){let n;try{n=$(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function ie(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:L9(e),partialMatch:e}}function nt(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:L9(e),partialMatch:e}}function z(r){let e=r;function t(o){let i;try{i=$(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var LC="bootstrap",NC=50,OC=1e3,E3=class extends me{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??OC,this.list=[];for(let n of t.list){if(!D9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=$(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ve(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[Xo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Ae]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??LC]:{value:this._init.tagValue??NC,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function N9(r){return e=>new E3(e,r)}var Dc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ae(0),payloadType:ae(0),payload:ae(0),signature:ae(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Dc||(Dc={}));var f1=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var xr=class r{static createFromProtobuf=async e=>{let t=Dc.decode(e),n=rt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=O9(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new f1("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Dc.encode({publicKey:Ot(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return j(this.marshal(),e.marshal())}async validate(e){let t=O9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},O9=(r,e,t)=>{let n=N(r),o=De(n.byteLength),i=De(e.length),s=De(t.length);return new ee(o,n,i,e,s,t)};function M9(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var B9="libp2p-peer-record",U9=Uint8Array.from([3,1]);var Lc;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=ne((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:ae(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>re(i,n.codec()),n.decode=(i,s)=>te(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:ae(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new Ue('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>re(n,r.codec()),r.decode=(n,o)=>te(n,r.codec(),o)})(Lc||(Lc={}));var Yt=class r{static createFromProtobuf=e=>{let t=Lc.decode(e),n=it(ve(t.peerId)),o=(t.addresses??[]).map(s=>$(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=B9;static CODEC=U9;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Lc.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!M9(this.multiaddrs,e.multiaddrs))}};var v3=1e3,F9=60*v3,V9=290;var OJ=2*60*F9,$9=1,h1=2e3,K9=100;var Nc=`${io}-circuit-relay`,MJ=`${io}-circuit-relay-source`,BJ=2*F9,UJ=BigInt(1<<17),Fi="/libp2p/circuit/relay/0.2.0/hop",S3="/libp2p/circuit/relay/0.2.0/stop",FJ=30*v3,VJ=30*v3,A3=300,H9=4096,q9=.001;var Uo;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Xs.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),p1.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),Zs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),Et.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Xs.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=p1.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=Zs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=Et.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(Uo||(Uo={}));var In;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Xs.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),Zs.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),Et.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Xs.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=Zs.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=Et.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(In||(In={}));var Xs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ae(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Xs||(Xs={}));var p1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),g1.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Ue('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=g1.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(p1||(p1={}));var Zs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Zs||(Zs={}));var Et;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(Et||(Et={}));var I3;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(I3||(I3={}));(function(r){r.codec=()=>qe(I3)})(Et||(Et={}));var m1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:ae(0),peer:ae(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(m1||(m1={}));var g1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),m1.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ae(0),payloadType:ae(0),signature:ae(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=m1.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(g1||(g1={}));var Oc=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},y1=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},w1=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function T3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Mc=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},b1=Re(ge(sd.matchers[0],pe("p2p-circuit"))),x1=Re(pe("p2p-circuit"));function _3(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let u=e.abort.bind(e);e.abort=p=>{u(p),h(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(ut(p,g=>vi(g,m=>i?.(m))))}catch(g){g.type!=="aborted"&&s.error("%s error in sink",t,g)}finally{c=!0,h()}};let f={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var E1=class extends me{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Fi,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Fi)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=z9(n),s=z9(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new gt({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(async()=>{let o=le([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function z9(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(O(e)).getTime()}var C3=class extends me{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??h1,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(x1.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(b1.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new Jo(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>$(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function W9(r){return new C3(r)}var G9="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Q9=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=G9[t[r]&63];return e};var MC=60*1e3*10,BC=60*1e3*5,UC=30*1e3,v1=class extends me{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new ft,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??K9,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??h1,this.started=!1,this.relayFilter=rr(100),this.reserveQueue=new gt({concurrency:t?.reservationConcurrency??$9,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Nc)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Nc]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=Q9();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new Jo("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new w1("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new Jo("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let p=this.connectionManager.getConnections(e),g=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&T3(i.reservation.expire)>MC)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Oc("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(or.matches(a.remoteAddr))throw new y1("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=T3(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-BC,UC),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Oc("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Nc]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Fi,t),i=Ge(n).pb(Uo);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Uo.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %o",s),s.status===Et.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=$(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=$(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>$(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[Nc]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=rr(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var FC=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach($)}catch{return!1}return!0},Y9={maxInboundStopStreams:A3,maxOutboundStopStreams:A3,stopTimeout:3e4},S1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??Y9.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??Y9.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new E1(e,{filter:t.discoveryFilter??tp(H9,q9)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,o)})}),this.reservationStore=new v1(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Ae]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[dr](){return this.discovery!=null?["@libp2p/identify"]:[]}[so]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(S3,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await mt(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await kt(this.discovery,this.reservationStore),await this.registrar.unhandle(S3),this.started=!1}async dial(e,t){if(e.protoCodes().filter(h=>h===V9).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new Rn(h)}let n=e.toString().split("/p2p-circuit"),o=$(n[0]),i=$(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new Rn(`C${h}`)}let c=Ve(s),l=Ve(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new W("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new W("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new W("circuit-relay:open-hop-stream")),f=await d.newStream(Fi,t);let h=Ge(f),p=h.pb(Uo);t.onProgress?.(new W("circuit-relay:write-connect-message")),await p.write({type:Uo.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[$(i).bytes]}},t),t.onProgress?.(new W("circuit-relay:read-connect-response"));let g=await p.read(t);if(g.status!==Et.OK)throw new he(`failed to connect via relay with status ${g?.status?.toString()??"undefined"}`);let m=new Mc(g.limit),y=_3({stream:h.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:m.onData,onDataWrite:m.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:m.getLimits()})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),f?.abort(h),h}}createListener(e){return W9({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>b1.exactMatch(t)||x1.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>or.exactMatch(t))}async onStop({connection:e,stream:t},n){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let o=Ge(t).pb(In),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==In.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!FC(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=it(ve(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:In.Type.STATUS,status:Et.OK},{signal:n});let a=new Mc(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=_3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function k3(r={}){return e=>new S1(e,r)}var X9=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},VC=new WeakMap;function $C({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(X9());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(X9())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((f,h)=>{s=()=>{u(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),VC.set(d,()=>{c(i),i=null,s()}),d}}var KC=$C(),A1=KC;var cn;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new Ue('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(cn||(cn={}));function P3(r,e){return or.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:mc.matches(r)?!0:K5.matches(r)?Qt(r.toOptions().host)===!1:!1}var Z9=1024*4,j9=100,I1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},T1=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??I1.timeout,this.retries=t.retries??I1.retries,this.maxInboundStreams=t.maxInboundStreams??I1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??I1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[dr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Bc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{or.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Bc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Bc),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Bc],{signal:o.signal,runOnLimitedConnection:!0});let i=Ge(t,{maxDataLength:Z9}).pb(cn);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==cn.Type.CONNECT)throw this.log("A sent wrong message type"),new he("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new he("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:cn.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await A1(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:j9,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>P3(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(or.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=Ge(e,{maxDataLength:Z9}).pb(cn);this.log("A receiving connect");let i=await o.read(n);if(i.type!==cn.Type.CONNECT)throw this.log("B sent wrong message type"),new he("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new he("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new he("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:cn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==cn.Type.SYNC)throw new he("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:j9,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=$(n);if(!P3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Bc="/libp2p/dcutr";function J9(r={}){return e=>new T1(e,r)}var _1=globalThis.CustomEvent??Event;async function*ln(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=J(),a=J(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=J(),await s.promise),u)break;let g={done:!1};i.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new _1("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new _1("task-complete"))})}c=!0,o.dispatchEvent(new _1("task-complete"))}catch(p){l=p,o.dispatchEvent(new _1("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;d();)for(let p=0;p<i.length;p++)if(i[p].done){let g=i[p];if(i.splice(p,1),p--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(d()||(a=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var ey="0.1.0",ty="id",ry="id/push",ny="1.0.0",oy="1.0.0";var Fo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new Ue('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new Ue('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Fo||(Fo={}));var ar={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function iy(r){if(r!=null&&r.length>0)try{return $(r)}catch{}}function zC(r,e){return e??r.userAgent}async function C1(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new he("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:$(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=rt(o.publicKey);if(!xn(c).equals(n.remotePeer))throw new he("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await xr.openAndCertify(c,Yt.DOMAIN),u=Yt.createFromProtobuf(l.payload),d=Qr(l.publicKey.toCID());if(!u.peerId.equals(d))throw new he("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new he("signing key does not match remote PeerId");let f;try{f=await r.get(u.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await xr.createFromProtobuf(f.peerRecordEnvelope),p=Yt.createFromProtobuf(h.payload);p.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,u.seqNumber),u=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:u.seqNumber,addresses:u.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=N(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=N(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>$(c)),observedAddr:o.observedAddr==null?void 0:$(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var js=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??ar.timeout,this.maxInboundStreams=t.maxInboundStreams??ar.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??ar.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??ar.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??ar.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??ar.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??ar.protocolPrefix}/${ey}`,agentVersion:zC(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:N(this.host.agentVersion),ProtocolVersion:N(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var k1=class extends js{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${ry}/${oy}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??ar.concurrency,(t.runOnSelfUpdate??ar.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Ae]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(oe("p2p").code)),t=new Yt({peerId:this.peerId,multiaddrs:e}),n=await xr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=O(i.metadata.get("AgentVersion")??N(this.host.agentVersion)),a=O(i.metadata.get("ProtocolVersion")??N(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await Ge(f,{maxDataLength:c.maxMessageSize}).pb(Fo).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await Rt(ln(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await Ge(n,{maxDataLength:this.maxMessageSize}).pb(Fo).read(o);await n.close(o),await C1(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var WC=41,P1=class extends js{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??ar.protocolPrefix}/${ty}/${ny}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??ar.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Pn.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Ae]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await Ge(n,{maxDataLength:this.maxMessageSize}).pb(Fo).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new he("public key was missing from identify message");let a=rt(o),c=Qr(a.toCID());if(!e.remotePeer.equals(c))throw new he("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new he("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),C1(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=iy(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Lr(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===WC&&!i1(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ti.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(oe("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new Yt({peerId:this.peerId,multiaddrs:s});a=(await xr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;$5.matches(t.remoteAddr)||(c=void 0),await Ge(n).pb(Fo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Ot(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function sy(r={}){return e=>new P1(e,r)}function ay(r={}){return e=>new k1(e,r)}var Js=1e3,R3=60*Js,R1=60*R3,cy=36*R1,ly="/ipfs/kad/1.0.0",uy=48*R1;var dy=24*R1,fy=10,hy=16384,py=R1,Jte=10*Js;var D1=20,ea=3,my=5*R3,gy=Js,yy=5*Js,wy=5*R3,by=30*Js,xy=180*Js,D3=`${io}-kad-dht`;var Uc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:ae(0),value:ae(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Uc||(Uc={}));function Ey(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function vy(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var vt=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Uc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Ey(this.timeReceived)}}static deserialize(e){let t=Uc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=vy(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var Vo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},L1=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},N1=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},O1=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Sy;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sy||(Sy={}));var xe;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(xe||(xe={}));var M1;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(M1||(M1={}));(function(r){r.codec=()=>qe(M1)})(xe||(xe={}));var ra;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(ra||(ra={}));var L3;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(L3||(L3={}));(function(r){r.codec=()=>qe(L3)})(ra||(ra={}));var ta;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),ra.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ae(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new Ue('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=ra.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ta||(ta={}));var Xn;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&M1[t.type]!==0&&(n.uint32(8),xe.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),ta.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),ta.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:xe.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=xe.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new Ue('Decode error - map field "closer" had too many elements');i.closer.push(ta.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new Ue('Decode error - map field "providers" had too many elements');i.providers.push(ta.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Xn||(Xn={}));function N3(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Fc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function B1(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Er(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function O3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Vc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function M3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Ay(r,e,t){if(t.length===0)throw new P("No records given");let o=O(e).split("/");if(o.length<3)throw new P("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new O1(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function QC(r,e){return 0}var Iy={pk:QC};async function na(r,e){let t=e.key,o=O(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new P(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var YC=async(r,e)=>{if(!(r instanceof Uint8Array))throw new P('"key" must be a Uint8Array');if(r.byteLength<5)throw new P("Invalid public key record");if(O(r.subarray(0,4))!=="/pk/")throw new P("key was not prefixed with /pk/");let n=rt(e),o=r.slice(4);if(!j(o,n.toMultihash().bytes))throw new P("public key does not match passed in key")},Ty={pk:YC};var XC=N("/pk/");function _y(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Qt(n);return o==null?!0:!o})}}async function $o(r){return(await Qe.digest(r)).digest}async function St(r){return $o(r.toMultihash().bytes)}function Ko(r,e){return new Ne(`${r}/${O(e,"base32")}`,!1)}function Cy(r){return ke([XC,r.toMultihash().bytes])}function ky(r){return O(r.subarray(0,4))==="/pk/"}function Py(r){let e=ve(r.subarray(4));return it(e)}function B3(r,e){let t=new Date;return new vt(r,e,t).serialize()}var ZC=290,jC=54,JC=55,ek=56,tk=4,rk=41;function Ry(r){let e=r.stringTuples();for(let t of e)if(t[0]===ZC)return!1;if(e[0][0]===jC||e[0][0]===JC||e[0][0]===ek)return!0;if(e[0][0]===tk||e[0][0]===rk){let t=Qt(`${e[0][1]}`);return t==null||!t}return!1}function U1(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:Q.createV1(ri,ve(N(n,"base32"))),peerId:Ve(t)}}function F1(r,e,t){let n=typeof e=="string"?e:O(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new Ne(o.join("/"))}function V1(r){return new Date(yt(r))}function Vi(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function $1(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var K1=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Ko(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=vt.deserialize(n);return await na(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=B3(e,n);for(let{value:s,from:a}of t){if(j(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Ko(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:xe.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&j(u.record.value,vt.deserialize(i).value)&&(c=!0),yield u;c||(yield Er({from:a,error:new Vo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=B3(e,t),i=Ko(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*ut(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:xe.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&j(u.record.value,vt.deserialize(o).value)||c.push(Er({from:a.peer.id,error:new Vo("Value not put correctly")},n)));return c}),s=>ln(s,{ordered:!1,concurrency:ea}),async function*(s){for await(let a of s)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=Ay(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Ce("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield Vc({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield Vc({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function Dy(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function $c(r){if(r.id==null)throw new Error("Invalid peer in message");let e=ve(r.id);return{id:it(e),multiaddrs:(r.multiaddrs??[]).map(t=>$(t))}}var H1=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:xe.ADD_PROVIDER,key:o,providers:[Dy({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Er({from:c.peer.id,error:u},n))}return l};yield*ut(this.peerRouting.getClosestPeers(o,n),c=>jt(c,l=>a(l)),c=>ln(c,{ordered:!1,concurrency:ea}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield Fc({from:this.components.peerId,messageType:xe.GET_PROVIDERS,providers:u},t),yield O3({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let f={type:xe.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,f,{...t,signal:d})},l=new Wt(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield O3({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var oa=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var ok=1.2,ik=2,sk=2e3,un=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new oa(e.interval??5e3),this.failure=new oa(e.interval??5e3),this.next=new oa(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??ik,this.timeoutMultiplier=e.timeoutMultiplier??ok,this.minTimeout=e.minTimeout??sk,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=le([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var q1=class extends me{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new un({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new P("Message type was missing");this.log("sending %s to %p",t.type,e),yield M3({peer:e},n),yield N3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Fc({from:e,messageType:c.type,closer:c.closer.map($c),providers:c.providers.map($c),record:c.record==null?void 0:vt.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new P("Message type was missing");this.log("sending %s to %p",t.type,e),yield M3({peer:e},n),yield N3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Fc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await Ge(e).write(t,Xn,n)}async _writeReadMessage(e,t,n){let o=Ge(e);await o.write(t,Xn,n);let i=await o.read(Xn,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:$c(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:$c(s)})}),i}};function Ho(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var qo=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await St(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:sr(this.originDhtKey,t)},o=!1;for(let i=0;i<this.peerDistances.length;i++){let s=Ho(this.peerDistances[i].distance,n.distance);if(s===0||s===1){o=!0,this.peerDistances.splice(i,0,n);break}}o||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await St(e),n=sr(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Ho(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var z1=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:xe.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=Cy(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=rt(o.record.value),s=xn(i);if(!s.equals(e))throw new kn("public key does not match id");if(s.publicKey==null)throw new kn("public key missing");yield Vc({from:e,value:o.record.value},t)}throw new Vo(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield B1({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:xe.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield B1({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Er({from:this.peerId,error:new Ce("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await $o(e),o=this.routingTable.closestPeers(n),i=this,s=new qo(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",O(e,"base32"),c);let u={type:xe.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield B1({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield Er({from:o.from,error:new Vo(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new N1("invalid record received");await na(this.validators,new vt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=ve(e),l=it(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await $o(e),i=this.routingTable.closestPeers(o),s=await St(t),a=sr(s,o);for(let c of i){let l=await St(c),u=sr(l,o);if(Ho(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:f})=>f)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var W1=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=F1(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=F1(this.datastorePrefix,e,t),i=De(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new ft,n=F1(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=U1(o.key);t.set(i,V1(o.value))}return t}};async function*Ly(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:f}=r,h=new Ht({concurrency:s,sort:(m,y)=>Ho(m.options.distance,y.options.distance)}),p=await $o(e);function g(m,y){if(m==null)return;d.add(m);let x=sr(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let I=le(w);try{for await(let M of i({...r,key:e,peer:m,signal:I,pathIndex:a,numPaths:c})){if(I.aborted)return;if(M.name==="PEER_RESPONSE")for(let D of M.closer){if(d.has(D.id)){u.trace("already seen %p in query",D.id);continue}if(n.equals(D.id)){u("not querying ourselves");continue}if(!await f.isDialable(D.multiaddrs)){u("not querying undialable peer");continue}let R=await St(D.id),S=sr(R,p);if(Ho(S,x)!==-1){u.trace("skipping %p as they are not closer to %b than %p",D.id,e,m);continue}u.trace("querying closer peer %p",D.id),g(D.id,R)}h.safeDispatchEvent("completed",{detail:M})}}catch(M){if(!o.aborted)return Er({from:m,error:M},r)}finally{I.clear()}},{distance:x}).catch(w=>{u.error(w)})}g(t,await St(t));try{for await(let m of h.toGenerator({signal:o}))m!=null&&(yield m)}catch(m){throw o.aborted?new L1("Query aborted"):m}}var G1=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??D1,this.alpha=t.alpha??ea,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(xy);n={...n,signal:c}}let o=new AbortController,i=le([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+O(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await et(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await $o(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new Wt,f=u.map((h,p)=>Ly({...n,key:e,startingPeer:h,ourPeerId:this.peerId,signal:i,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of qt(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield h}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function ak(r){return r[Symbol.asyncIterator]!=null}function ck(r){if(ak(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var Q1=ck;var lk=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function uk(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=lk(r),d=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),i(c)))},f=h=>{n(),s(h)};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Xr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function Ny(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=uk(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var Y1=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??D1,this.interval=t.interval??my,this.initialInterval=t.initialInterval??gy,this.queryTimeout=t.queryTimeout??yy,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=$1(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=J(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=le(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await Ny(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await ut(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>uo(i,this.count),async i=>Q1(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var X1=class extends me{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Ht({concurrency:t.concurrency??fy,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new un({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??dy,this.maxQueueSize=t.maxQueueSize??hy,this.validity=t.validity??uy,this.interval=t.interval??py,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=$1(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=U1(t.key),i=V1(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Rt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var dk=20,fk=5e3,hk="kad-close",pk=50,Z1=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??fk,this.peerSetSize=t.peerSetSize??dk,this.closeTagName=t.closeTagName??hk,this.closeTagValue=t.closeTagValue??pk,this.closestPeers=new Wt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await St(this.components.peerId);this.newPeers=new qo(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new Wt(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[D3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[D3]:void 0}})})])}};function Kc(r){return Array.isArray(r?.peers)}var j1=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??Oy,this.kBucketSize=e.kBucketSize??U3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??My,this.lastPingThreshold=e.lastPingThreshold??By,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new ft,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await St(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await St(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!gk(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new qo(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*jt(n.peers,o=>o.id)}count(){function e(t){if(Kc(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(Kc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+O(sr(e,t),"base16"))}_determineBucket(e){let t=O(e,"base2");function n(o,i=0){return Kc(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>j(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)O(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));mk(e,t,n)}};function mk(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function gk(r,e){return r.lastPing<Date.now()-e}var U3=20,Oy=6;var yk=20,wk=100,My=3;var bk=20,xk=100,Uy="kad-peer",Ek=1,By=6e5,vk=!0,Sk=1e3,J1=class extends me{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??U3,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Uy,this.peerTagValue=t.peerTagValue??Ek,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??vk,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??Sk,this.pingOldContactQueue=new gt({concurrency:t.pingOldContactConcurrency??bk,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??xk}),this.pingOldContactTimeout=new un({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new gt({concurrency:t.pingNewContactConcurrency??yk,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??wk}),this.pingNewContactTimeout=new un({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new j1({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Z1(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await mt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Uy)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await kt(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=le([c,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of ln(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=le([n,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:xe.PING},t))if(o.type===ef.PEER_RESPONSE)return o.messageType===xe.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await St(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await St(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Kc(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Fy=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var tf=15,rf=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??wy,this.refreshQueryTimeout=s??by,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Q1(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>tf&&(e=tf);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=zt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=ve(o);return it(i)}async _makePeerId(e,t,n){if(n>tf)throw new Error(`Cannot generate peer ID for common prefix length greater than ${tf}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=Fy[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,Qe.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=sr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var nf=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new he("Missing key");let n;try{n=Q.decode(t.key)}catch{throw new he("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=ve(o.id),s=it(i),a=o.multiaddrs.map(c=>$(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var of=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new he("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);j(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(oe("p2p").code))});let o={type:xe.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var sf=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new he("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=Q.decode(t.key)}catch{throw new he("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Ri(jt(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:xe.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var af=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new he("Invalid key");let o={type:xe.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(ky(n)){this.log("is public key");let a=Py(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Ce("No public key found in key book");c=Ot(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new vt(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Ko(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=vt.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>cy){await this.datastore.delete(t);return}return o}};var cf=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var lf=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new he(o)}try{let o=vt.deserialize(t.record);await na(this.validators,o),o.timeReceived=new Date;let i=Ko(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var uf=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[xe.GET_VALUE.toString()]:new af(e,t),[xe.PUT_VALUE.toString()]:new lf(e,t),[xe.FIND_NODE.toString()]:new of(e,t),[xe.ADD_PROVIDER.toString()]:new nf(e,t),[xe.GET_PROVIDERS.toString()]:new sf(e,t),[xe.PING.toString()]:new cf(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await ut(n,a=>Dn(a),async function*(a){for await(let c of a){let l=Xn.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield Xn.encode(u))}},a=>Vr(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var df=class extends me{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var F3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Rt(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Rt(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new Ce("Could not find value for key")}},V3=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new Ce("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},Ak=32,Ik=64,ff=class extends me{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??ly,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??Ak,this.maxOutboundStreams=t.maxOutboundStreams??Ik,this.peerInfoMapper=t.peerInfoMapper??_y;let a=Ei();this.providers=new W1(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...Ty,...t.validators},this.selectors={...Iy,...t.selectors},this.network=new q1(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new J1(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=J();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new G1(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new z1(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new K1(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new H1(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new rf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new uf(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new df(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new Y1(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new X1(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),f={id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h),protocols:d.protocols};await this.onPeerConnect(f)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new V3(this),this.dhtContentRouting=new F3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:f})=>Ry(f)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Vi(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Vi(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Vi(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Vi(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Vi(this.provide.bind(this),s,"PROVIDE"),this.put=Vi(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Ae]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[dr]=["@libp2p/identify"];get[hn](){return this.dhtContentRouting}get[pn](){return this.dhtPeerRouting}get[Xo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await mt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await mt(this.querySelf))}async stop(){this.running=!1,await kt(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var ef;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(ef||(ef={}));function Vy(r={}){return e=>new ff(e,r)}var Yy=Br(Qy(),1),aa=Yy.default;var Xw=Br(ow(),1);var ca={};Xe(ca,{create:()=>Hk,derivedEmptyPasswordKey:()=>mf});var mf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Hk(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=tr.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=N(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",mf,{name:"AES-GCM"},!0,["encrypt"]);try{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",mf,{name:"AES-GCM"},!0,["encrypt"])}}else{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(g,m,d);return ke([h,g.iv,new Uint8Array(y)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),g=d.subarray(i+n),m={name:e,iv:p};typeof f=="string"&&(f=N(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",mf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}let x=await a.subtle.decrypt(m,y,g);return new Uint8Array(x)}return{encrypt:c,decrypt:l}}var ye=Br(iw());function $i(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function zo(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function wf(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function H3(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=$i(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,$i(i,8)-n}function sw(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=zo(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=zo(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function aw(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function cr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var gse=Math.log(2);function bf(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function q3(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function ro(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var qc=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return q3(this.items)}},Hc=[new Uint8Array([1])],cw="0123456789";var ua="",dn=new ArrayBuffer(0),z3=new Uint8Array(0),zc="EndOfContent",uw="OCTET STRING",dw="BIT STRING";function no(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?ye.BufferSourceConverter.toUint8Array(i.valueHex):z3}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!ro(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",dn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var jn=class{constructor({blockLength:e=0,error:t=ua,warnings:n=[],valueBeforeDecode:o=z3}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};jn.NAME="baseBlock";var Ft=class extends jn{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Ft.NAME="valueBlock";var xf=class extends no(jn){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):z3,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",dn}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=zo(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let f=new Uint8Array(u);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let f=0;f<c;f++)d[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=$i(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};xf.NAME="identificationBlock";var Ef=class extends jn{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=$i(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=zo(this.length,8);if(o.byteLength>127)return this.error="Too big length",dn;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};Ef.NAME="lengthBlock";var G={},At=class extends jn{constructor({name:e=ua,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new xf(o),this.lenBlock=new Ef(o),this.valueBlock=i?new i(o):new Ft(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new qc;t||fw(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?dn:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return aw(t,n)}};At.NAME="BaseBlock";function fw(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)fw(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var vf=class extends At{constructor({value:e=ua,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};vf.NAME="BaseStringBlock";var Sf=class extends no(Ft){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};Sf.NAME="PrimitiveValueBlock";var hw,Af=class extends At{constructor(e={}){super(e,Sf),this.idBlock.isConstructed=!1}};hw=Af;G.Primitive=hw;Af.NAME="PRIMITIVE";function jk(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function oh(r,e=0,t=r.length){let n=e,o=new At({},Ft),i=new jn;if(!ro(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=At;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?G.Constructed:G.Primitive}return o=jk(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function ih(r){if(!r.byteLength){let e=new At({},Ft);return e.error="Input buffer has zero length",{offset:-1,result:e}}return oh(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function Jk(r,e){return r?1:e}var Tn=class extends Ft{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;Jk(this.isIndefiniteForm,n)>0;){let s=oh(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===zc)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===zc?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new qc;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?dn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};Tn.NAME="ConstructedValueBlock";var pw,Wo=class extends At{constructor(e={}){super(e,Tn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
14
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),MU=new RegExp(`(?:^${Do}$)|(?:^${t0}$)`),UU=new RegExp(`^${Do}$`),FU=new RegExp(`^${t0}$`),s8=r=>r&&r.exact?MU:new RegExp(`(?:${Rs(r)}${Do}${Rs(r)})|(?:${Rs(r)}${t0}${Rs(r)})`,"g");s8.v4=r=>r&&r.exact?UU:new RegExp(`${Rs(r)}${Do}${Rs(r)}`,"g");s8.v6=r=>r&&r.exact?FU:new RegExp(`${Rs(r)}${t0}${Rs(r)}`,"g");var a8=s8;function c8(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function mA(){return!1}var{toString:$U}=Object.prototype;function l8(r){return $U.call(r)==="[object RegExp]"}var gA={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function u8(r,e={}){if(!l8(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(gA).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?gA[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function f8(r,e,{timeout:t}={}){try{return c8(()=>u8(r).test(e),{timeout:t})()}catch(n){if(mA(n))return!1;throw n}}var KU=15,VU=45,yA={timeout:400};function d8(r){return r.length>VU?!1:f8(a8.v6({exact:!0}),r,yA)}function wA(r){return r.length>KU?!1:f8(a8.v4({exact:!0}),r,yA)}var bA={http:"80",https:"443",ws:"80",wss:"443"},HU=["http","https","ws","wss"];function xA(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i,path:s}=qU(r),a=[jU(o,t),WU(i,n),GU(n)];s!=null&&a.push(zU(s));let c="/"+a.filter(l=>!!l).reduce((l,u)=>l.concat(u),[]).join("/");return ne(c)}function qU(r){let[e]=r.split(":");HU.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:i,search:s}=new URL(r);if(o==null||o===""){let c=XU(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return i!=null&&i!==""&&i!=="/"&&(i.startsWith("/")&&(i=i.substring(1)),a=i),s!=null&&s!==""&&(a=a??"",a+=s),{scheme:e,hostname:n,port:o,path:a}}function jU(r,e){if(!(r==null||r==="")){if(wA(r))return["ip4",r];if(d8(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(d8(t))return["ip6",t]}return[e,r]}}function WU(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function GU(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function zU(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function XU(r){if(!(r==null||r===""||bA[r]==null))return bA[r]}var YU=["https://trustless-gateway.link","https://4everland.io"],QU=2336;function ZU(r){return r=r.toString(),{id:Co(le.createV1(QU,Pr.digest(H(r)))),multiaddrs:[xA(r)]}}var h8=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??YU).map(t=>ZU(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function p8(r={}){return new h8(r)}var m8=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function g8(r){return new m8(r)}var Bd=class extends ki{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(Gt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(Gt.encode(e.multihash.bytes));if(t==null)throw new Hn;return t}has(e){return this.data.has(Gt.encode(e.multihash.bytes))}async delete(e){this.data.delete(Gt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:le.createV1(va,Xe(Gt.decode(e))),block:t}}};var cae=_n("blockstore:core:tiered");var SA="SHARDING";function eF(r){return r[Symbol.asyncIterator]!=null}function tF(r){if(eF(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var ic=tF;function rF(r){return r[Symbol.asyncIterator]!=null}function nF(r,e){return rF(r)?async function*(){yield*(await ic(r)).sort(e)}():function*(){yield*ic(r).sort(e)}()}var r0=nF;var Ui=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 Rr(this.putMany(e,n)),e=[],await Rr(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=bo(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>bo(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>r0(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=bo(n,()=>o++>=i)}return e.limit!=null&&(n=ks(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=bo(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>bo(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>r0(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=bo(n,()=>i++>=o)}return e.limit!=null&&(n=ks(n,e.limit)),n}};var sc=class extends Ui{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Hn;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 it(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new it(e)}};var Kae=new it(SA);var tce=_n("datastore:core:tiered");var DA=$t(NA(),1),fu=DA.default;var R_=$t(VA(),1);var du={};Ct(du,{create:()=>vF,derivedEmptyPasswordKey:()=>i0});var i0={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function vF(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=tn.get();t*=8;async function c(f,h){let m=a.getRandomValues(new Uint8Array(i)),g=a.getRandomValues(new Uint8Array(n)),w={name:e,iv:g};typeof h=="string"&&(h=H(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",i0,{name:"AES-GCM"},!0,["encrypt"]);try{let I={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(I,v,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",i0,{name:"AES-GCM"},!0,["encrypt"])}}else{let I={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(I,v,{name:e,length:t},!0,["encrypt"])}let x=await a.subtle.encrypt(w,y,f);return st([m,w.iv,new Uint8Array(x)])}async function l(f,h){let m=f.subarray(0,i),g=f.subarray(i,i+n),w=f.subarray(i+n),y={name:e,iv:g};typeof h=="string"&&(h=H(h));let x;if(h.length===0)try{let v={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},R=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);x=await a.subtle.deriveKey(v,R,{name:e,length:t},!0,["decrypt"])}catch{x=await a.subtle.importKey("jwk",i0,{name:"AES-GCM"},!0,["decrypt"])}else{let v={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},R=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);x=await a.subtle.deriveKey(v,R,{name:e,length:t},!0,["decrypt"])}let I=await a.subtle.decrypt(y,x,w);return new Uint8Array(I)}return{encrypt:c,decrypt:l}}var Yn={};Ct(Yn,{Any:()=>ci,BaseBlock:()=>qt,BaseStringBlock:()=>$d,BitString:()=>Oo,BmpString:()=>uc,Boolean:()=>cc,CharacterString:()=>bc,Choice:()=>mu,Constructed:()=>Xt,DATE:()=>Wd,DateTime:()=>zd,Duration:()=>Xd,EndOfContent:()=>Kd,Enumerated:()=>lc,GeneralString:()=>wc,GeneralizedTime:()=>xc,GraphicString:()=>yc,HexBlock:()=>li,IA5String:()=>gc,Integer:()=>Dn,Null:()=>ln,NumericString:()=>dc,ObjectIdentifier:()=>On,OctetString:()=>Mr,Primitive:()=>Vi,PrintableString:()=>hc,RawData:()=>v8,RelativeObjectIdentifier:()=>jd,Repeated:()=>vc,Sequence:()=>Et,Set:()=>un,TIME:()=>Yd,TeletexString:()=>pc,TimeOfDay:()=>Gd,UTCTime:()=>Ls,UniversalString:()=>fc,Utf8String:()=>Xn,ValueBlock:()=>dr,VideotexString:()=>mc,ViewWriter:()=>pu,VisibleString:()=>Os,compareSchema:()=>Ds,fromBER:()=>Ln,verifySchema:()=>VF});var Me=$t($i());function ac(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 Ns(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let f=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/f),o-=l[i-u-1]*f}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function c0(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function b8(){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=ac(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,ac(i,8)-n}function HA(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=Ns(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Ns(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function qA(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 an(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var Pce=Math.log(2);function l0(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function E8(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function Hi(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var pu=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return E8(this.items)}},Md=[new Uint8Array([1])],jA="0123456789",x8="name",WA="valueHexView",PF="isHexOnly",RF="idBlock",NF="tagClass",DF="tagNumber",OF="isConstructed",LF="fromBER",BF="toBER",MF="local",cn="",Lo=new ArrayBuffer(0),A0=new Uint8Array(0),Fd="EndOfContent",zA="OCTET STRING",XA="BIT STRING";function li(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?Me.BufferSourceConverter.toUint8Array(i.valueHex):A0}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Hi(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Lo)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Ki=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=cn,warnings:n=[],valueBeforeDecode:o=A0}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Me.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Me.Convert.ToHex(this.valueBeforeDecodeView)}}};Ki.NAME="baseBlock";var dr=class extends Ki{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};dr.NAME="valueBlock";var u0=class extends li(Ki){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Me.BufferSourceConverter.toUint8Array(e.valueHex):A0,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Lo}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Ns(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let h=new Uint8Array(u);for(let m=0;m<l.length;m++)h[m]=l[m];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let f=new Uint8Array(c);for(let h=0;h<c;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(c),l.set(f),this.blockLength<=9?this.tagNumber=ac(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}}};u0.NAME="identificationBlock";var f0=class extends Ki{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=ac(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=Ns(this.length,8);if(o.byteLength>127)return this.error="Too big length",Lo;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};f0.NAME="lengthBlock";var ce={},qt=class extends Ki{constructor({name:e=cn,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new u0(o),this.lenBlock=new f0(o),this.valueBlock=i?new i(o):new dr(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 pu;t||YA(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?Lo:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():Me.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return qA(t,n)}};qt.NAME="BaseBlock";function YA(r){var e;if(r instanceof ce.Constructed)for(let t of r.valueBlock.value)YA(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var $d=class extends qt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=cn,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};$d.NAME="BaseStringBlock";var d0=class extends li(dr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};d0.NAME="PrimitiveValueBlock";var QA,Vi=class extends qt{constructor(e={}){super(e,d0),this.idBlock.isConstructed=!1}};QA=Vi;ce.Primitive=QA;Vi.NAME="PRIMITIVE";function UF(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 gu(r,e=0,t=r.length){let n=e,o=new qt({},dr),i=new Ki;if(!Hi(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=qt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=ce.EndOfContent;break;case 1:c=ce.Boolean;break;case 2:c=ce.Integer;break;case 3:c=ce.BitString;break;case 4:c=ce.OctetString;break;case 5:c=ce.Null;break;case 6:c=ce.ObjectIdentifier;break;case 10:c=ce.Enumerated;break;case 12:c=ce.Utf8String;break;case 13:c=ce.RelativeObjectIdentifier;break;case 14:c=ce.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=ce.Sequence;break;case 17:c=ce.Set;break;case 18:c=ce.NumericString;break;case 19:c=ce.PrintableString;break;case 20:c=ce.TeletexString;break;case 21:c=ce.VideotexString;break;case 22:c=ce.IA5String;break;case 23:c=ce.UTCTime;break;case 24:c=ce.GeneralizedTime;break;case 25:c=ce.GraphicString;break;case 26:c=ce.VisibleString;break;case 27:c=ce.GeneralString;break;case 28:c=ce.UniversalString;break;case 29:c=ce.CharacterString;break;case 30:c=ce.BmpString;break;case 31:c=ce.DATE;break;case 32:c=ce.TimeOfDay;break;case 33:c=ce.DateTime;break;case 34:c=ce.Duration;break;default:{let l=o.idBlock.isConstructed?new ce.Constructed:new ce.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?ce.Constructed:ce.Primitive}return o=UF(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 Ln(r){if(!r.byteLength){let e=new qt({},dr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return gu(Me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function FF(r,e){return r?1:e}var ai=class extends dr{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;FF(this.isIndefiniteForm,n)>0;){let s=gu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===Fd)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Fd?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new pu;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Lo:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ai.NAME="ConstructedValueBlock";var ZA,Xt=class extends qt{constructor(e={}){super(e,ai),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
15
15
  `).map(o=>` ${o}`).join(`
16
16
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
17
17
  ${e.join(`
18
- `)}`:`${t} :`}};pw=Wo;G.Constructed=pw;Wo.NAME="CONSTRUCTED";var If=class extends Ft{fromBER(e,t,n){return t}toBER(e){return dn}};If.override="EndOfContentValueBlock";var mw,Tf=class extends At{constructor(e={}){super(e,If),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};mw=Tf;G.EndOfContent=mw;Tf.NAME=zc;var gw,Ki=class extends At{constructor(e={}){super(e,Ft),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};gw=Ki;G.Null=gw;Ki.NAME="NULL";var _f=class extends no(Ft){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return ro(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,H3.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};_f.NAME="BooleanValueBlock";var yw,Cf=class extends At{constructor(e={}){super(e,_f),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};yw=Cf;G.Boolean=yw;Cf.NAME="BOOLEAN";var kf=class extends no(Tn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=Tn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===zc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==uw)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?Tn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};kf.NAME="OctetStringValueBlock";var ww,Jn=class r extends At{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},kf),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=oh(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?Wo.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};ww=Jn;G.OctetString=ww;Jn.NAME=uw;var Pf=class extends no(Tn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=Tn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===zc){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==dw)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=ye.BufferSourceConverter.toUint8Array(e);if(!ro(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=oh(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return Tn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return dn;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};Pf.NAME="BitStringValueBlock";var bw,Rf=class extends At{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},Pf),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Wo.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};bw=Rf;G.BitString=bw;Rf.NAME=dw;var xw;function eP(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,u=c<s?s:c,d=0;for(let f=u;f>=0;f--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=wf(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=wf(t,i)),i}function lw(r){if(r>=Hc.length)for(let e=Hc.length;e<=r;e++){let t=new Uint8Array([0]),n=Hc[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=wf(t,n)),Hc.push(n)}return Hc[r]}function tP(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Wc=class extends no(Ft){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=H3.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(sw(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=tP(lw(n),t),s="-";break;default:t=eP(t,lw(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=cw.charAt(t[c]));return a===!1&&(s+=cw.charAt(0)),s}};xw=Wc;Wc.NAME="IntegerValueBlock";Object.defineProperty(xw.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ew,eo=class r extends At{constructor(e={}){super(e,Wc),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return bf(),BigInt(this.valueBlock.toString())}static fromBigInt(e){bf();let t=BigInt(e),n=new qc,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,u=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Ew=eo;G.Integer=Ew;eo.NAME="INTEGER";var vw,Df=class extends eo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};vw=Df;G.Enumerated=vw;Df.NAME="ENUMERATED";var Gc=class extends no(Ft){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=$i(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){bf();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=zo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",dn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=ye.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Gc.NAME="sidBlock";var Lf=class extends Ft{constructor({value:e=ua,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Gc;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,dn;t.push(o)}return q3(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Gc;if(o>Number.MAX_SAFE_INTEGER){bf();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Lf.NAME="ObjectIdentifierValueBlock";var Sw,_n=class extends At{constructor(e={}){super(e,Lf),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};Sw=_n;G.ObjectIdentifier=Sw;_n.NAME="OBJECT IDENTIFIER";var Qc=class extends no(jn){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!ro(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=$i(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=zo(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",dn;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};Qc.NAME="relativeSidBlock";var Nf=class extends Ft{constructor({value:e=ua,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Qc;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,dn;n.push(i)}return q3(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new Qc;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Nf.NAME="RelativeObjectIdentifierValueBlock";var Aw,Of=class extends At{constructor(e={}){super(e,Nf),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};Aw=Of;G.RelativeObjectIdentifier=Aw;Of.NAME="RelativeObjectIdentifier";var Iw,lr=class extends Wo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};Iw=lr;G.Sequence=Iw;lr.NAME="SEQUENCE";var Tw,Mf=class extends Wo{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};Tw=Mf;G.Set=Tw;Mf.NAME="SET";var Bf=class extends no(Ft){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ua}toJSON(){return{...super.toJSON(),value:this.value}}};Bf.NAME="StringValueBlock";var Uf=class extends Bf{};Uf.NAME="SimpleStringValueBlock";var Xt=class extends vf{constructor({...e}={}){super(e,Uf)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Xt.NAME="SIMPLE STRING";var Ff=class extends Xt{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Ff.NAME="Utf8StringValueBlock";var _w,to=class extends Ff{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};_w=to;G.Utf8String=_w;to.NAME="UTF8String";var Vf=class extends Xt{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};Vf.NAME="BmpStringValueBlock";var Cw,$f=class extends Vf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};Cw=$f;G.BmpString=Cw;$f.NAME="BMPString";var Kf=class extends Xt{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=zo(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};Kf.NAME="UniversalStringValueBlock";var kw,Hf=class extends Kf{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};kw=Hf;G.UniversalString=kw;Hf.NAME="UniversalString";var Pw,qf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};Pw=qf;G.NumericString=Pw;qf.NAME="NumericString";var Rw,zf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};Rw=zf;G.PrintableString=Rw;zf.NAME="PrintableString";var Dw,Wf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};Dw=Wf;G.TeletexString=Dw;Wf.NAME="TeletexString";var Lw,Gf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};Lw=Gf;G.VideotexString=Lw;Gf.NAME="VideotexString";var Nw,Qf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};Nw=Qf;G.IA5String=Nw;Qf.NAME="IA5String";var Ow,Yf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};Ow=Yf;G.GraphicString=Ow;Yf.NAME="GraphicString";var Mw,Yc=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};Mw=Yc;G.VisibleString=Mw;Yc.NAME="VisibleString";var Bw,Xf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};Bw=Xf;G.GeneralString=Bw;Xf.NAME="GeneralString";var Uw,Zf=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};Uw=Zf;G.CharacterString=Uw;Zf.NAME="CharacterString";var Fw,Xc=class extends Yc{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=cr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=cr(this.month,2),t[2]=cr(this.day,2),t[3]=cr(this.hour,2),t[4]=cr(this.minute,2),t[5]=cr(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};Fw=Xc;G.UTCTime=Fw;Xc.NAME="UTCTime";var Vw,jf=class extends Xc{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let d=new Number(e[e.length-1]);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(cr(this.year,4)),t.push(cr(this.month,2)),t.push(cr(this.day,2)),t.push(cr(this.hour,2)),t.push(cr(this.minute,2)),t.push(cr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(cr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};Vw=jf;G.GeneralizedTime=Vw;jf.NAME="GeneralizedTime";var $w,Jf=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};$w=Jf;G.DATE=$w;Jf.NAME="DATE";var Kw,eh=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};Kw=eh;G.TimeOfDay=Kw;eh.NAME="TimeOfDay";var Hw,th=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};Hw=th;G.DateTime=Hw;th.NAME="DateTime";var qw,rh=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};qw=rh;G.Duration=qw;rh.NAME="Duration";var zw,nh=class extends to{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};zw=nh;G.TIME=zw;nh.NAME="TIME";async function W3(r,e){let n=await ca.create().encrypt(r,e);return ot.encode(n)}async function G3(r,e,t){if(r.type==="RSA")return oP(r,e,t);if(r.type==="Ed25519")return rP(r,e,t);if(r.type==="secp256k1")return nP(r,e,t);throw new Fr}async function rP(r,e,t="libp2p-key"){if(t==="libp2p-key")return W3(Ss(r),e);throw new P(`export format '${t}' is not supported`)}async function nP(r,e,t="libp2p-key"){if(t==="libp2p-key")return W3(Ss(r),e);throw new P("Export format is not supported")}async function oP(r,e,t="pkcs-8"){if(t==="pkcs-8")return iP(r,e);if(t==="libp2p-key")return W3(Ss(r),e);throw new P("Export format is not supported")}async function iP(r,e){let t=tr.get(),o=new lr({value:[new eo({value:0}),new lr({value:[new _n({value:"1.2.840.113549.1.1.1"}),new Ki]}),new Jn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=zt(16),a=await au(wo,e,s,{c:1e4,dkLen:32}),c=zt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new lr({value:[new Jn({valueHex:s}),new eo({value:1e4}),new eo({value:32}),new lr({value:[new _n({value:"1.2.840.113549.2.11"}),new Ki]})]}),f=new lr({value:[new _n({value:"1.2.840.113549.1.5.13"}),new lr({value:[new lr({value:[new _n({value:"1.2.840.113549.1.5.12"}),d]}),new lr({value:[new _n({value:"2.16.840.1.101.3.4.1.42"}),new Jn({valueHex:c})]})]})]}),p=new lr({value:[f,new Jn({valueHex:u})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...O(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
- `)}async function Q3(r,e){try{let t=await sP(r,e);return k6(t)}catch{}if(!r.includes("BEGIN"))throw new P("Encrypted key was not a libp2p-key or a PEM file");return aP(r,e)}async function sP(r,e){let t=ot.decode(r);return ca.create().decrypt(t,e)}async function aP(r,e){let t=tr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ih(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=cP(s),f=await au(wo,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Zc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:g}=ih(p);n=Yw(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=ih(i);n=Yw(s)}else throw new P("Could not parse private key from PEM data");let o=P6(n);if(o.type!=="RSA")throw new P("Could not parse RSA private key from PEM data");return o}function cP(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new P("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new P("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Zc(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new P("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new P("Only AES-CBC encryption schemes are supported")}}}}let d=Zc(l.valueBlock.value[1].getValue());return{cipherText:Zc(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function Yw(r){return Zc(r.valueBlock.value[2].getValue())}function Zc(r){return new Uint8Array(r,0,r.byteLength)}var lP="/pkcs8/",X3="/info/",jc=new WeakMap,Hi={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},Y3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function da(r){return r==null||typeof r!="string"?!1:r===(0,Xw.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function qi(r){return new Ne(lP+r)}function fa(r){return new Ne(X3+r)}async function uP(r){let e=Ss(r),t=await Qe.digest(e);return be.encode(t.bytes).substring(1)}var sh=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=aa(Y3,t),this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Hi.minKeyLength)throw new Error(`dek.keyLength must be least ${Hi.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Hi.minSaltLength)throw new Error(`dek.saltLength must be least ${Hi.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Hi.minIterationCount)throw new Error(`dek.iterationCount must be least ${Hi.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Ya(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";jc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Ae]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},Y3),t=Math.ceil(Hi.minSaltLength/3)*3;return e.dek.salt=O(zt(t),"base64"),e}static get options(){return Y3}async findKeyByName(e){if(!da(e))throw await It(),new P(`Invalid key name '${e}'`);let t=fa(e);try{let n=await this.components.datastore.get(t);return JSON.parse(O(n))}catch(n){throw await It(),this.log.error(n),new Ce(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:X3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(O(n.value));if(o.id===e)return o}throw new P(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!da(e))throw await It(),new P(`Invalid key name '${e}'`);if(t==null)throw await It(),new P("Key is required");let n=qi(e);if(await this.components.datastore.has(n))throw await It(),new P(`Key '${e}' already exists`);let i,s;try{i=await uP(t);let l=jc.get(this);if(l==null)throw new P("dek missing");let u=l.dek;s=await G3(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await It(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,N(s)),c.put(fa(e),N(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!da(e))throw await It(),new P(`Invalid key name '${e}'`);let t=qi(e);try{let n=await this.components.datastore.get(t),o=O(n),i=jc.get(this);if(i==null)throw new P("dek missing");let s=i.dek;return await Q3(o,s)}catch(n){throw await It(),n}}async removeKey(e){if(!da(e)||e===this.self)throw await It(),new P(`Invalid key name '${e}'`);let t=qi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(fa(e)),await o.commit(),n}async listKeys(){let e={prefix:X3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(O(n.value)));return t}async renameKey(e,t){if(!da(e)||e===this.self)throw await It(),new P(`Invalid old key name '${e}'`);if(!da(t)||t===this.self)throw await It(),new P(`Invalid new key name '${t}'`);let n=qi(e),o=qi(t),i=fa(e),s=fa(t);if(await this.components.datastore.has(o))throw await It(),new P(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(O(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,N(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new P(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new P(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new P(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=jc.get(this);if(n==null)throw new P("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Ya(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";jc.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(qi(a.name)),l=O(c),u=await Q3(l,o),d=i.toString(),f=await G3(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(qi(a.name),N(f)),h.put(fa(a.name),N(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function ah(r={}){return e=>new sh(e,r)}var ha=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new Z3}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new xl("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await A1(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},Z3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(we||(we={}));var Jc=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),j3=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),Zw=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var J3=1<<20,dP=4<<20,ch=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=J3,t=dP){this._buffer=new ee,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new he("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=Jw(e),{value:o,offset:i}=Jw(e,n),s=t&7;if(Jc[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new he("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},fP=128,jw=127;function Jw(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&jw)<<n:(i&jw)*Math.pow(2,n),n+=7}while(i>=fP);return e=o-e,{value:t,offset:e}}var e4=10*1024,t4=class{_pool;_poolOffset;constructor(){this._pool=Be(e4),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;De(e.id<<3|e.type,n,o),o+=ue(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?(De(e.data.length,n,o),o+=ue(e.data.length)):(De(0,n,o),o+=ue(0));let i=n.subarray(this._poolOffset,o);e4-o<100?(this._pool=Be(e4),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},hP=new t4;async function*eb(r){for await(let e of r){let t=new ee;hP.write(e,t),yield t}}var lh=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var r4=class extends Mo{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?j3:Zw,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:j3.NEW_STREAM,data:new ee(N(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function tb(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=J3}=r;return new r4({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var pP=1024,mP=1024,gP=1024*1024*4,yP=5,wP=500;function rb(r){let e={...r,type:`${Jc[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=O(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=O(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var uh=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??wP,this.sink=this._createSink(),this._source=Pt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=ut(this._source,n=>eb(n)),this.closeController=new AbortController,this.rateLimiter=new ha({points:t.disconnectThreshold??yP,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new mn("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??mP))throw new lo("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=tb({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,rb(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{r1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new ch(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",rb(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??pP)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:O(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,Jc[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let s=this._init.maxStreamBufferSize??gP;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new lh("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:i.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var n4=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Ae]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new uh(this.components,{...e,...this._init})}};function nb(r={}){return e=>new n4(e,r)}var ob="1.0.0",ib="ping",sb="ipfs";var dh=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??sb}/${ib}/${ob}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Ni(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new gn("ping timeout"))});let a=await o.read(32,{signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=zt(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Ni(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!j(o,c.subarray()))throw new gl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function ab(r={}){return e=>new dh(e,r)}var Vt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>qe(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(Vt||(Vt={}));var cb=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],i4=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),lb="libp2p+webrtc+v1/";var ub=466,db=2*1024*1024,fb=30*1e3,pa=16*1024;function vP(r=pa){let e=ue(r-ue(r)),t=1+ue(Object.keys(Vt.Flag).length-1),n=1,o=r-e-t-n,i=ue(o);return e+t+n+i}var hb=vP(),pb=5e3,mb=5e3,gb=3e4,s4="/webrtc",el="/webrtc-signaling/0.0.1";var yb=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},SP=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var AP=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var IP=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var TP=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var _P=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var CP=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,kP=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,wb=3,PP=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",CP]],bb=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function Eb(r){return r?xb(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new _P:typeof navigator<"u"?xb(navigator.userAgent):LP()}function RP(r){return r!==""&&PP.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function xb(r){var e=RP(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new TP;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<wb&&(o=yb(yb([],o,!0),NP(wb-o.length),!0)):o=[];var i=o.join("."),s=DP(r),a=kP.exec(r);return a&&a[1]?new IP(t,i,s,a[1]):new SP(t,i,s)}function DP(r){for(var e=0,t=bb.length;e<t;e++){var n=bb[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function LP(){var r=typeof process<"u"&&process.version;return r?new AP(process.version.slice(1)):null}function NP(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var vb=Eb(),tl=vb!=null&&vb.name==="firefox",fh=async function*(){},hh=async r=>{};function Sb(r,e,t=gb,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=J(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await Xr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function a4(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??cb.map(e=>({urls:[e]})),r}var Ab=(r=32)=>lb+[...Array(r)].map(()=>i4.at(Math.floor(Math.random()*i4.length))).join("");var zi=class{log;peerConnection;remoteAddr;timeline;metrics;source=fh();sink=hh;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var c4=class extends Mo{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Xr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),this.channel.close(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Pt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??fb,this.maxBufferedAmount=e.maxBufferedAmount??db,this.maxMessageSize=(e.maxMessageSize??pa)-hb,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??pb,this.openTimeout=e.openTimeout??mb,this.closeController=new AbortController,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new jo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Dn(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new ee(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new jo(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=le([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await lt(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=le([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await lt(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new gn(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){for(this.log.trace("-> will send %d bytes",e.byteLength),e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Vt.encode({message:n}),i=Vr.single(o);this.log.trace("-> sending message %s",this.channel.readyState),await this._sendMessage(i),this.log.trace("-> sent message %s",this.channel.readyState),e.consume(t)}this.log.trace("-> sent data %s",this.channel.readyState)}async sendReset(){try{await this._sendFlag(Vt.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(Vt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await et(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){this.channel.readyState==="open"&&await this._sendFlag(Vt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Vt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Vt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Vt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Vt.Flag.RESET&&this.reset(),t.flag===Vt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Vt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Vt.encode({flag:e}),n=Vr.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function ma(r){let{channel:e,direction:t}=r;return new c4({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Go=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??s4,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=ma({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new l4(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},l4=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??s4,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=n.id,i=ma({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),Sb(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=fh();sink=hh;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=ma({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var ph=globalThis.RTCPeerConnection,mh=globalThis.RTCSessionDescription,Ib=globalThis.RTCIceCandidate;var Qo=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Or=class extends Qo{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var gh=class extends Qo{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var yh=class extends Qo{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},wh=class extends Qo{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var ur;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>qe(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(ur||(ur={}));var bh=async(r,e,t)=>{try{let n=J();for(OP(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==ur.Type.ICE_CANDIDATE)throw new he("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new W("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new Ib(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new W("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&xh(r)!=="connected")throw n}};function xh(r){return tl?r.iceConnectionState:r.connectionState}function OP(r,e){r[tl?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(xh(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new ji("RTCPeerConnection was closed"));break;default:break}}}async function Tb({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=_b(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new P("Relay peer was missing");let f=i.getConnections(Ve(d)),h,p=!1;f.length===0?(l?.(new W("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l}),p=!0):(l?.(new W("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new W("webrtc:open-signaling-stream"));let g=await h.newStream(el,{signal:t,runOnLimitedConnection:!0}),m=Ge(g).pb(ur),y=new ph(r),x=new Go({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:R})=>{let S=JSON.stringify(R?.toJSON()??null);a.trace("initiator sending ICE candidate %o",R),m.write({type:ur.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(A=>{a.error("error sending ICE candidate",A)})},y.onicecandidateerror=R=>{a.error("initiator ICE candidate error",R)};let I=await y.createOffer().catch(R=>{throw a.error("could not execute createOffer",R),new Or("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new W("webrtc:send-sdp-offer")),await m.write({type:ur.Type.SDP_OFFER,data:I.sdp},{signal:t}),await y.setLocalDescription(I).catch(R=>{throw a.error("could not execute setLocalDescription",R),new Or("Failed to set localDescription")}),l?.(new W("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let M=await m.read({signal:t});if(M.type!==ur.Type.SDP_ANSWER)throw new Or("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",M.data);let D=new mh({type:"answer",sdp:M.data});return await y.setRemoteDescription(D).catch(R=>{throw a.error("could not execute setRemoteDescription",R),new Or("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new W("webrtc:read-ice-candidates")),await bh(y,m,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new W("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await g.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:x}}catch(w){throw a.error("outgoing signaling error",w),y.close(),g.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(g){h.abort(g)}}}var Cb=Re(sd.matchers[0],pe("p2p-circuit")),Eh=class r extends me{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>Cb.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>Cb.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function kb({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=Ge(e).pb(ur);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:ur.Type.ICE_CANDIDATE,data:d},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==ur.Type.SDP_OFFER)throw new Or(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new mh({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new Or("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new Or("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:ur.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new Or("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await bh(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(xh(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=$(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var vh=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,this.shutdownController.signal,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Ae]=["@libp2p/transport"];[dr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(el,e=>{let t=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t).catch(n=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,n)}).finally(()=>{t.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(el),this._started=!1}createListener(e){return new Eh(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(wc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await Tb({rtcConfiguration:await a4(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=new zi(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t},n){let o=new ph(await a4(this.init.rtcConfiguration)),i=new Go(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await kb({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new zi(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i,signal:n}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function _b(r){let e=r.toString().split("/webrtc/");if(e.length!==2)throw new P("webrtc protocol was not present in multiaddr");if(!e[0].includes("/p2p-circuit"))throw new P("p2p-circuit protocol was not present in multiaddr");let t=$(e[0]),o=$("/"+e[1]).getPeerId();if(o==null)throw new P("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new P("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Ve(o)}}var Sh=class extends me{async listen(){throw new yh("WebRTCTransport.createListener")}getAddrs(){return[]}updateAnnounceAddrs(){}async close(){}};var u4=Object.values(oi).map(r=>r.decoder).reduce((r,e)=>r.or(e)),MP=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Pb(r){return r?.match(MP)?.groups?.fingerprint}function d4(r){let t=r.stringTuples().filter(n=>n[0]===ub).map(n=>n[1])[0];if(t===void 0||t==="")throw new P(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function BP(r){return He.decode(u4.decode(r))}function UP(r){let e=BP(d4(r)),t=FP(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new gh(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function Rb(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Nt(Qe.code,t);return $(`/certhash/${Ea.encode(n.bytes)}`)}function FP(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new wh(r)}}function Db(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=UP(r);return{type:"answer",sdp:`v=0
18
+ `)}`:`${t} :`}};ZA=Xt;ce.Constructed=ZA;Xt.NAME="CONSTRUCTED";var h0=class extends dr{fromBER(e,t,n){return t}toBER(e){return Lo}};h0.override="EndOfContentValueBlock";var JA,Kd=class extends qt{constructor(e={}){super(e,h0),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};JA=Kd;ce.EndOfContent=JA;Kd.NAME=Fd;var e_,ln=class extends qt{constructor(e={}){super(e,dr),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}`}};e_=ln;ce.Null=e_;ln.NAME="NULL";var p0=class extends li(dr){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=Me.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);return Hi(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,b8.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};p0.NAME="BooleanValueBlock";var t_,cc=class extends qt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,p0),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};t_=cc;ce.Boolean=t_;cc.NAME="BOOLEAN";var m0=class extends li(ai){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=ai.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===Fd){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==zA)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?ai.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};m0.NAME="OctetStringValueBlock";var S8,Mr=class extends qt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},m0),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=gu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Xt.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof S8&&e.push(t.valueBlock.valueHexView);return Me.BufferSourceConverter.concat(e)}};S8=Mr;ce.OctetString=S8;Mr.NAME=zA;var g0=class extends li(ai){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=ai.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Fd){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==XA)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=gu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return ai.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Lo;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}}};g0.NAME="BitStringValueBlock";var r_,Oo=class extends qt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},g0),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 Xt.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let s of t)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,i=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${i}`}}};r_=Oo;ce.BitString=r_;Oo.NAME=XA;var n_;function $F(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,u=c<s?s:c,f=0;for(let h=u;h>=0;h--,f++){switch(!0){case f<a.length:l=i[s-f]+a[c-f]+t[0];break;default:l=i[s-f]+t[0]}switch(t[0]=l/10,!0){case f>=i.length:i=c0(new Uint8Array([l%10]),i);break;default:i[s-f]=l%10}}return t[0]>0&&(i=c0(t,i)),i}function GA(r){if(r>=Md.length)for(let e=Md.length;e<=r;e++){let t=new Uint8Array([0]),n=Md[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=c0(t,n)),Md.push(n)}return Md[r]}function KF(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,u=0;for(let f=c;f>=0;f--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let f=s-c+1;f>=0;f--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Vd=class extends li(dr){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=b8.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(HA(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=KF(GA(n),t),s="-";break;default:t=$F(t,GA(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=jA.charAt(t[c]));return a===!1&&(s+=jA.charAt(0)),s}};n_=Vd;Vd.NAME="IntegerValueBlock";Object.defineProperty(n_.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var Ud,Dn=class extends qt{constructor(e={}){super(e,Vd),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return l0(),BigInt(this.valueBlock.toString())}static fromBigInt(e){l0();let t=BigInt(e),n=new pu,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(Me.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${Me.Convert.ToHex(a)}`)+t,u=Me.BufferSourceConverter.toUint8Array(Me.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new Ud({valueHex:n.final()})}convertToDER(){let e=new Ud({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new Ud({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};Ud=Dn;ce.Integer=Ud;Dn.NAME="INTEGER";var o_,lc=class extends Dn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};o_=lc;ce.Enumerated=o_;lc.NAME="ENUMERATED";var Hd=class extends li(dr){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ac(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){l0();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Ns(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Lo;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=Me.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Hd.NAME="sidBlock";var y0=class extends dr{constructor({value:e=cn,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Hd;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Lo;t.push(o)}return E8(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Hd;if(o>Number.MAX_SAFE_INTEGER){l0();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};y0.NAME="ObjectIdentifierValueBlock";var i_,On=class extends qt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,y0),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};i_=On;ce.ObjectIdentifier=i_;On.NAME="OBJECT IDENTIFIER";var qd=class extends li(Ki){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=ac(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Ns(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Lo;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=Me.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};qd.NAME="relativeSidBlock";var w0=class extends dr{constructor({value:e=cn,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new qd;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,Lo;n.push(i)}return E8(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new qd;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};w0.NAME="RelativeObjectIdentifierValueBlock";var s_,jd=class extends qt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,w0),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};s_=jd;ce.RelativeObjectIdentifier=s_;jd.NAME="RelativeObjectIdentifier";var a_,Et=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};a_=Et;ce.Sequence=a_;Et.NAME="SEQUENCE";var c_,un=class extends Xt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};c_=un;ce.Set=c_;un.NAME="SET";var b0=class extends li(dr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=cn}toJSON(){return{...super.toJSON(),value:this.value}}};b0.NAME="StringValueBlock";var x0=class extends b0{};x0.NAME="SimpleStringValueBlock";var Xr=class extends $d{constructor({...e}={}){super(e,x0)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Xr.NAME="SIMPLE STRING";var v0=class extends Xr{fromBuffer(e){this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=Me.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=Me.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf8String(e)),this.valueBlock.value=e}};v0.NAME="Utf8StringValueBlock";var l_,Xn=class extends v0{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};l_=Xn;ce.Utf8String=l_;Xn.NAME="UTF8String";var E0=class extends Xr{fromBuffer(e){this.valueBlock.value=Me.Convert.ToUtf16String(e),this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf16String(e))}};E0.NAME="BmpStringValueBlock";var u_,uc=class extends E0{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};u_=uc;ce.BmpString=u_;uc.NAME="BMPString";var S0=class extends Xr{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=Ns(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};S0.NAME="UniversalStringValueBlock";var f_,fc=class extends S0{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};f_=fc;ce.UniversalString=f_;fc.NAME="UniversalString";var d_,dc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};d_=dc;ce.NumericString=d_;dc.NAME="NumericString";var h_,hc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};h_=hc;ce.PrintableString=h_;hc.NAME="PrintableString";var p_,pc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};p_=pc;ce.TeletexString=p_;pc.NAME="TeletexString";var m_,mc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};m_=mc;ce.VideotexString=m_;mc.NAME="VideotexString";var g_,gc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};g_=gc;ce.IA5String=g_;gc.NAME="IA5String";var y_,yc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};y_=yc;ce.GraphicString=y_;yc.NAME="GraphicString";var w_,Os=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};w_=Os;ce.VisibleString=w_;Os.NAME="VisibleString";var b_,wc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};b_=wc;ce.GeneralString=b_;wc.NAME="GeneralString";var x_,bc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};x_=bc;ce.CharacterString=x_;bc.NAME="CharacterString";var v_,Ls=class extends Os{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=an(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=an(this.month,2),t[2]=an(this.day,2),t[3]=an(this.hour,2),t[4]=an(this.minute,2),t[5]=an(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}}};v_=Ls;ce.UTCTime=v_;Ls.NAME="UTCTime";var E_,xc=class extends Ls{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let f=new Number(e[e.length-1]);if(isNaN(f.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 f=1,h=n.indexOf("+"),m="";if(h===-1&&(h=n.indexOf("-"),f=-1),h!==-1){if(m=n.substring(h+1),n=n.substring(0,h),m.length!==2&&m.length!==4)throw new Error("Wrong input string for conversion");let g=parseInt(m.substring(0,2),10);if(isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");if(a=f*g,m.length===4){if(g=parseInt(m.substring(2,4),10),isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");c=f*g}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let f=new Number(`0${n.substring(l)}`);if(isNaN(f.valueOf()))throw new Error("Wrong input string for conversion");i=f.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let f=60*i;this.minute=Math.floor(f),f=60*(f-this.minute),this.second=Math.floor(f),f=1e3*(f-this.second),this.millisecond=Math.floor(f)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let f=60*i;this.second=Math.floor(f),f=1e3*(f-this.second),this.millisecond=Math.floor(f)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let f=1e3*i;this.millisecond=Math.floor(f)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let f=1;f<u.length;f++)switch(f){case 1:this.year=parseInt(u[f],10);break;case 2:this.month=parseInt(u[f],10);break;case 3:this.day=parseInt(u[f],10);break;case 4:this.hour=parseInt(u[f],10)+a;break;case 5:this.minute=parseInt(u[f],10)+c;break;case 6:this.second=parseInt(u[f],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let f=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=f.getUTCFullYear(),this.month=f.getUTCMonth(),this.day=f.getUTCDay(),this.hour=f.getUTCHours(),this.minute=f.getUTCMinutes(),this.second=f.getUTCSeconds(),this.millisecond=f.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(an(this.year,4)),t.push(an(this.month,2)),t.push(an(this.day,2)),t.push(an(this.hour,2)),t.push(an(this.minute,2)),t.push(an(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(an(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};E_=xc;ce.GeneralizedTime=E_;xc.NAME="GeneralizedTime";var S_,Wd=class extends Xn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};S_=Wd;ce.DATE=S_;Wd.NAME="DATE";var A_,Gd=class extends Xn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};A_=Gd;ce.TimeOfDay=A_;Gd.NAME="TimeOfDay";var __,zd=class extends Xn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};__=zd;ce.DateTime=__;zd.NAME="DateTime";var I_,Xd=class extends Xn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};I_=Xd;ce.Duration=I_;Xd.NAME="Duration";var T_,Yd=class extends Xn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};T_=Yd;ce.TIME=T_;Yd.NAME="TIME";var ci=class{constructor({name:e=cn,optional:t=!1}={}){this.name=e,this.optional=t}},mu=class extends ci{constructor({value:e=[],...t}={}){super(t),this.value=e}},vc=class extends ci{constructor({value:e=new ci,local:t=!1,...n}={}){super(n),this.value=e,this.local=t}},v8=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}constructor({data:e=A0}={}){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}fromBER(e,t,n){let o=t+n;return this.dataView=Me.BufferSourceConverter.toUint8Array(e).subarray(t,o),o}toBER(e){return this.dataView.slice().buffer}};function Ds(r,e,t){if(t instanceof mu){for(let i of t.value)if(Ds(r,e,i).verified)return{verified:!0,result:r};{let i={verified:!1,result:{error:"Wrong values for Choice type"}};return t.hasOwnProperty(x8)&&(i.name=t.name),i}}if(t instanceof ci)return t.hasOwnProperty(x8)&&(r[t.name]=e),{verified:!0,result:r};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(RF in t))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(LF in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(BF in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=t.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(t.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(t.idBlock.hasOwnProperty(NF)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(DF)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(OF)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:r};if(!(PF in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:r};if(t.idBlock.isHexOnly){if(!(WA in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let i=t.idBlock.valueHexView,s=e.idBlock.valueHexView;if(i.length!==s.length)return{verified:!1,result:r};for(let a=0;a<i.length;a++)if(i[a]!==s[1])return{verified:!1,result:r}}if(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&(r[t.name]=e)),t instanceof ce.Constructed){let i=0,s={verified:!1,result:{error:"Unknown error"}},a=t.valueBlock.value.length;if(a>0&&t.valueBlock.value[0]instanceof vc&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:r};if(e.valueBlock.value.length===0&&t.valueBlock.value.length!==0){let c=!0;for(let l=0;l<t.valueBlock.value.length;l++)c=c&&(t.valueBlock.value[l].optional||!1);return c?{verified:!0,result:r}:(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&delete r[t.name]),r.error="Inconsistent object length",{verified:!1,result:r})}for(let c=0;c<a;c++)if(c-i>=e.valueBlock.value.length){if(t.valueBlock.value[c].optional===!1){let l={verified:!1,result:r};return r.error="Inconsistent length between ASN.1 data and schema",t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&(delete r[t.name],l.name=t.name)),l}}else if(t.valueBlock.value[0]instanceof vc){if(s=Ds(r,e.valueBlock.value[c],t.valueBlock.value[0].value),s.verified===!1)if(t.valueBlock.value[0].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&delete r[t.name]),s;if(x8 in t.valueBlock.value[0]&&t.valueBlock.value[0].name.length>0){let l={};MF in t.valueBlock.value[0]&&t.valueBlock.value[0].local?l=e:l=r,typeof l[t.valueBlock.value[0].name]>"u"&&(l[t.valueBlock.value[0].name]=[]),l[t.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=Ds(r,e.valueBlock.value[c-i],t.valueBlock.value[c]),s.verified===!1)if(t.valueBlock.value[c].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&delete r[t.name]),s;if(s.verified===!1){let c={verified:!1,result:r};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&(delete r[t.name],c.name=t.name)),c}return{verified:!0,result:r}}if(t.primitiveSchema&&WA in e.valueBlock){let i=gu(e.valueBlock.valueHexView);if(i.offset===-1){let s={verified:!1,result:i.result};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,cn),t.name&&(delete r[t.name],s.name=t.name)),s}return Ds(r,i.result,t.primitiveSchema)}return{verified:!0,result:r}}function VF(r,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let t=gu(Me.BufferSourceConverter.toUint8Array(r));return t.offset===-1?{verified:!1,result:t.result}:Ds(t.result,t.result,e)}async function _0(r,e){let n=await du.create().encrypt(r,e);return Kt.encode(n)}async function A8(r,e,t){if(r.type==="RSA")return WF(r,e,t);if(r.type==="Ed25519")return HF(r,e,t);if(r.type==="secp256k1")return qF(r,e,t);if(r.type==="ECDSA")return jF(r,e,t);throw new ho}async function HF(r,e,t="libp2p-key"){if(t==="libp2p-key")return _0(ja(r),e);throw new D(`export format '${t}' is not supported`)}async function qF(r,e,t="libp2p-key"){if(t==="libp2p-key")return _0(ja(r),e);throw new D("Export format is not supported")}async function jF(r,e,t="libp2p-key"){if(t==="libp2p-key")return _0(ja(r),e);throw new D(`export format '${t}' is not supported`)}async function WF(r,e,t="pkcs-8"){if(t==="pkcs-8")return GF(r,e);if(t==="libp2p-key")return _0(ja(r),e);throw new D("Export format is not supported")}async function GF(r,e){let t=tn.get(),o=new Et({value:[new Dn({value:0}),new Et({value:[new On({value:"1.2.840.113549.1.1.1"}),new ln]}),new Mr({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=Wr(16),a=await em(Yl,e,s,{c:1e4,dkLen:32}),c=Wr(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),f=new Et({value:[new Mr({valueHex:s}),new Dn({value:1e4}),new Dn({value:32}),new Et({value:[new On({value:"1.2.840.113549.2.11"}),new ln]})]}),h=new Et({value:[new On({value:"1.2.840.113549.1.5.13"}),new Et({value:[new Et({value:[new On({value:"1.2.840.113549.1.5.12"}),f]}),new Et({value:[new On({value:"2.16.840.1.101.3.4.1.42"}),new Mr({valueHex:c})]})]})]}),g=new Et({value:[h,new Mr({valueHex:u})]}).toBER(),w=new Uint8Array(g,0,g.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...M(w,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
+ `)}async function _8(r,e){try{let t=await zF(r,e);return rS(t)}catch{}if(!r.includes("BEGIN"))throw new D("Encrypted key was not a libp2p-key or a PEM file");return XF(r,e)}async function zF(r,e){let t=Kt.decode(r);return du.create().decrypt(t,e)}async function XF(r,e){let t=tn.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=H(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=Ln(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:f}=YF(s),h=await em(Yl,e,c,{c:l,dkLen:u}),m=await t.subtle.importKey("raw",h,"AES-CBC",!1,["decrypt"]),g=Qd(await t.subtle.decrypt({name:"AES-CBC",iv:a},m,f)),{result:w}=Ln(g);n=P_(w)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=H(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=Ln(i);n=P_(s)}else throw new D("Could not parse private key from PEM data");let o=nS(n);if(o.type!=="RSA")throw new D("Could not parse RSA private key from PEM data");return o}function YF(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new D("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new D("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Qd(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new D("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new D("Only AES-CBC encryption schemes are supported")}}}}let f=Qd(l.valueBlock.value[1].getValue());return{cipherText:Qd(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:f}}function P_(r){return Qd(r.valueBlock.value[2].getValue())}function Qd(r){return new Uint8Array(r,0,r.byteLength)}var QF="/pkcs8/",T8="/info/",Zd=new WeakMap,Ec={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},I8={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function yu(r){return r==null||typeof r!="string"?!1:r===(0,R_.default)(r.trim())&&r.length>0}async function hr(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Sc(r){return new it(QF+r)}function wu(r){return new it(T8+r)}async function ZF(r){let e=ja(r),t=await gt.digest(e);return Ve.encode(t.bytes).substring(1)}var I0=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=fu(I8,t),this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Ec.minKeyLength)throw new Error(`dek.keyLength must be least ${Ec.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ec.minSaltLength)throw new Error(`dek.saltLength must be least ${Ec.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ec.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ec.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?hd(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Zd.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[ze]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},I8),t=Math.ceil(Ec.minSaltLength/3)*3;return e.dek.salt=M(Wr(t),"base64"),e}static get options(){return I8}async findKeyByName(e){if(!yu(e))throw await hr(),new D(`Invalid key name '${e}'`);let t=wu(e);try{let n=await this.components.datastore.get(t);return JSON.parse(M(n))}catch(n){throw await hr(),this.log.error(n),new Ge(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:T8};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(M(n.value));if(o.id===e)return o}throw new D(`Key with id '${e}' does not exist.`)}catch(t){throw await hr(),t}}async importKey(e,t){if(!yu(e))throw await hr(),new D(`Invalid key name '${e}'`);if(t==null)throw await hr(),new D("Key is required");let n=Sc(e);if(await this.components.datastore.has(n))throw await hr(),new D(`Key '${e}' already exists`);let i,s;try{i=await ZF(t);let l=Zd.get(this);if(l==null)throw new D("dek missing");let u=l.dek;s=await A8(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await hr(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,H(s)),c.put(wu(e),H(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!yu(e))throw await hr(),new D(`Invalid key name '${e}'`);let t=Sc(e);try{let n=await this.components.datastore.get(t),o=M(n),i=Zd.get(this);if(i==null)throw new D("dek missing");let s=i.dek;return await _8(o,s)}catch(n){throw await hr(),n}}async removeKey(e){if(!yu(e)||e===this.self)throw await hr(),new D(`Invalid key name '${e}'`);let t=Sc(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(wu(e)),await o.commit(),n}async listKeys(){let e={prefix:T8},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(M(n.value)));return t}async renameKey(e,t){if(!yu(e)||e===this.self)throw await hr(),new D(`Invalid old key name '${e}'`);if(!yu(t)||t===this.self)throw await hr(),new D(`Invalid new key name '${t}'`);let n=Sc(e),o=Sc(t),i=wu(e),s=wu(t);if(await this.components.datastore.has(o))throw await hr(),new D(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(M(l));u.name=t;let f=this.components.datastore.batch();return f.put(o,c),f.put(s,H(JSON.stringify(u))),f.delete(n),f.delete(i),await f.commit(),u}catch(c){throw await hr(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await hr(),new D(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await hr(),new D(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await hr(),new D(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Zd.get(this);if(n==null)throw new D("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?hd(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Zd.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(Sc(a.name)),l=M(c),u=await _8(l,o),f=i.toString(),h=await A8(u,f,u.type==="RSA"?"pkcs-8":"libp2p-key"),m=this.components.datastore.batch(),g={name:a.name,id:a.id};m.put(Sc(a.name),H(h)),m.put(wu(a.name),H(JSON.stringify(g))),await m.commit()}this.log("keychain reconstructed")}};function T0(r={}){return e=>new I0(e,r)}async function C8(r,e={}){let t=e.selfKey??"self",n=T0(e)({datastore:r,logger:fs()}),o;return await r.has(new it(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await Xl(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var JF=32,{code:e$}=Ie("dnsaddr"),k8=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Ac=async function(e,t={}){let n=t.maxRecursiveDepth??JF;if(n===0)throw new k8("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===e$)??[],s=await(t?.dns??e1()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[In.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let f=ne(u);if(u.startsWith("/dnsaddr")){let h=await f.resolve({...t,maxRecursiveDepth:n-1});c.push(...h.map(m=>m.toString()))}else c.push(f.toString())}return c};var t$={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Ac}},transportManager:{faultTolerance:ya.FATAL_ALL}};async function N_(r){let e=fu(t$,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new D("Private network is enforced, but no protector was provided");return e}var Jd;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),payload:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Jd||(Jd={}));var C0=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Bn=class r{static createFromProtobuf=async e=>{let t=Jd.decode(e),n=Mt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=D_(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new C0("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Jd.encode({publicKey:tr(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return ge(this.marshal(),e.marshal())}async validate(e){let t=D_(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},D_=(r,e,t)=>{let n=H(r),o=Ue(n.byteLength),i=Ue(e.length),s=Ue(t.length);return new J(o,n,i,e,s,t)};function O_(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 L_="libp2p-peer-record",B_=Uint8Array.from([3,1]);var eh;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=_e((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:ke(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>Ae(i,n.codec()),n.decode=(i,s)=>Se(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=_e((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:ke(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new at('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>Ae(n,r.codec()),r.decode=(n,o)=>Se(n,r.codec(),o)})(eh||(eh={}));var Yr=class r{static createFromProtobuf=e=>{let t=eh.decode(e),n=Vt(Xe(t.peerId)),o=(t.addresses??[]).map(s=>ne(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=L_;static CODEC=B_;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=eh.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!O_(this.multiaddrs,e.multiaddrs))}};var qi;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=_e((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:ke(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let f=s.uint32();switch(f>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(f&7);break}}}return l})),i),o.encode=s=>Ae(s,o.codec()),o.decode=(s,a)=>Se(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=_e((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),P0.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let f=s.uint32();switch(f>>>3){case 1:{l.key=s.string();break}case 2:{l.value=P0.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(f&7);break}}}return l})),i),o.encode=s=>Ae(s,o.codec()),o.decode=(s,a)=>Se(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),k0.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new at('Decode error - map field "addresses" had too many elements');a.addresses.push(k0.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new at('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new sd('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new sd('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(qi||(qi={}));var k0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(k0||(k0={}));var P0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(P0||(P0={}));function r$(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;if(r.type==="RSA"){let o=Ve.decode(`z${r}`);t=Xe(o)}let n=Mt(e.publicKey,t);return ii(n)}function R0(r,e,t){let n=qi.decode(e);return N0(r,n,t)}function N0(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:r$(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:ne(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function M_(r,e){return n$(r.addresses,e.addresses)&&o$(r.protocols,e.protocols)&&i$(r.publicKey,e.publicKey)&&s$(r.peerRecordEnvelope,e.peerRecordEnvelope)&&a$(r.metadata,e.metadata)&&c$(r.tags,e.tags)}function n$(r,e){return F_(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ge(t.multiaddr,n.multiaddr)))}function o$(r,e){return F_(r,e,(t,n)=>t===n)}function i$(r,e){return U_(r,e)}function s$(r,e){return U_(r,e)}function a$(r,e){return $_(r,e,(t,n)=>ge(t,n))}function c$(r,e){return $_(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function U_(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ge(r,e):!1}function F_(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function $_(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var P8="/peers/";function th(r){if(!Op(r)||r.type==null)throw new D("Invalid PeerId");let e=r.toCID().toString();return new it(`${P8}${e}`)}async function K_(r,e,t,n){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=ne(i.multiaddr)),!Ps(i.multiaddr))throw new D("Multiaddr was invalid");if(!await e(r,i.multiaddr))continue;let s=i.isCertified??!1,a=i.multiaddr.toString(),c=o.get(a);c!=null?i.isCertified=c.isCertified||s:o.set(a,{multiaddr:i.multiaddr,isCertified:s})}return[...o.values()].sort((i,s)=>i.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:i,multiaddr:s})=>({isCertified:i,multiaddr:s.bytes}))}async function O0(r,e,t,n){if(e==null)throw new D("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new D("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new D("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(h=>({isCertified:!1,multiaddr:h}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let h=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=D0(h,{validate:V_})}if(e.tags!=null){let h=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=D0(h,{validate:H_,map:q_})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(h=>({isCertified:!1,multiaddr:h}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let h=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[m,g]of h)g==null?a.delete(m):a.set(m,g);a=D0([...a.entries()],{validate:V_})}if(e.tags!=null){let h=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),m=new Map(c);for(let[g,w]of h)w==null?m.delete(g):m.set(g,w);c=D0([...m.entries()],{validate:H_,map:q_})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=tr(o.id.publicKey):e.publicKey!=null?u=tr(e.publicKey):r.publicKey!=null&&(u=tr(r.publicKey));let f={addresses:await K_(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses),protocols:[...s.values()].sort((h,m)=>h.localeCompare(m)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return f.addresses.forEach(h=>{h.observed=n.existingPeer?.peerPB.addresses?.find(m=>ge(m.multiaddr,m.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete f.publicKey,f}function D0(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function V_(r,e){if(typeof r!="string")throw new D("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new D("Metadata value must be a Uint8Array")}function H_(r,e){if(typeof r!="string")throw new D("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new D("Tag value must be an integer");if(e.value<0||e.value>100)throw new D("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new D("Tag ttl must be an integer");if(e.ttl<0)throw new D("Tag ttl must be between greater than 0")}}function q_(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 j_(r){let e=r.toString().split("/")[2],t=le.parse(e,Gt);return Co(t)}function R8(r,e,t){let n=j_(r);return R0(n,e,t)}function l$(r,e){return{prefix:P8,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(R8(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(R8(n.key,n.value,e),R8(o.key,o.value,e)))}}var L0=class{peerId;datastore;lock;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ta({name:"peer-store",singleProcess:!0}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}async has(e){try{return await this.load(e),!0}catch(t){if(t.name!=="NotFoundError")throw t}return!1}async delete(e){this.peerId.equals(e)||await this.datastore.delete(th(e))}async load(e){let t=th(e),n=await this.datastore.get(t),o=qi.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new Ge;return N0(e,o,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t){let n=await this.#e(e),o=await O0(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n)}async patch(e,t){let n=await this.#e(e),o=await O0(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async merge(e,t){let n=await this.#e(e),o=await O0(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(l$(e??{},this.maxAddressAge))){let o=j_(t);if(o.equals(this.peerId))continue;let i=qi.decode(n);if(this.#r(o,i)){await this.datastore.delete(t);continue}yield N0(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e){try{let t=th(e),n=await this.datastore.get(t),o=qi.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new Ge;return{peerPB:o,peer:R0(e,n,this.maxAddressAge)}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}}async#t(e,t,n){t.updated=Date.now();let o=qi.encode(t);return await this.datastore.put(th(e),o),{peer:R0(e,o,this.maxAddressAge),previous:n?.peer,updated:n==null||!M_(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,i=t.addresses.filter(s=>s.observed!=null&&s.observed>o);return n&&i.length===0}};var N8=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 L0(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await ic(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await Bn.openAndCertify(e,Yr.DOMAIN),o=Co(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=Yr.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await Bn.createFromProtobuf(s.peerRecordEnvelope),c=Yr.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function W_(r,e={}){return new N8(r,e)}function G_(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var z_=864e13;var u$=448,D8=449,f$=53,d$=54,h$=55,p$=56,B0=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=zr(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?z_-Date.now():0,lastVerified:o?z_-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:ne(`/${i.map(u=>[Ie(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===u$&&e[n+1]?.[0]!==D8)return e.splice(n+1,0,[D8,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===D8||t[0]===f$||t[0]===d$||t[0]===h$||t[0]===p$)return t[1]}};var O8=4,L8=41,B8=6,m$=273,M0=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:ko(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===B8?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===O8||o[0][0]===L8)&&o[1][0]===B8?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===O8||o[0][0]===L8)&&o[1][0]===m$&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?O8:L8,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:ne(`/${o.map(c=>[Ie(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===B8?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function X_(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}function U0(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function Qn(r){try{if(!U0(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:zr(e)??!1}catch{}return!0}var g$={maxObservedAddresses:10},F0=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??g$.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Qn(e)||X_(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:ne(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var y$=[4,41,53,54,55,56];function M8(r){try{let[[e]]=r.stringTuples();return y$.includes(e)}catch{}return!1}var w$={maxObservedAddresses:10},$0=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??w$.maxObservedAddresses}get(e,t){if(Qn(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!M8(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(M8(e)){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}return e.toString()}};var Y_=6e4,Q_={maxObservedAddresses:10,addressVerificationTTL:Y_*10,addressVerificationRetry:Y_*5},b$=r=>r;function U8(r,e){let t=r.getPeerId();return t!=null&&wt(t).equals(e)&&(r=r.decapsulate(ne(`/p2p/${e.toString()}`))),r}var K0=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new F0(e,t),this.dnsMappings=new B0(e,t),this.ipMappings=new M0(e,t),this.transportAddresses=new $0(e,t),this.announceFilter=t.announceFilter??b$,this.observedAddressFilter=rn(1024),this.addressVerificationTTL=t.addressVerificationTTL??Q_.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??Q_.addressVerificationRetry,this._updatePeerStoreAddresses=G_(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>ne(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>ne(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>ne(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=U8(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=U8(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=U8(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=ne(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(ne(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${ko(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(ne(`/ip${ko(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||zr(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Mi.exactMatch(i)||tc.exactMatch(i),i=>ec.exactMatch(i),i=>DS.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var Z_;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Z_||(Z_={}));var V0=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},H0=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},bu=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},rh=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},q0=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},j0=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},W0=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},nh=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},G0=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},z0=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},X0=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Y0=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Q0=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},_c=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Ic=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Z0=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var F8=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=fs())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Vp(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")}},v$=["metrics","connectionProtector","dns"],E$=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function J_(r={}){let e=new F8(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!E$.includes(o)){let s=e.components[o];if(s==null&&!v$.includes(o))throw new V0(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function eI(r){let e={};for(let t of Object.values(r.components))for(let n of S$(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of A$(t))if(e[n]!==!0)throw new H0(`Service "${_$(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function S$(r){return Array.isArray(r?.[ze])?r[ze]:[]}function A$(r){return Array.isArray(r?.[An])?r[An]:[]}function _$(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var I$=4,T$=41;function tI(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(Mi.matches(e))return!1;let t=e.stringTuples();return t[0][0]===I$||t[0][0]===T$?!!zr(`${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}}var rI=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},C$=new WeakMap;function k$({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(rI());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(rI())},u=()=>{o&&o.removeEventListener("abort",l)},f=new Promise((h,m)=>{s=()=>{u(),h(n)},a=m,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),C$.set(f,()=>{c(i),i=null,s()}),f}}var P$=k$(),J0=P$;var xu=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 $8}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new r1("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await J0(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},$8=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};function e2(r){if(Op(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getPeerId();t=n==null?void 0:wt(n),e.forEach(o=>{if(!Ps(o))throw new as("Invalid multiaddr");let i=o.getPeerId();if(i==null){if(t!=null)throw new D("Multiaddrs must all have the same peer id or have no peer id")}else{let s=wt(i);if(t?.equals(s)!==!0)throw new D("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!CS.exactMatch(n)),{peerId:t,multiaddrs:e}}var R$=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function nI(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??R$;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var oI="last-dial-failure",iI="last-dial-success";var t2=100,r2=50;async function sI(r,e){let t=!1;for(let o of iu.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}function oh(r){try{let e;if(typeof r=="string"?e=ne(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return Y5(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var N$={maxConnections:t2,allow:[]},n2=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??N$.maxConnections,this.allow=(t.allow??[]).map(n=>oh(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new or;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((u,f)=>u+f.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await nI(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var o2=class extends Kr{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function aI(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function K8(r){if(!U0(r))return!1;let{address:e}=r.nodeAddress();return aI(e)}function D$(r,e){let t=ec.exactMatch(r.multiaddr),n=ec.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=tc.exactMatch(r.multiaddr),i=tc.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Mi.exactMatch(r.multiaddr),a=Mi.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Pd.exactMatch(r.multiaddr),l=Pd.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=kd.exactMatch(r.multiaddr),f=kd.exactMatch(e.multiaddr);if(u&&!f)return-1;if(!u&&f)return 1;let h=F5.exactMatch(r.multiaddr),m=F5.exactMatch(e.multiaddr);return h&&!m?-1:!h&&m?1:0}function O$(r,e){let t=K8(r.multiaddr),n=K8(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function L$(r,e){let t=Qn(r.multiaddr),n=Qn(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function B$(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function M$(r,e){let t=on.exactMatch(r.multiaddr),n=on.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function cI(r){return r.sort(D$).sort(B$).sort(M$).sort(L$).sort(O$)}var i2={maxParallelDials:r2,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Ac}},s2=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??i2.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??i2.maxDialQueueLength,this.dialTimeout=t.dialTimeout??i2.dialTimeout,this.connections=t.connections??new or,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))iu.set(n,o);this.queue=new o2({concurrency:t.maxParallelDials??i2.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail?.name!==ir.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=e2(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new ae("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new ae("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new _i("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new ae("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a.onProgress?.(new ae("dial-queue:start-dial"));let c=Ne([this.shutDownController.signal,a.signal]);try{return await this.dialPeer(a,c)}finally{c.clear()}},{peerId:n,priority:t.priority??j8,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let u=[],f=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...f]);let h=await this.calculateMultiaddrs(n,f,{...e,signal:t});for(let m of h){if(i.has(m.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",m.multiaddr,n);continue}u.push(m)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(m=>m.multiaddr.toString())),e?.onProgress?.(new ae("dial-queue:calculated-addresses",u));for(let m of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new _i("Peer had more than maxPeerAddrsToDial");a++;try{let g=await this.components.transportManager.dial(m.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",m.multiaddr);try{await this.components.peerStore.merge(g.remotePeer,{multiaddrs:[g.remoteAddr],metadata:{[iI]:H(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p",n,w)}return g}catch(g){if(this.log.error("dial failed to %a",m.multiaddr,g),i.add(m.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[oI]:H(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p",n,w)}if(t.aborted)throw new zo(g.message);l.push(g)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(f=>({multiaddr:ne(f),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new _i("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new nh("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let f=await this.components.peerStore.get(e);o.push(...f.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:h})=>h.toString()))}catch(f){if(f.name!=="NotFoundError")throw f}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let f=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:h})=>h.toString())),o.push(...f.multiaddrs.map(h=>({multiaddr:h,isCertified:!1})))}catch(f){f.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,f)}}}let i=(await Promise.all(o.map(async f=>{let h=await sI(f.multiaddr,{dns:this.components.dns,...n,log:this.log});return h.length===1&&h[0].equals(f.multiaddr)?f:h.map(m=>({multiaddr:m,isCertified:!1}))}))).flat();if(e!=null){let f=`/p2p/${e.toString()}`;i=i.map(h=>h.multiaddr.protos().pop()?.path===!0?h:h.multiaddr.getPeerId()==null?{multiaddr:h.multiaddr.encapsulate(f),isCertified:h.isCertified}:h)}let s=i.filter(f=>{if(this.components.transportManager.dialTransportForMultiaddr(f.multiaddr)==null)return!1;let h=f.multiaddr.getPeerId();return e!=null&&h!=null?e.equals(h):!0}),a=new Map;for(let f of s){let h=f.multiaddr.toString(),m=a.get(h);if(m!=null){m.isCertified=m.isCertified||f.isCertified||!1;continue}a.set(h,f)}let c=[...a.values()];if(c.length===0)throw new X0("The dial request has no valid addresses");let l=[];for(let f of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(f.multiaddr)||l.push(f);let u=this.addressSorter==null?cI(l):l.sort(this.addressSorter);if(u.length===0)throw new nh("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:f})=>f.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:f})=>f.toString())),u}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!on.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var mI=$t(hI(),1);var F$=Object.prototype.toString,$$=r=>F$.call(r)==="[object Error]",K$=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function W8(r){return r&&$$(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:K$.has(r.message):!1}var G8=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},pI=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function z8(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=mI.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof G8)throw c.originalError;if(c instanceof TypeError&&!W8(c))throw c;if(pI(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){pI(l,a,e),s(),n(l)}}})})}var a2=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new cr({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);gI(t)&&(this.queue.has(e)||this.queue.add(async n=>{await z8(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(is)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>gI(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function gI(r){for(let e of r.tags.keys())if(e.startsWith(is))return!0;return!1}var j8=50,X8={maxConnections:t2,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},c2=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??X8.maxConnections,this.maxConnections<1)throw new D("Connection Manager maxConnections must be greater than 0");this.connections=new or,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>oh(n)),this.deny=(t.deny??[]).map(n=>oh(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??X8.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new xu({points:t.inboundConnectionThreshold??X8.inboundConnectionThreshold,duration:1}),this.connectionPruner=new n2({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>ne(n))}),this.dialQueue=new s2(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??r2,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Ac},connections:this.connections}),this.reconnectQueue=new a2({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await sr(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await Tr(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new Sn("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=e2(e);if(this.peerId.equals(n))throw new wl("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new ae("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??j8});if(o.status!=="open")throw new gl("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new as("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>ne(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var vu=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var q$=1.2,j$=2,W$=2e3,Bo=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new vu(e.interval??5e3),this.failure=new vu(e.interval??5e3),this.next=new vu(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??j$,this.timeoutMultiplier=e.timeoutMultiplier??q$,this.minTimeout=e.minTimeout??W$,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=Ne([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var Y8=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),e}async throw(e){return this.ended=!0,this.error=e,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw this.error??new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=fe(),await ut(this.readNext.promise,t?.signal,t)}};function yI(){return new Y8}var l2=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Yt(r,e){let t=yI();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new J;return{read:async s=>{if(s?.signal?.throwIfAborted(),s?.bytes==null){let{done:c,value:l}=await ut(n.next(),s?.signal);return c===!0?null:l}for(;o.byteLength<s.bytes;){let{value:c,done:l}=await ut(n.next(),s?.signal);if(l===!0)throw new l2("unexpected end of input");o.append(c)}let a=o.sublist(0,s.bytes);return o.consume(s.bytes),a},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var G$=1e4,z$="1.0.0",X$="ping",Y$="ipfs",wI=32,Q$=!0,u2=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??Y$}/${X$}/${z$}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??G$,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??Q$,this.timeout=new Bo({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[ze]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Yt(o);t=Date.now(),await Promise.all([i.write(Wr(wI),{signal:n}),i.read({bytes:wI,signal:n})]),e.rtt=Date.now()-t,await i.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var f2=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:M(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:M(n,"base36")})})??this.get}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new bu("No content routers available");let n=this,o=new Gr;for await(let i of Vr(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new bu("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new bu("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Sn;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Sn;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var d2=globalThis.CustomEvent??Event;async function*Mo(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=fe(),a=fe(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let g of r){if(i.length===t&&(s=fe(),await s.promise),u)break;let w={done:!1};i.push(w),g().then(y=>{w.done=!0,w.ok=!0,w.value=y,o.dispatchEvent(new d2("task-complete"))},y=>{w.done=!0,w.err=y,o.dispatchEvent(new d2("task-complete"))})}c=!0,o.dispatchEvent(new d2("task-complete"))}catch(g){l=g,o.dispatchEvent(new d2("task-complete"))}});function f(){return n?i[0]?.done:!!i.find(g=>g.done)}function*h(){for(;i.length>0&&i[0].done;){let g=i[0];if(i.shift(),g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}function*m(){for(;f();)for(let g=0;g<i.length;g++)if(i[g].done){let w=i[g];if(i.splice(g,1),g--,w.ok)yield w.value;else throw u=!0,s.resolve(),w.err;s.resolve()}}for(;;){if(f()||(a=fe(),await a.promise),l!=null||(n?yield*h():yield*m(),l!=null))throw l;if(c&&i.length===0)break}}var h2=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:M(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new rh("No peer routers available");if(e.toString()===this.peerId.toString())throw new q0("Should not try to find self");let n=this,o=Vr(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Ge}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new rh("No peer routers available");let n=this,o=rn(1024);for await(let i of Mo(async function*(){let s=Vr(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var p2=class extends Le{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=Ne([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=fe(),yield(await Jt(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=Ne([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=Wr(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await ut(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var Q8=32,Z8=64,m2=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new j0(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e)&&n?.force!==!0)throw new W0(`Handler already registered for protocol ${e}`);let o=fu.bind({ignoreUndefined:!0})({maxInboundStreams:Q8,maxOutboundStreams:Z8},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new D("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var g2=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=bm({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ya.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new D("Transport must have a valid tag");if(this.transports.has(t))throw new D(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new Z0(`No transport available for address ${String(e)}`);return t?.onProgress?.(new ae("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new Sn("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new G0)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let f=u.findIndex(h=>h===l);u.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),L5.matches(c)?t.ipv4.attempts++:B5.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),L5.matches(c)&&t.ipv4.success++,B5.matches(c)&&t.ipv6.success++},f=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,f),t.errors.set(c.toString(),f),f}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===ya.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new z0(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
20
+ ${[...t.errors.entries()].map(([i,s])=>`
21
+ ${i}: ${`${s.stack??s}`.split(`
22
+ `).join(`
23
+ `)}
24
+ `).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&n}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var pr="/multistream/1.0.0";var y2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},w2=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},b2=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function ih(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new y2("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new b2("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new w2("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}var Z$=H(`
25
+ `);async function Cc(r,e,t){await r.write(e,t)}async function bI(r,e,t){await r.writeV(e,t)}async function J$(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==Z$[0])throw e.log.error("Invalid mss message - missing newline",t),new Oe("Missing newline");return t.sublist(0,-1)}async function Bs(r,e){let t=await J$(r,e);return M(t.subarray())}async function sh(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return eK(r,e[0],t);let n=ih(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"]',pr,o);let i=H(`${pr}
26
+ `),s=H(`${o}
27
+ `);await bI(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await Bs(n,t);if(t.log.trace('select: read "%s"',a),a===pr&&(t.log.trace("select: reading protocol response"),a=await Bs(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 Cc(n,H(`${c}
28
+ `),t),t.log.trace("select: reading protocol response");let l=await Bs(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Ai("protocol selection failed")}function eK(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=fe(),c=!1,l=!1,u=fe(),f=!1,h=!1,m=fe(),g=ih({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async I=>{let{sink:v}=g.unwrap();await v(async function*(){let R=!1;for await(let q of I){if(l&&await u.promise,c)yield q;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',pr,e,q.byteLength);let j=`${e}
29
+ `;yield new J(Uint8Array.from([19]),H(`${pr}
30
+ `),Ue(j.length),H(j),q).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',pr,e,q.byteLength),c=!0,l=!1,u.resolve(),w().catch(U=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,U)})}R=!0}R||await w()}())};async function w(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await y()),f||(t.log.trace("optimistic: doing read protocol for %s stream",e),await x())}finally{s=!1,i=!0,a.resolve()}}async function y(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',pr,e),await g.writeV([H(`${pr}
31
+ `),H(`${e}
32
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',pr,e)}finally{c=!0,l=!1,u.resolve()}}async function x(){if(h){await m.promise;return}h=!0;try{t.log.trace("optimistic: reading multistream select header");let I=await Bs(g,t);if(t.log.trace('optimistic: read multistream select header "%s"',I),I===pr&&(I=await Bs(g,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',I,e),I!==e)throw new Ai("protocol selection failed")}finally{f=!0,h=!1,m.resolve()}}if(r.source=async function*(){await w(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*g.unwrap().source}(),r.closeRead!=null){let I=r.closeRead.bind(r);r.closeRead=async v=>{i||await w().catch(R=>{t.log.error("could not negotiate protocol before close read",R)}),await I(v)}}if(r.closeWrite!=null){let I=r.closeWrite.bind(r);r.closeWrite=async v=>{i||await w().catch(R=>{t.log.error("could not negotiate protocol before close write",R)}),await I(v)}}if(r.close!=null){let I=r.close.bind(r);r.close=async v=>{let R=[];l&&R.push(u.promise),h&&R.push(m.promise),R.length>0?await ut(Promise.all(R),v?.signal):(i=!0,s=!1,a.resolve()),await I(v)}}return{stream:r,protocol:e}}async function ah(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=ih(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Bs(n,t);if(t.log.trace('handle: read "%s"',o),o===pr){t.log.trace('handle: respond with "%s" for "%s"',pr,o),await Cc(n,H(`${pr}
33
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',pr,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Cc(n,H(`${o}
34
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new J(...e.map(s=>Io.single(H(`${s}
35
+ `))),H(`
36
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await Cc(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Cc(n,H(`na
37
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var rK=500,e7=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[ub]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new Mp("the connection is being closed");if(this.status==="closed")throw new gl("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new bl("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(rK);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function vI(r){return new e7(r)}function oK(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Q8}function iK(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??Z8}function EI(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var x2=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new Y0(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=Ne([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Q0("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=wt(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new ae(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new as(`${t} connection that skipped encryption must have a peer id`);let f=wt(u);c="native",i=f}if(i.equals(this.components.peerId)){let u=new wl("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new ae(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,f;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:g=>{f!=null&&Promise.resolve().then(async()=>{let w=this.components.registrar.getProtocols(),y=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:x,protocol:I}=await ah(g,w,{signal:y,log:g.log,yieldBytes:!1});if(f==null)return;f.log("incoming stream opened on %s",I);let v=oK(I,this.components.registrar);if(EI(I,"inbound",f)===v){let q=new Kp(`Too many inbound protocol streams for protocol "${I}" - limit ${v}`);throw g.abort(q),q}g.source=x.source,g.sink=x.sink,g.protocol=I,x.closeWrite!=null&&(g.closeWrite=x.closeWrite),x.closeRead!=null&&(g.closeRead=x.closeRead),x.close!=null&&(g.close=x.close),await this.components.peerStore.merge(s,{protocols:[I]}),this.components.metrics?.trackProtocolStream(g,f),this._onStream({connection:f,stream:g,protocol:I})}).catch(async w=>{f.log.error("error handling incoming stream id %s - %e",g.id,w),g.timeline.close==null&&await g.close()})}}),u=async(g,w={})=>{if(l==null)throw new _c("Connection is not multiplexed");f.log.trace("starting new stream for protocols %s",g);let y=await l.newStream();f.log.trace("started new stream %s for protocols %s",y.id,g);try{if(w.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",g);let q=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);w={...w,signal:q}}y.log.trace("selecting protocol from protocols %s",g);let{stream:x,protocol:I}=await sh(y,g,{...w,log:y.log,yieldBytes:!0});y.log.trace("selected protocol %s",I);let v=iK(I,this.components.registrar,w),R=EI(I,"outbound",f);if(R>=v){let q=new ls(`Too many outbound protocol streams for protocol "${I}" - ${R}/${v}`);throw y.abort(q),q}return await this.components.peerStore.merge(s,{protocols:[I]}),y.source=x.source,y.sink=x.sink,y.protocol=I,x.closeWrite!=null&&(y.closeWrite=x.closeWrite),x.closeRead!=null&&(y.closeRead=x.closeRead),x.close!=null&&(y.close=x.close),this.components.metrics?.trackProtocolStream(y,f),y}catch(x){throw f.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,g,x),y.timeline.close==null&&y.abort(x),x}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(g=>{f.log.error("error piping data through muxer - %e",g)}));let h=o.timeline;o.timeline=new Proxy(h,{set:(...g)=>(g[1]==="close"&&g[2]!=null&&h.close==null&&(async()=>{try{f.status==="open"&&await f.close()}catch(w){f.log.error("error closing connection after timeline close %e",w)}finally{this.events.safeDispatchEvent("connection:close",{detail:f})}})().catch(w=>{f.log.error("error thrown while dispatching connection:close event %e",w)}),Reflect.set(...g))}),o.timeline.upgraded=Date.now();let m=()=>{throw new _c("Connection is not multiplexed")};return f=vI({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??m,getStreams:()=>l?.streams??[],close:async g=>{await l?.close(g),await o.close(g)},abort:g=>{o.abort(g),l?.abort(g)}}),this.events.safeDispatchEvent("connection:open",{detail:f}),f.__maConnTimeline=h,f}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new bl("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await ah(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Ic(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Ic(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await sh(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Ic(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Ic(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:i,protocol:s}=await sh(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new _c(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await ah(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new _c(String(i))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var v2="2.8.5",E2="js-libp2p";function S2(r,e){return`${r??E2}/${e??v2} browser/${globalThis.navigator.userAgent}`}var A2=class extends Le{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new Le,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),f=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||f},this.peerId=e.peerId,this.logger=e.logger??fs(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??E2,i=e.nodeInfo?.version??v2,s=this.components=J_({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??S2(o,i)},logger:this.logger,events:t,datastore:e.datastore??new sc,connectionGater:tI(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",W_(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(f=>f.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new x2(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new g2(this.components,e.transportManager)),this.configureComponent("connectionManager",new c2(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new u2(this.components,e.connectionMonitor)),this.configureComponent("registrar",new m2(this.components)),this.configureComponent("addressManager",new K0(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new h2(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new f2(this.components,{routers:c})),this.configureComponent("randomWalk",new p2(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",h=>{this.#e(h)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],f=u(this.components);if(f==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=f,this.configureComponent(l,f),f[jo]!=null&&(this.log("registering service %s for content routing",l),c.push(f[jo])),f[Wo]!=null&&(this.log("registering service %s for peer routing",l),a.push(f[Wo])),f[ga]!=null&&(this.log("registering service %s for peer discovery",l),f[ga].addEventListener?.("peer",h=>{this.#e(h)}))}eI(s)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Gr;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new D("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new D("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Ps(e)&&(e=wt(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=st([H("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=Mt(o);return await this.peerStore.patch(e,{publicKey:i}),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function AI(r={}){r.privateKey??=await Xl("Ed25519");let e=new A2({...await N_(r),peerId:xS(r.privateKey)});return r.start!==!1&&await e.start(),e}var _2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},I2=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},T2=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function t7(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new _2("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new T2("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new I2("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function r7(){let r=fe(),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 _I(){let r=r7(),e=r7();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Eu=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function TI(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function C2(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function k2(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function Ur(r,...e){if(!TI(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function n7(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 CI(r,e){Ur(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function ji(r){return new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4))}function Wi(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function sK(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}var aK=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function cK(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function P2(r){if(typeof r=="string")r=cK(r);else if(TI(r))r=R2(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function kI(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function PI(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 o7=(r,e)=>{function t(n,...o){if(Ur(n),!aK)throw new Error("Non little-endian hardware is not yet supported");if(r.nonceLength!==void 0){let u=o[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?Ur(u):Ur(u,r.nonceLength)}let i=r.tagLength;i&&o[1]!==void 0&&Ur(o[1]);let s=e(n,...o),a=(u,f)=>{if(f!==void 0){if(u!==2)throw new Error("cipher output not supported");Ur(f)}},c=!1;return{encrypt(u,f){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Ur(u),a(s.encrypt.length,f),s.encrypt(u,f)},decrypt(u,f){if(Ur(u),i&&u.length<i)throw new Error("invalid ciphertext length: smaller than tagLength="+i);return a(s.decrypt.length,f),s.decrypt(u,f)}}}return Object.assign(t,r),t};function i7(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!lK(e))throw new Error("invalid output, must be aligned");return e}function II(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function RI(r,e,t){C2(t);let n=new Uint8Array(16),o=sK(n);return II(o,0,BigInt(e),t),II(o,8,BigInt(r),t),n}function lK(r){return r.byteOffset%4===0}function R2(r){return Uint8Array.from(r)}var DI=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),uK=DI("expand 16-byte k"),fK=DI("expand 32-byte k"),dK=ji(uK),hK=ji(fK);function de(r,e){return r<<e|r>>>32-e}function s7(r){return r.byteOffset%4===0}var N2=64,pK=16,OI=2**32-1,NI=new Uint32Array;function mK(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(N2),u=ji(l),f=s7(o)&&s7(i),h=f?ji(o):NI,m=f?ji(i):NI;for(let g=0;g<c;s++){if(r(e,t,n,u,s,a),s>=OI)throw new Error("arx: counter overflow");let w=Math.min(N2,c-g);if(f&&w===N2){let y=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let x=0,I;x<pK;x++)I=y+x,m[I]=h[I]^u[x];g+=N2;continue}for(let y=0,x;y<w;y++)x=g+y,i[x]=o[x]^l[y];g+=w}}function a7(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=kI({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return k2(o),k2(s),C2(i),C2(t),(a,c,l,u,f=0)=>{Ur(a),Ur(c),Ur(l);let h=l.length;if(u===void 0&&(u=new Uint8Array(h)),Ur(u),k2(f),f<0||f>=OI)throw new Error("arx: counter overflow");if(u.length<h)throw new Error(`arx: output (${u.length}) is shorter than data (${h})`);let m=[],g=a.length,w,y;if(g===32)m.push(w=R2(a)),y=hK;else if(g===16&&t)w=new Uint8Array(32),w.set(a),w.set(a,16),y=dK,m.push(w);else throw new Error(`arx: invalid 32-byte key, got length=${g}`);s7(c)||m.push(c=R2(c));let x=ji(w);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,x,ji(c.subarray(0,16)),x),c=c.subarray(16)}let I=16-o;if(I!==c.length)throw new Error(`arx: nonce must be ${I} or 16 bytes`);if(I!==12){let R=new Uint8Array(12);R.set(c,i?0:12-c.length),c=R,m.push(c)}let v=ji(c);return mK(r,y,x,v,l,u,f,s),Wi(...m),u}}var mr=(r,e)=>r[e++]&255|(r[e++]&255)<<8,c7=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=P2(e),Ur(e,32);let t=mr(e,0),n=mr(e,2),o=mr(e,4),i=mr(e,6),s=mr(e,8),a=mr(e,10),c=mr(e,12),l=mr(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let u=0;u<8;u++)this.pad[u]=mr(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],f=s[4],h=s[5],m=s[6],g=s[7],w=s[8],y=s[9],x=mr(e,t+0),I=mr(e,t+2),v=mr(e,t+4),R=mr(e,t+6),q=mr(e,t+8),j=mr(e,t+10),U=mr(e,t+12),P=mr(e,t+14),N=i[0]+(x&8191),X=i[1]+((x>>>13|I<<3)&8191),G=i[2]+((I>>>10|v<<6)&8191),$=i[3]+((v>>>7|R<<9)&8191),oe=i[4]+((R>>>4|q<<12)&8191),L=i[5]+(q>>>1&8191),B=i[6]+((q>>>14|j<<2)&8191),K=i[7]+((j>>>11|U<<5)&8191),O=i[8]+((U>>>8|P<<8)&8191),_=i[9]+(P>>>5|o),k=0,z=k+N*a+X*(5*y)+G*(5*w)+$*(5*g)+oe*(5*m);k=z>>>13,z&=8191,z+=L*(5*h)+B*(5*f)+K*(5*u)+O*(5*l)+_*(5*c),k+=z>>>13,z&=8191;let re=k+N*c+X*a+G*(5*y)+$*(5*w)+oe*(5*g);k=re>>>13,re&=8191,re+=L*(5*m)+B*(5*h)+K*(5*f)+O*(5*u)+_*(5*l),k+=re>>>13,re&=8191;let V=k+N*l+X*c+G*a+$*(5*y)+oe*(5*w);k=V>>>13,V&=8191,V+=L*(5*g)+B*(5*m)+K*(5*h)+O*(5*f)+_*(5*u),k+=V>>>13,V&=8191;let xe=k+N*u+X*l+G*c+$*a+oe*(5*y);k=xe>>>13,xe&=8191,xe+=L*(5*w)+B*(5*g)+K*(5*m)+O*(5*h)+_*(5*f),k+=xe>>>13,xe&=8191;let Pe=k+N*f+X*u+G*l+$*c+oe*a;k=Pe>>>13,Pe&=8191,Pe+=L*(5*y)+B*(5*w)+K*(5*g)+O*(5*m)+_*(5*h),k+=Pe>>>13,Pe&=8191;let he=k+N*h+X*f+G*u+$*l+oe*c;k=he>>>13,he&=8191,he+=L*a+B*(5*y)+K*(5*w)+O*(5*g)+_*(5*m),k+=he>>>13,he&=8191;let De=k+N*m+X*h+G*f+$*u+oe*l;k=De>>>13,De&=8191,De+=L*c+B*a+K*(5*y)+O*(5*w)+_*(5*g),k+=De>>>13,De&=8191;let tt=k+N*g+X*m+G*h+$*f+oe*u;k=tt>>>13,tt&=8191,tt+=L*l+B*c+K*a+O*(5*y)+_*(5*w),k+=tt>>>13,tt&=8191;let Qe=k+N*w+X*g+G*m+$*h+oe*f;k=Qe>>>13,Qe&=8191,Qe+=L*u+B*l+K*c+O*a+_*(5*y),k+=Qe>>>13,Qe&=8191;let lt=k+N*y+X*w+G*g+$*m+oe*h;k=lt>>>13,lt&=8191,lt+=L*f+B*u+K*l+O*c+_*a,k+=lt>>>13,lt&=8191,k=(k<<2)+k|0,k=k+z|0,z=k&8191,k=k>>>13,re+=k,i[0]=z,i[1]=re,i[2]=V,i[3]=xe,i[4]=Pe,i[5]=he,i[6]=De,i[7]=tt,i[8]=Qe,i[9]=lt}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;Wi(n)}update(e){n7(this),e=P2(e),Ur(e);let{buffer:t,blockLen:n}=this,o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){Wi(this.h,this.r,this.buffer,this.pad)}digestInto(e){n7(this),CI(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function gK(r){let e=(n,o)=>r(o).update(P2(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var LI=gK(r=>new c7(r));function UI(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],f=e[1],h=e[2],m=e[3],g=e[4],w=e[5],y=e[6],x=e[7],I=o,v=t[0],R=t[1],q=t[2],j=s,U=a,P=c,N=l,X=u,G=f,$=h,oe=m,L=g,B=w,K=y,O=x,_=I,k=v,z=R,re=q;for(let xe=0;xe<i;xe+=2)j=j+X|0,_=de(_^j,16),L=L+_|0,X=de(X^L,12),j=j+X|0,_=de(_^j,8),L=L+_|0,X=de(X^L,7),U=U+G|0,k=de(k^U,16),B=B+k|0,G=de(G^B,12),U=U+G|0,k=de(k^U,8),B=B+k|0,G=de(G^B,7),P=P+$|0,z=de(z^P,16),K=K+z|0,$=de($^K,12),P=P+$|0,z=de(z^P,8),K=K+z|0,$=de($^K,7),N=N+oe|0,re=de(re^N,16),O=O+re|0,oe=de(oe^O,12),N=N+oe|0,re=de(re^N,8),O=O+re|0,oe=de(oe^O,7),j=j+G|0,re=de(re^j,16),K=K+re|0,G=de(G^K,12),j=j+G|0,re=de(re^j,8),K=K+re|0,G=de(G^K,7),U=U+$|0,_=de(_^U,16),O=O+_|0,$=de($^O,12),U=U+$|0,_=de(_^U,8),O=O+_|0,$=de($^O,7),P=P+oe|0,k=de(k^P,16),L=L+k|0,oe=de(oe^L,12),P=P+oe|0,k=de(k^P,8),L=L+k|0,oe=de(oe^L,7),N=N+X|0,z=de(z^N,16),B=B+z|0,X=de(X^B,12),N=N+X|0,z=de(z^N,8),B=B+z|0,X=de(X^B,7);let V=0;n[V++]=s+j|0,n[V++]=a+U|0,n[V++]=c+P|0,n[V++]=l+N|0,n[V++]=u+X|0,n[V++]=f+G|0,n[V++]=h+$|0,n[V++]=m+oe|0,n[V++]=g+L|0,n[V++]=w+B|0,n[V++]=y+K|0,n[V++]=x+O|0,n[V++]=I+_|0,n[V++]=v+k|0,n[V++]=R+z|0,n[V++]=q+re|0}function yK(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],f=e[3],h=e[4],m=e[5],g=e[6],w=e[7],y=t[0],x=t[1],I=t[2],v=t[3];for(let q=0;q<20;q+=2)o=o+c|0,y=de(y^o,16),h=h+y|0,c=de(c^h,12),o=o+c|0,y=de(y^o,8),h=h+y|0,c=de(c^h,7),i=i+l|0,x=de(x^i,16),m=m+x|0,l=de(l^m,12),i=i+l|0,x=de(x^i,8),m=m+x|0,l=de(l^m,7),s=s+u|0,I=de(I^s,16),g=g+I|0,u=de(u^g,12),s=s+u|0,I=de(I^s,8),g=g+I|0,u=de(u^g,7),a=a+f|0,v=de(v^a,16),w=w+v|0,f=de(f^w,12),a=a+f|0,v=de(v^a,8),w=w+v|0,f=de(f^w,7),o=o+l|0,v=de(v^o,16),g=g+v|0,l=de(l^g,12),o=o+l|0,v=de(v^o,8),g=g+v|0,l=de(l^g,7),i=i+u|0,y=de(y^i,16),w=w+y|0,u=de(u^w,12),i=i+u|0,y=de(y^i,8),w=w+y|0,u=de(u^w,7),s=s+f|0,x=de(x^s,16),h=h+x|0,f=de(f^h,12),s=s+f|0,x=de(x^s,8),h=h+x|0,f=de(f^h,7),a=a+c|0,I=de(I^a,16),m=m+I|0,c=de(c^m,12),a=a+c|0,I=de(I^a,8),m=m+I|0,c=de(c^m,7);let R=0;n[R++]=o,n[R++]=i,n[R++]=s,n[R++]=a,n[R++]=y,n[R++]=x,n[R++]=I,n[R++]=v}var wK=a7(UI,{counterRight:!1,counterLength:4,allowShortKeys:!1}),bK=a7(UI,{counterRight:!1,counterLength:8,extendNonceFn:yK,allowShortKeys:!1});var xK=new Uint8Array(16),BI=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(xK.subarray(t))},vK=new Uint8Array(32);function MI(r,e,t,n,o){let i=r(e,t,vK),s=LI.create(i);o&&BI(s,o),BI(s,n);let a=RI(n.length,o?o.length:0,!0);s.update(a);let c=s.digest();return Wi(i,a),c}var FI=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=i7(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=MI(r,e,t,c,n);return s.set(l,a),Wi(l),s},decrypt(i,s){s=i7(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=MI(r,e,t,a,n);if(!PI(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),Wi(l),s}}),l7=o7({blockSize:64,nonceLength:12,tagLength:16},FI(wK)),y1e=o7({blockSize:64,nonceLength:24,tagLength:16},FI(bK));function KI(r,e,t){return Na(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Ts(r,bs(t),bs(e))}var u7=Uint8Array.from([0]),$I=Uint8Array.of();function VI(r,e,t,n=32){Na(r),Zo(n);let o=r.outputLen;if(n>255*o)throw new Error("Length should be <= 255*HashLen");let i=Math.ceil(n/o);t===void 0&&(t=$I);let s=new Uint8Array(i*o),a=Ts.create(r,e),c=a._cloneInto(),l=new Uint8Array(a.outputLen);for(let u=0;u<i;u++)u7[0]=u+1,c.update(u===0?$I:l).update(t).update(u7).digestInto(l),s.set(l,o*u),a._cloneInto(c);return a.destroy(),c.destroy(),Nr(l,u7),s.slice(0,n)}var f7={hashSHA256(r){return oi(r.subarray())},getHKDF(r,e){let t=KI(oi,e,r),o=VI(oi,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=rd.utils.randomPrivateKey();return{publicKey:rd.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:rd.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return rd.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return l7(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return l7(n,e,t).decrypt(r.subarray(),o)}};var HI=f7;function qI(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Su=r=>{let e=It(2);return e[0]=r>>8,e[1]=r,e};Su.bytes=2;var ch=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)};ch.bytes=2;function jI(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 d7(r,e){!e.enabled||!Eu||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${M(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${M(r.privateKey,"hex")}`)):e("Missing local static keys."))}function h7(r,e){!e.enabled||!Eu||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${M(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${M(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function WI(r,e){!e.enabled||!Eu||e(r?`REMOTE_STATIC_PUBLIC_KEY ${M(r.subarray(),"hex")}`:"Missing remote static public key.")}function p7(r,e){!e.enabled||!Eu||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${M(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function m7(r,e,t){!t.enabled||!Eu||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&M(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&M(e.k,"hex")}`))}function fn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=It(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Au=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var EK=0,SK=4294967295,AK="Cipherstate has reached maximum n, a new handshake must be performed",D2=class{n;bytes;view;constructor(e=EK){this.n=e,this.bytes=ke(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>SK)throw new Error(AK)}};var kc=ke(0),_u=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new D2(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}},g7=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=H(t,"utf-8");this.h=_K(e,n),this.ck=this.h,this.cs=new _u(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new _u(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new J(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,kc);return[new _u(this.crypto,e),new _u(this.crypto,t)]}},y7=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new g7(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},lh=class extends y7{writeMessageA(e){return new J(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new J(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new J(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Au(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Au(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Au(`handshake stage 2 validation fail: ${t.message}`)}}};function _K(r,e){if(e.length<=32){let t=ke(32);return t.set(e),t}else return r.hash(e)}var O2;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);if(t.streamMuxers!=null)for(let i of t.streamMuxers)n.uint32(18),n.string(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&i.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new at('Decode error - map field "webtransportCerthashes" had too many elements');i.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&i.streamMuxers.length===o.limits.streamMuxers)throw new at('Decode error - map field "streamMuxers" had too many elements');i.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(O2||(O2={}));var uh;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),O2.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:ke(0),identitySig:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.identityKey=t.bytes();break}case 2:{i.identitySig=t.bytes();break}case 4:{i.extensions=O2.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(uh||(uh={}));async function w7(r,e,t){let n=await r.sign(GI(e));return uh.encode({identityKey:tr(r.publicKey),identitySig:n,extensions:t})}async function b7(r,e,t){try{let n=uh.decode(r),o=Mt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=GI(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new Lp(n.message)}}function GI(r){let e=H("noise-libp2p-static-key:");return r instanceof Uint8Array?st([e,r],e.length+r.length):(r.prepend(e),r)}async function zI(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await w7(i,a.publicKey,l),f=new lh({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});d7(f.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(f.writeMessageA(kc),e),t.trace("Stage 0 - Initiator finished sending first message."),h7(f.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let h=f.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),p7(f.re,t),WI(f.rs,t),t.trace("Initiator going to check remote's signature...");let m=await b7(h,f.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(f.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[g,w]=f.ss.split();return m7(g,w,t),{payload:m,encrypt:y=>g.encryptWithAd(kc,y),decrypt:(y,x)=>w.decryptWithAd(kc,y,x)}}async function XI(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await w7(i,a.publicKey,l),f=new lh({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});d7(f.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),f.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),p7(f.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(f.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),h7(f.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let h=f.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let m=await b7(h,f.rs,c),[g,w]=f.ss.split();return m7(g,w,t),{payload:m,encrypt:y=>w.encryptWithAd(kc,y),decrypt:(y,x)=>g.decryptWithAd(kc,y,x)}}var QI=16;function ZI(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new J(Su(s.byteLength),s)}}}function JI(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-QI<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-QI);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var L2=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??HI;this.crypto=qI(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?jI(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ke(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[ze]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=t7(e,{lengthEncoder:Su,lengthDecoder:ch,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=Mt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:ii(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null||e.length===0)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new Bp("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=t7(e,{lengthEncoder:Su,lengthDecoder:ch,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=Mt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:ii(s),streamMuxer:t?.skipStreamMuxerNegotiation===!0?void 0:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o){let i,s=o?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await zI({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:s,webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(a){throw this.metrics?.xxHandshakeErrors.increment(),a}return i}async performHandshakeResponder(e,t,n,o){let i,s=o?.skipStreamMuxerNegotiation===!0?[]:[...this.components.upgrader.getStreamMuxers().keys()];try{i=await XI({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:s,webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(a){throw this.metrics?.xxHandshakeErrors.increment(),a}return i}async createSecureConnection(e,t){let[n,o]=_I(),i=e.unwrap();return await nr(n,ZI(t,this.metrics),i,s=>To(s,{lengthDecoder:ch}),JI(t,this.metrics),n),o}};function B2(r={}){return e=>new L2(e,r)}function M2(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 Uo=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Iu=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Tu=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},U2=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},F2=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},$2=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},K2=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Cu=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var eT=new Set([Uo.name,Iu.name,Tu.name,F2.name,$2.name,K2.name,Cu.name]),dh=256*1024,tT=16*1024*1024;var rT={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:dh,maxStreamWindowSize:tT,maxMessageSize:64*1024};function nT(r){if(r.keepAliveInterval<=0)throw new D("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new D("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new D("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<dh)throw new D("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new D("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new D("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new D("MaxMessageSize must be greater than a kilobyte")}var Rt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Rt||(Rt={}));var St;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(St||(St={}));var zme=Object.values(St).filter(r=>typeof r!="string"),oT=0,Jn;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Jn||(Jn={}));var Ms=12;var iT=2**24;function IK(r){if(r[0]!==oT)throw new Uo("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*iT+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*iT+(r[9]<<16)+(r[10]<<8)+r[11]}}var V2=class{source;buffer;frameInProgress;constructor(e){this.source=TK(e),this.buffer=new J,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Rt.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new U2("decoding frame already in progress");if(this.buffer.length<Ms)return;let e=IK(this.buffer.subarray(0,Ms));return this.buffer.consume(Ms),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 TK(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 x7(r){let e=new Uint8Array(Ms);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 sT(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function H2(r,e){let t=M2(r).return?.();sT(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var CK=5e3;function v7(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Us=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=fe(),this.closed=fe(),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??CK,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=en({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 wa(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);v7(o)&&await o}let n=()=>{H2(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new J(o):o;let i=this.sendData(o,t);v7(i)&&(this.sendingData=fe(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await ut(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 ut(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await ut(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await ut(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();v7(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 Up("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var eo;(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"})(eo||(eo={}));var q2=class extends Us{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=eo.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=dh,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Ca(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-Ms,e.length),o=this.getSendFlags();this.sendFrame({type:Rt.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Rt.WindowUpdate,flag:St.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|St.FIN;this.sendFrame({type:Rt.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 ir("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Cu("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&St.ACK)===St.ACK&&this.state===eo.SYNSent&&(this.state=eo.Established),(e&St.FIN)===St.FIN&&this.remoteCloseWrite(),(e&St.RST)===St.RST&&this.reset()}getSendFlags(){switch(this.state){case eo.Init:return this.state=eo.SYNSent,St.SYN;case eo.SYNReceived:return this.state=eo.Established,St.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:Rt.WindowUpdate,flag:e,streamID:this._id,length:o})}};var aT="/yamux/1.0.0",kK=500,j2=class{protocol=aT;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[ze]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new E7(this._components,{...this._init,...e})}},E7=class{protocol=aT;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={...rT,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),nT(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=en({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=M2(n);if(a.return!=null){let c=a.return();PK(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new V2(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Jn.NormalTermination}catch(a){eT.has(a.name)?(this.log?.error("protocol error in sink",a),i=Jn.ProtocolError):(this.log?.error("internal error in sink",a),i=Jn.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new Go("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Go("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new ls("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,eo.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new Go("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Go("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new Go("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Jn.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(kK);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??Jn.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new D("Stream already exists with that id");let i=new q2({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Rt.Ping:{this.handlePing(e);return}case Rt.GoAway:{this.handleGoAway(i);return}default:throw new Uo("Invalid frame type")}else switch(e.type){case Rt.Data:case Rt.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new Uo("Invalid frame type")}}handlePing(e){if(e.flag===St.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,St.ACK);else if(e.flag===St.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Uo("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Iu("ping not requested");if(this.activePing.id!==e)throw new Tu("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Jn[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&St.SYN)===St.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Rt.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Rt.WindowUpdate:{s.handleWindowUpdate(e);return}case Rt.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new D("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Rt.WindowUpdate,flag:St.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Rt.WindowUpdate,flag:St.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,eo.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===Rt.Data){if(t===void 0)throw new Uo("Invalid frame");this.source.push(new J(x7(e),t))}else this.source.push(x7(e))}sendPing(e,t=St.SYN){t===St.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Rt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Jn.NormalTermination){this.log?.("sending GoAway reason=%s",Jn[e]),this.localGoAway=e,this.sendFrame({type:Rt.GoAway,flag:0,streamID:0,length:e})}};function PK(r){return r!=null&&typeof r.then=="function"}function cT(r={}){return e=>new j2(e,r)}var RK=41;function W2(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===RK)return jS("2000::/3",t)}catch{}return!1}function lT(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=Ne([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}var G2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},z2=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},X2=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function uT(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new G2("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new X2("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new z2("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function S7(r,e){let t=uT(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var fT="libp2p",dT="autonat",hT="1.0.0";var bt;(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=()=>vt(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=()=>vt(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=_e((f,h,m={})=>{if(m.lengthDelimited!==!1&&h.fork(),f.id!=null&&(h.uint32(10),h.bytes(f.id)),f.addrs!=null)for(let g of f.addrs)h.uint32(18),h.bytes(g);m.lengthDelimited!==!1&&h.ldelim()},(f,h,m={})=>{let g={addrs:[]},w=h==null?f.len:f.pos+h;for(;f.pos<w;){let y=f.uint32();switch(y>>>3){case 1:{g.id=f.bytes();break}case 2:{if(m.limits?.addrs!=null&&g.addrs.length===m.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');g.addrs.push(f.bytes());break}default:{f.skipType(y&7);break}}}return g})),u),l.encode=f=>Ae(f,l.codec()),l.decode=(f,h)=>Se(f,l.codec(),h)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=_e((f,h,m={})=>{m.lengthDelimited!==!1&&h.fork(),f.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(f.peer,h)),m.lengthDelimited!==!1&&h.ldelim()},(f,h,m={})=>{let g={},w=h==null?f.len:f.pos+h;for(;f.pos<w;){let y=f.uint32();switch(y>>>3){case 1:{g.peer=r.PeerInfo.codec().decode(f,f.uint32(),{limits:m.limits?.peer});break}default:{f.skipType(y&7);break}}}return g})),u),l.encode=f=>Ae(f,l.codec()),l.decode=(f,h)=>Se(f,l.codec(),h)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=_e((f,h,m={})=>{m.lengthDelimited!==!1&&h.fork(),f.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(f.status,h)),f.statusText!=null&&(h.uint32(18),h.string(f.statusText)),f.addr!=null&&(h.uint32(26),h.bytes(f.addr)),m.lengthDelimited!==!1&&h.ldelim()},(f,h,m={})=>{let g={},w=h==null?f.len:f.pos+h;for(;f.pos<w;){let y=f.uint32();switch(y>>>3){case 1:{g.status=r.ResponseStatus.codec().decode(f);break}case 2:{g.statusText=f.string();break}case 3:{g.addr=f.bytes();break}default:{f.skipType(y&7);break}}}return g})),u),l.encode=f=>Ae(f,l.codec()),l.decode=(f,h)=>Se(f,l.codec(),h)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=_e((l,u,f={})=>{f.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),f.lengthDelimited!==!1&&u.ldelim()},(l,u,f={})=>{let h={},m=u==null?l.len:l.pos+u;for(;l.pos<m;){let g=l.uint32();switch(g>>>3){case 1:{h.type=r.MessageType.codec().decode(l);break}case 2:{h.dial=r.Dial.codec().decode(l,l.uint32(),{limits:f.limits?.dial});break}case 3:{h.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:f.limits?.dialResponse});break}default:{l.skipType(g&7);break}}}return h})),c),r.encode=l=>Ae(l,r.codec()),r.decode=(l,u)=>Se(l,r.codec(),u)})(bt||(bt={}));var MK=4,UK=8,Y2=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??fT}/${dT}/${hT}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=new Map,this.findPeers=lT(this.findRandomPeers.bind(this),6e4),this.addressFilter=rn(1024)}[Symbol.toStringTag]="@libp2p/autonat";[ze]=["@libp2p/autonat"];get[An](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=Ne([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout);let n=S7(e.stream,{maxDataLength:this.maxMessageSize}).pb(bt);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(f=>f.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let f=Xe(a.id);s=Vt(f)}catch(f){return this.log.error("invalid PeerId - %e",f),{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(f=>ne(f)).filter(f=>{let h=f.toOptions();return Qn(f)?!1:h.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",f,t.remoteAddr),!1):o.includes(h.host)?!1:this.components.transportManager.dialTransportForMultiaddr(f)==null?(this.log.trace("not dialing %a - transport unsupported",f),!1):!0}).map(f=>(f.getPeerId()==null&&(f=f.encapsulate(`/p2p/${s.toString()}`)),f));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(f=>f.toString()).join(", "),s);let l="",u=c[0];for await(let f of c){let h;u=f;try{if(h=await this.components.connectionManager.openConnection(f,n),!h.remoteAddr.equals(f))throw this.log.error("tried to dial %a but dialed %a",f,h.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,f),{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.OK,addr:h.remoteAddr.decapsulateCode(Ie("p2p").code).bytes}}}catch(m){this.log.error("could not dial %p - %e",s,m),l=m.message}finally{h!=null&&await h.close()}}return{type:bt.MessageType.DIAL_RESPONSE,dialResponse:{status:bt.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||o.multiaddr.toOptions().family===6&&(!t||!W2(o.multiaddr))||Qn(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:S5(),queue:new cr({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>s.toOptions().family===6),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=S7(s).pb(bt),[,c]=await Promise.all([a.write({type:bt.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==bt.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==bt.ResponseStatus.OK&&l!==bt.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===bt.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===bt.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===MK&&this.confirmAddress(o),o.failure===UK&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function pT(r={}){return e=>new Y2(e,r)}var FK=se("dns4"),$K=se("dns6"),KK=se("dnsaddr"),Rc=Ft(se("dns"),KK,FK,$K),J2=Ft(se("ip4"),se("ip6")),ku=Ft(Te(J2,se("tcp")),Te(Rc,se("tcp"))),eg=Te(J2,se("udp")),VK=Te(eg,se("utp")),HK=Te(eg,se("quic")),qK=Te(eg,se("quic-v1")),A7=Ft(Te(ku,se("ws")),Te(Rc,se("ws"))),Q2=Ft(Te(A7,se("p2p")),A7),_7=Ft(Te(ku,se("wss")),Te(Rc,se("wss")),Te(ku,se("tls"),se("ws")),Te(Rc,se("tls"),se("ws"))),Z2=Ft(Te(_7,se("p2p")),_7),I7=Ft(Te(ku,se("http")),Te(J2,se("http")),Te(Rc,se("http"))),T7=Ft(Te(ku,se("https")),Te(J2,se("https")),Te(Rc,se("https"))),mT=Te(eg,se("webrtc-direct"),se("certhash")),wT=Ft(Te(mT,se("p2p")),mT),gT=Te(qK,se("webtransport"),se("certhash"),se("certhash")),bT=Ft(Te(gT,se("p2p")),gT),xT=Ft(Te(Q2,se("p2p-webrtc-star"),se("p2p")),Te(Z2,se("p2p-webrtc-star"),se("p2p")),Te(Q2,se("p2p-webrtc-star")),Te(Z2,se("p2p-webrtc-star"))),h2e=Ft(Te(Q2,se("p2p-websocket-star"),se("p2p")),Te(Z2,se("p2p-websocket-star"),se("p2p")),Te(Q2,se("p2p-websocket-star")),Te(Z2,se("p2p-websocket-star"))),vT=Ft(Te(I7,se("p2p-webrtc-direct"),se("p2p")),Te(T7,se("p2p-webrtc-direct"),se("p2p")),Te(I7,se("p2p-webrtc-direct")),Te(T7,se("p2p-webrtc-direct"))),Nc=Ft(A7,_7,I7,T7,xT,vT,ku,VK,HK,Rc,wT,bT),p2e=Ft(Te(Nc,se("p2p-stardust"),se("p2p")),Te(Nc,se("p2p-stardust"))),Fs=Ft(Te(Nc,se("p2p")),xT,vT,wT,bT,se("p2p")),yT=Ft(Te(Fs,se("p2p-circuit"),Fs),Te(Fs,se("p2p-circuit")),Te(se("p2p-circuit"),Fs),Te(Nc,se("p2p-circuit")),Te(se("p2p-circuit"),Nc),se("p2p-circuit")),ET=()=>Ft(Te(yT,ET),yT),Pc=ET(),ST=Ft(Te(Pc,Fs,Pc),Te(Fs,Pc),Te(Pc,Fs),Pc,Fs);var m2e=Ft(Te(Pc,se("webrtc"),se("p2p")),Te(Pc,se("webrtc")),Te(Nc,se("webrtc"),se("p2p")),Te(Nc,se("webrtc")),se("webrtc"));function AT(r){function e(t){let n;try{n=ne(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function Te(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:AT(e),partialMatch:e}}function Ft(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:AT(e),partialMatch:e}}function se(r){let e=r;function t(o){let i;try{i=ne(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var jK="bootstrap",WK=50,GK=1e3,C7=class extends Le{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??GK,this.list=[];for(let n of t.list){if(!ST.matches(n)){this.log.error("Invalid multiaddr");continue}let o=ne(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:wt(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[ga]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[ze]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??jK]:{value:this._init.tagValue??WK,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function _T(r){return e=>new C7(e,r)}var tg=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},rg=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},ng=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function IT(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new tg("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new ng("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new rg("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function hh(r,e){let t=IT(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var k7=1e3,TT=60*k7,CT=290;var P2e=2*60*TT,kT=1,og=2e3,PT=100;var ph=`${is}-circuit-relay`,R2e=`${is}-circuit-relay-source`,N2e=2*TT,D2e=BigInt(1<<17),Dc="/libp2p/circuit/relay/0.2.0/hop",P7="/libp2p/circuit/relay/0.2.0/stop",O2e=30*k7,L2e=30*k7,R7=300,RT=4096,NT=.001;var $s;(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=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Pu.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),ig.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),Ru.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),gr.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Pu.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=ig.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=Ru.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=gr.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})($s||($s={}));var ui;(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=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),Pu.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),Ru.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),gr.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=Pu.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=Ru.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=gr.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(ui||(ui={}));var Pu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Pu||(Pu={}));var ig;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),ag.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=ag.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(ig||(ig={}));var Ru;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ru||(Ru={}));var gr;(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"})(gr||(gr={}));var N7;(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"})(N7||(N7={}));(function(r){r.codec=()=>vt(N7)})(gr||(gr={}));var sg;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:ke(0),peer:ke(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(sg||(sg={}));var ag;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),sg.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=sg.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(ag||(ag={}));var mh=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},cg=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},lg=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function D7(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var gh=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},ug=ot(He(Rm.matchers[0],Be("p2p-circuit"))),fg=ot(Be("p2p-circuit"));function O7(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async g=>{await l(g),m(!0)};let u=e.abort.bind(e);e.abort=g=>{u(g),m(!0)};let f=e.sink.bind(e);e.sink=async g=>{try{await f(nr(g,w=>Ca(w,y=>i?.(y))))}catch(w){w.type!=="aborted"&&s.error("%s error in sink",t,w)}finally{c=!0,m()}};let h={log:s,sink:e.sink,source:async function*(){try{for await(let g of e.source)o?.(g),yield g}finally{a=!0,m()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function m(g){g===!0&&(a=!0,c=!0),a&&c&&h.timeline.close==null&&(h.timeline.close=Date.now())}return h}var dg=class extends Le{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Dc,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Dc)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=DT(n),s=DT(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new cr({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(async()=>{let o=Ne([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function DT(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(M(e)).getTime()}var L7=class extends Le{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??og,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(fg.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(ug.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new ba(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>ne(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function OT(r){return new L7(r)}var LT="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var BT=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=LT[t[r]&63];return e};var zK=60*1e3*10,XK=60*1e3*5,YK=30*1e3,hg=class extends Le{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new or,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??PT,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??og,this.started=!1,this.relayFilter=rn(100),this.reserveQueue=new cr({concurrency:t?.reservationConcurrency??kT,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(ph)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[ph]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=BT();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new ba("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new lg("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new ba("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let g=this.connectionManager.getConnections(e),w=!1;if(g.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),g.map(y=>y.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),w=!0),w&&D7(i.reservation.expire)>zK)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new mh("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(on.matches(a.remoteAddr))throw new cg("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=D7(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-XK,YK),Math.pow(2,31)-1),f=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async g=>{this.log.error("could not refresh reservation to relay %p - %e",e,g),await this.#t(e)}).catch(g=>{this.log.error("could not remove expired reservation to relay %p - %e",e,g)})},u),h;if(t==="discovered"){let g=this.pendingReservations.pop();if(g==null)throw new mh("Made reservation on relay but did not need any more discovered relays");h={timeout:f,reservation:c,type:t,connection:a.id,id:g}}else h={timeout:f,reservation:c,type:t,connection:a.id};this.reservations.set(e,h),await this.peerStore.merge(e,{tags:{[ph]:{value:1,ttl:l}}}),this.#r();let m={relay:e,details:h};return this.safeDispatchEvent("relay:created-reservation",{detail:m}),m}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Dc,t),i=hh(n).pb($s);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:$s.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %o",s),s.status===gr.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=ne(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=ne(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>ne(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[ph]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=rn(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var QK=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(ne)}catch{return!1}return!0},MT={maxInboundStopStreams:R7,maxOutboundStopStreams:R7,stopTimeout:3e4},pg=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??MT.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??MT.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new dg(e,{filter:t.discoveryFilter??A5(RT,NT)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,o)})}),this.reservationStore=new hg(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[ze]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[An](){return this.discovery!=null?["@libp2p/identify"]:[]}[ss]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(P7,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await sr(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await Tr(this.discovery,this.reservationStore),await this.registrar.unhandle(P7),this.started=!1}async dial(e,t){if(e.protoCodes().filter(m=>m===CT).length!==1){let m="Invalid circuit relay address";throw this.log.error(m,e),new _i(m)}let n=e.toString().split("/p2p-circuit"),o=ne(n[0]),i=ne(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let m=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${m}`),new _i(`C${m}`)}let c=wt(s),l=wt(a),f=this.connectionManager.getConnections(c)[0];f==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new ae("circuit-relay:open-connection")),f=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new ae("circuit-relay:reuse-connection"));let h;try{t.onProgress?.(new ae("circuit-relay:open-hop-stream")),h=await f.newStream(Dc,t);let m=hh(h),g=m.pb($s);t.onProgress?.(new ae("circuit-relay:write-connect-message")),await g.write({type:$s.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[ne(i).bytes]}},t),t.onProgress?.(new ae("circuit-relay:read-connect-response"));let w=await g.read(t);if(w.status!==gr.OK)throw new Oe(`failed to connect via relay with status ${w?.status?.toString()??"undefined"}`);let y=new gh(w.limit),x=O7({stream:m.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:y.onData,onDataWrite:y.onData});return this.log("new outbound relayed connection %a",x.remoteAddr),await this.upgrader.upgradeOutbound(x,{...t,limits:y.getLimits()})}catch(m){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,m),h?.abort(m),m}}createListener(e){return OT({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>ug.exactMatch(t)||fg.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>on.exactMatch(t))}async onStop({connection:e,stream:t},n){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(f){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",f)}let o=hh(t).pb(ui),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:ui.Type.STATUS,status:gr.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==ui.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:ui.Type.STATUS,status:gr.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!QK(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:ui.Type.STATUS,status:gr.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=Vt(Xe(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:ui.Type.STATUS,status:gr.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:ui.Type.STATUS,status:gr.OK},{signal:n});let a=new gh(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=O7({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function B7(r={}){return e=>new pg(e,r)}var mg=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},gg=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},yg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function UT(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new mg("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new yg("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new gg("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function M7(r,e){let t=UT(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Fo;(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=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new at('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Fo||(Fo={}));function U7(r,e){return on.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:Td.matches(r)?!0:NS.matches(r)?zr(r.toOptions().host)===!1:!1}var FT=1024*4,$T=100,wg={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},bg=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??wg.timeout,this.retries=t.retries??wg.retries,this.maxInboundStreams=t.maxInboundStreams??wg.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??wg.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[An]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(yh,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{on.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(yh,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(yh),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([yh],{signal:o.signal,runOnLimitedConnection:!0});let i=M7(t,{maxDataLength:FT}).pb(Fo);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:Fo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(f=>f.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==Fo.Type.CONNECT)throw this.log("A sent wrong message type"),new Oe("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new Oe("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:Fo.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await J0(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:$T,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>U7(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(on.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=M7(e,{maxDataLength:FT}).pb(Fo);this.log("A receiving connect");let i=await o.read(n);if(i.type!==Fo.Type.CONNECT)throw this.log("B sent wrong message type"),new Oe("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new Oe("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new Oe("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:Fo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Fo.Type.SYNC)throw new Oe("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:$T,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=ne(n);if(!U7(o,this.transportManager))continue;t.push(o)}catch{}return t}};var yh="/libp2p/dcutr";function KT(r={}){return e=>new bg(e,r)}var xg=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},vg=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Eg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function VT(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new xg("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Eg("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new vg("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Nu(r,e){let t=VT(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var HT="0.1.0",qT="id",jT="id/push",WT="1.0.0",GT="1.0.0";var Ks;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new at('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new at('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ks||(Ks={}));var dn={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function zT(r){if(r!=null&&r.length>0)try{return ne(r)}catch{}}function eV(r,e){return e??r.userAgent}async function Sg(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new Oe("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:ne(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=Mt(o.publicKey);if(!ii(c).equals(n.remotePeer))throw new Oe("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await Bn.openAndCertify(c,Yr.DOMAIN),u=Yr.createFromProtobuf(l.payload),f=Co(l.publicKey.toCID());if(!u.peerId.equals(f))throw new Oe("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new Oe("signing key does not match remote PeerId");let h;try{h=await r.get(u.peerId)}catch(m){if(m.name!=="NotFoundError")throw m}if(h!=null&&(i.metadata=h.metadata,h.peerRecordEnvelope!=null)){let m=await Bn.createFromProtobuf(h.peerRecordEnvelope),g=Yr.createFromProtobuf(m.payload);g.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",g.seqNumber,u.seqNumber),u=g,c=h.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(m=>({isCertified:!0,multiaddr:m})),s={seq:u.seqNumber,addresses:u.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=H(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=H(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>ne(c)),observedAddr:o.observedAddr==null?void 0:ne(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var Du=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??dn.timeout,this.maxInboundStreams=t.maxInboundStreams??dn.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??dn.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??dn.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??dn.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??dn.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??dn.protocolPrefix}/${HT}`,agentVersion:eV(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:H(this.host.agentVersion),ProtocolVersion:H(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var Ag=class extends Du{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??dn.protocolPrefix}/${jT}/${GT}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??dn.concurrency,(t.runOnSelfUpdate??dn.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[ze]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Ie("p2p").code)),t=new Yr({peerId:this.peerId,multiaddrs:e}),n=await Bn.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=M(i.metadata.get("AgentVersion")??H(this.host.agentVersion)),a=M(i.metadata.get("ProtocolVersion")??H(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let h,m=AbortSignal.timeout(c.timeout);try{h=await u.newStream(c.protocol,{signal:m,runOnLimitedConnection:c.runOnLimitedConnection}),await Nu(h,{maxDataLength:c.maxMessageSize}).pb(Ks).write({listenAddrs:e.map(w=>w.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:m}),await h.close({signal:m})}catch(g){c.log.error("could not push identify update to peer",g),h?.abort(g)}})}await Rr(Mo(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await Nu(n,{maxDataLength:this.maxMessageSize}).pb(Ks).read(o);await n.close(o),await Sg(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var tV=41,_g=class extends Du{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??dn.protocolPrefix}/${qT}/${WT}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??dn.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Ai.name&&this.log.error("error during identify trigged by connection:open",i)})})}[ze]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await Nu(n,{maxDataLength:this.maxMessageSize}).pb(Ks).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new Oe("public key was missing from identify message");let a=Mt(o),c=Co(a.toCID());if(!e.remotePeer.equals(c))throw new Oe("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new Oe("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),Sg(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=zT(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Qn(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===tV&&!W2(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}ec.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Ie("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new Yr({peerId:this.peerId,multiaddrs:s});a=(await Bn.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;RS.matches(t.remoteAddr)||(c=void 0),await Nu(n).pb(Ks).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:tr(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function XT(r={}){return e=>new _g(e,r)}function YT(r={}){return e=>new Ag(e,r)}var Ou=1e3,F7=60*Ou,Ig=60*F7,QT=36*Ig,ZT="/ipfs/kad/1.0.0",JT=48*Ig;var eC=24*Ig,tC=10,rC=16384,nC=Ig,iye=10*Ou;var Tg=20,Lu=3,oC=5*F7,iC=Ou,sC=5*Ou,aC=5*F7,cC=30*Ou,lC=180*Ou,$7=`${is}-kad-dht`;var wh;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:ke(0),value:ke(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(wh||(wh={}));function uC(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function fC(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var yr=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 wh.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:uC(this.timeReceived)}}static deserialize(e){let t=wh.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=fC(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 Vs=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},Cg=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},kg=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},Pg=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var dC;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(dC||(dC={}));var je;(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"})(je||(je={}));var Rg;(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"})(Rg||(Rg={}));(function(r){r.codec=()=>vt(Rg)})(je||(je={}));var Mu;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(Mu||(Mu={}));var K7;(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"})(K7||(K7={}));(function(r){r.codec=()=>vt(K7)})(Mu||(Mu={}));var Bu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),Mu.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new at('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=Mu.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Bu||(Bu={}));var Gi;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&Rg[t.type]!==0&&(n.uint32(8),je.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),Bu.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),Bu.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:je.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=je.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new at('Decode error - map field "closer" had too many elements');i.closer.push(Bu.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new at('Decode error - map field "providers" had too many elements');i.providers.push(Bu.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Gi||(Gi={}));function V7(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function bh(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function Ng(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Mn(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function H7(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function xh(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function q7(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function hC(r,e,t){if(t.length===0)throw new D("No records given");let o=M(e).split("/");if(o.length<3)throw new D("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new Pg(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function nV(r,e){return 0}var pC={pk:nV};async function Uu(r,e){let t=e.key,o=M(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new D(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var oV=async(r,e)=>{if(!(r instanceof Uint8Array))throw new D('"key" must be a Uint8Array');if(r.byteLength<5)throw new D("Invalid public key record");if(M(r.subarray(0,4))!=="/pk/")throw new D("key was not prefixed with /pk/");let n=Mt(e),o=r.slice(4);if(!ge(o,n.toMultihash().bytes))throw new D("public key does not match passed in key")},mC={pk:oV};var iV=H("/pk/");function gC(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=zr(n);return o==null?!0:!o})}}async function Hs(r){return(await gt.digest(r)).digest}async function wr(r){return Hs(r.toMultihash().bytes)}function qs(r,e){return new it(`${r}/${M(e,"base32")}`,!1)}function yC(r){return st([iV,r.toMultihash().bytes])}function wC(r){return M(r.subarray(0,4))==="/pk/"}function bC(r){let e=Xe(r.subarray(4));return Vt(e)}function j7(r,e){let t=new Date;return new yr(r,e,t).serialize()}var sV=290,aV=54,cV=55,lV=56,uV=4,fV=41;function xC(r){let e=r.stringTuples();for(let t of e)if(t[0]===sV)return!1;if(e[0][0]===aV||e[0][0]===cV||e[0][0]===lV)return!0;if(e[0][0]===uV||e[0][0]===fV){let t=zr(`${e[0][1]}`);return t==null||!t}return!1}function Dg(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:le.createV1(va,Xe(H(n,"base32"))),peerId:wt(t)}}function Og(r,e,t){let n=typeof e=="string"?e:M(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new it(o.join("/"))}function Lg(r){return new Date(rt(r))}function Oc(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function Bg(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var Mg=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=qs(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=yr.deserialize(n);return await Uu(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=j7(e,n);for(let{value:s,from:a}of t){if(ge(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=qs(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:je.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&ge(u.record.value,yr.deserialize(i).value)&&(c=!0),yield u;c||(yield Mn({from:a,error:new Vs("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=j7(e,t),i=qs(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*nr(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>nn(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:je.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&ge(u.record.value,yr.deserialize(o).value)||c.push(Mn({from:a.peer.id,error:new Vs("Value not put correctly")},n)));return c}),s=>Mo(s,{ordered:!1,concurrency:Lu}),async function*(s){for await(let a of s)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=hC(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Ge("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield xh({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield xh({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function vC(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function vh(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Xe(r.id);return{id:Vt(e),multiaddrs:(r.multiaddrs??[]).map(t=>ne(t))}}var Ug=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(f=>f.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:je.ADD_PROVIDER,key:o,providers:[vC({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Mn({from:c.peer.id,error:u},n))}return l};yield*nr(this.peerRouting.getClosestPeers(o,n),c=>nn(c,l=>a(l)),c=>Mo(c,{ordered:!1,concurrency:Lu}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let f of a.slice(0,n))try{let h=await this.components.peerStore.get(f);u.push({id:f,multiaddrs:h.addresses.map(({multiaddr:m})=>m)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",f)}if(yield bh({from:this.components.peerId,messageType:je.GET_PROVIDERS,providers:u},t),yield H7({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:f}){let h={type:je.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,h,{...t,signal:f})},l=new Gr(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let f=[];for(let h of u.providers)l.has(h.id)||(l.add(h.id),f.push(h));if(f.length>0&&(yield H7({from:u.from,providers:f},t),o+=f.length,o>=n))return}}};var W7=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=fe(),this.haveNext=fe()}[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=fe(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=fe(),await ut(this.readNext.promise,t?.signal,t)}};function EC(){return new W7}var Fg=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var G7=class extends Error{code;constructor(e,t){super(e),this.code=t}},z7=class extends G7{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function SC(r,e){let t=EC();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new J;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,f)=>{c=()=>{f(new z7("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:f,value:h}=await Promise.race([n.next(),l]);return f===!0?new J:h}for(;o.byteLength<s;){let{value:f,done:h}=await Promise.race([n.next(),l]);if(h===!0)throw new Fg("unexpected end of input");o.append(f)}let u=o.sublist(0,s);return o.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var $g=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Kg=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Vg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function AC(r,e={}){let t=SC(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new $g("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Vg("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Kg("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function X7(r,e){let t=AC(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Hg=class extends Le{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new Bo({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new D("Message type was missing");this.log("sending %s to %p",t.type,e),yield q7({peer:e},n),yield V7({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield bh({from:e,messageType:c.type,closer:c.closer.map(vh),providers:c.providers.map(vh),record:c.record==null?void 0:yr.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Mn({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new D("Message type was missing");this.log("sending %s to %p",t.type,e),yield q7({peer:e},n),yield V7({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield bh({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Mn({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await X7(e).write(t,Gi,n)}async _writeReadMessage(e,t,n){let o=X7(e);await o.write(t,Gi,n);let i=await o.read(Gi,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:vh(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:vh(s)})}),i}};function js(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var Ws=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await wr(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:fn(this.originDhtKey,t)},o=!1;for(let i=0;i<this.peerDistances.length;i++){let s=js(this.peerDistances[i].distance,n.distance);if(s===0||s===1){o=!0,this.peerDistances.splice(i,0,n);break}}o||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await wr(e),n=fn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return js(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var qg=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:je.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=yC(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=Mt(o.record.value),s=ii(i);if(!s.equals(e))throw new Si("public key does not match id");if(s.publicKey==null)throw new Si("public key missing");yield xh({from:e,value:o.record.value},t)}throw new Vs(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield Ng({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:je.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(f=>f.id.equals(e));u!=null&&(yield Ng({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Mn({from:this.peerId,error:new Ge("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Hs(e),o=this.routingTable.closestPeers(n),i=this,s=new Ws(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",M(e,"base32"),c);let u={type:je.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield Ng({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield Mn({from:o.from,error:new Vs(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new kg("invalid record received");await Uu(this.validators,new yr(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=Xe(e),l=Vt(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:f})=>f)})}catch{}let o=await Hs(e),i=this.routingTable.closestPeers(o),s=await wr(t),a=fn(s,o);for(let c of i){let l=await wr(c),u=fn(l,o);if(js(u,a)===-1)try{let f=await this.peerStore.get(c);n.push({id:c,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var jg=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=Og(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=Og(this.datastorePrefix,e,t),i=Ue(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new or,n=Og(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=Dg(o.key);t.set(i,Lg(o.value))}return t}};async function*_C(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:f,connectionManager:h}=r,m=new Kr({concurrency:s,sort:(y,x)=>js(y.options.distance,x.options.distance)}),g=await Hs(e);function w(y,x){if(y==null)return;f.add(y);let I=fn(x,g);m.add(async()=>{let v=[o];l!=null&&v.push(AbortSignal.timeout(l));let R=Ne(v);try{for await(let q of i({...r,key:e,peer:y,signal:R,pathIndex:a,numPaths:c})){if(R.aborted)return;if(q.name==="PEER_RESPONSE")for(let j of q.closer){if(f.has(j.id)){u.trace("already seen %p in query",j.id);continue}if(n.equals(j.id)){u("not querying ourselves");continue}if(!await h.isDialable(j.multiaddrs)){u("not querying undialable peer");continue}let U=await wr(j.id),P=fn(U,g);if(js(P,I)!==-1){u.trace("skipping %p as they are not closer to %b than %p",j.id,e,y);continue}u.trace("querying closer peer %p",j.id),w(j.id,U)}m.safeDispatchEvent("completed",{detail:q})}}catch(q){if(!o.aborted)return Mn({from:y,error:q},r)}finally{R.clear()}},{distance:I}).catch(v=>{u.error(v)})}w(t,await wr(t));try{for await(let y of m.toGenerator({signal:o}))y!=null&&(yield y)}catch(y){throw o.aborted?new Cg("Query aborted"):y}}var Wg=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Tg,this.alpha=t.alpha??Lu,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(lC);n={...n,signal:c}}let o=new AbortController,i=Ne([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+M(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await ut(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Hs(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let f=new Gr,h=u.map((m,g)=>_C({...n,key:e,startingPeer:m,ourPeerId:this.peerId,signal:i,query:t,pathIndex:g,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:f,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let m of Vr(...h)){if(m.name==="QUERY_ERROR"&&s.error("query error",m.error),m.name==="PEER_RESPONSE")for(let g of[...m.closer,...m.providers])await this.connectionManager.isDialable(g.multiaddrs)&&await this.routingTable.add(g.id);yield m}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function hV(r){return r[Symbol.asyncIterator]!=null}function pV(r){if(hV(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 Gg=pV;var mV=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 gV(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=mV(r),f=(...m)=>{let g=t.multiArgs?m:m[0];t.filter&&!t.filter(g)||(c.push(g),t.count===c.length&&(n(),i(c)))},h=m=>{n(),s(m)};n=()=>{for(let m of a)u(m,f);for(let m of t.rejectionEvents)u(m,h)};for(let m of a)l(m,f);for(let m of t.rejectionEvents)l(m,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=mo(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function IC(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=gV(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var zg=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??Tg,this.interval=t.interval??oC,this.initialInterval=t.initialInterval??iC,this.queryTimeout=t.queryTimeout??sC,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=Bg(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=fe(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=Ne(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await IC(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await nr(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>ks(i,this.count),async i=>Gg(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var Xg=class extends Le{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Kr({concurrency:t.concurrency??tC,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Bo({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??eC,this.maxQueueSize=t.maxQueueSize??rC,this.validity=t.validity??JT,this.interval=t.interval??nC,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=Bg(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=Dg(t.key),i=Lg(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Rr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var yV=20,wV=5e3,bV="kad-close",xV=50,Yg=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??wV,this.peerSetSize=t.peerSetSize??yV,this.closeTagName=t.closeTagName??bV,this.closeTagValue=t.closeTagValue??xV,this.closestPeers=new Gr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await wr(this.components.peerId);this.newPeers=new Ws(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new Gr(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[$7]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[$7]:void 0}})})])}};function Eh(r){return Array.isArray(r?.peers)}var Qg=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??TC,this.kBucketSize=e.kBucketSize??Y7,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??CC,this.lastPingThreshold=e.lastPingThreshold??kC,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new or,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await wr(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await wr(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!EV(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Ws(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*nn(n.peers,o=>o.id)}count(){function e(t){if(Eh(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(Eh(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+M(fn(e,t),"base16"))}_determineBucket(e){let t=M(e,"base2");function n(o,i=0){return Eh(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>ge(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)M(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));vV(e,t,n)}};function vV(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function EV(r,e){return r.lastPing<Date.now()-e}var Y7=20,TC=6;var SV=20,AV=100,CC=3;var _V=20,IV=100,PC="kad-peer",TV=1,kC=6e5,CV=!0,kV=1e3,Zg=class extends Le{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??Y7,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??PC,this.peerTagValue=t.peerTagValue??TV,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??CV,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??kV,this.pingOldContactQueue=new cr({concurrency:t.pingOldContactConcurrency??_V,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??IV}),this.pingOldContactTimeout=new Bo({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new cr({concurrency:t.pingNewContactConcurrency??SV,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??AV}),this.pingNewContactTimeout=new Bo({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Qg({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Yg(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await sr(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(PC)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Tr(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=Ne([c,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of Mo(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=Ne([n,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:je.PING},t))if(o.type===Jg.PEER_RESPONSE)return o.messageType===je.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await wr(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await wr(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Eh(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var RC=[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 e3=15,t3=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??aC,this.refreshQueryTimeout=s??cC,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Gg(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>e3&&(e=e3);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=Wr(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Xe(o);return Vt(i)}async _makePeerId(e,t,n){if(n>e3)throw new Error(`Cannot generate peer ID for common prefix length greater than ${e3}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=RC[c],u=new ArrayBuffer(34),f=new DataView(u,0,u.byteLength);return f.setUint8(0,gt.code),f.setUint8(1,32),f.setUint32(2,l,!1),new Uint8Array(f.buffer,f.byteOffset,f.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=fn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var r3=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new Oe("Missing key");let n;try{n=le.decode(t.key)}catch{throw new Oe("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=Xe(o.id),s=Vt(i),a=o.multiaddrs.map(c=>ne(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var n3=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new Oe("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);ge(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(Ie("p2p").code))});let o={type:je.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var o3=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new Oe("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=le.decode(t.key)}catch{throw new Oe("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([ic(nn(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:je.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var i3=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new Oe("Invalid key");let o={type:je.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(wC(n)){this.log("is public key");let a=bC(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Ge("No public key found in key book");c=tr(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new yr(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=qs(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=yr.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>QT){await this.datastore.delete(t);return}return o}};var s3=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 a3=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new Oe(o)}try{let o=yr.deserialize(t.record);await Uu(this.validators,o),o.timeReceived=new Date;let i=qs(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var c3=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[je.GET_VALUE.toString()]:new i3(e,t),[je.PUT_VALUE.toString()]:new a3(e,t),[je.FIND_NODE.toString()]:new n3(e,t),[je.ADD_PROVIDER.toString()]:new r3(e,t),[je.GET_PROVIDERS.toString()]:new o3(e,t),[je.PING.toString()]:new s3(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await nr(n,a=>To(a),async function*(a){for await(let c of a){let l=Gi.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield Gi.encode(u))}},a=>Io(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var l3=class extends Le{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var Q7=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Rr(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Rr(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 Ge("Could not find value for key")}},Z7=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 Ge("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},PV=32,RV=64,u3=class extends Le{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??ZT,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??PV,this.maxOutboundStreams=t.maxOutboundStreams??RV,this.peerInfoMapper=t.peerInfoMapper??gC;let a=Ta();this.providers=new jg(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...mC,...t.validators},this.selectors={...pC,...t.selectors},this.network=new Hg(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new Zg(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=fe();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new Wg(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new qg(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new Mg(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new Ug(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new t3(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new c3(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new l3(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new zg(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new Xg(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(f=>{this.log.error("could not add %p to routing table",u.id,f)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let f=await this.components.peerStore.get(u),h={id:u,multiaddrs:f.addresses.map(({multiaddr:m})=>m),protocols:f.protocols};await this.onPeerConnect(h)}).catch(f=>{this.log.error("could not add %p to routing table - %e",u,f)})}),this.dhtPeerRouting=new Z7(this),this.dhtContentRouting=new Q7(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>xC(h)),f=this.getMode();u&&f==="client"?await this.setMode("server"):f==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Oc(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Oc(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Oc(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Oc(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Oc(this.provide.bind(this),s,"PROVIDE"),this.put=Oc(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[ze]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[An]=["@libp2p/identify"];get[jo](){return this.dhtContentRouting}get[Wo](){return this.dhtPeerRouting}get[ga](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await sr(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await sr(this.querySelf))}async stop(){this.running=!1,await Tr(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Jg;(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"})(Jg||(Jg={}));function NC(r={}){return e=>new u3(e,r)}var qe;(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"})(qe||(qe={}));var Sh=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),J7=Object.freeze({NEW_STREAM:qe.NEW_STREAM,MESSAGE:qe.MESSAGE_INITIATOR,CLOSE:qe.CLOSE_INITIATOR,RESET:qe.RESET_INITIATOR}),DC=Object.freeze({MESSAGE:qe.MESSAGE_RECEIVER,CLOSE:qe.CLOSE_RECEIVER,RESET:qe.RESET_RECEIVER});var e9=1<<20,NV=4<<20,f3=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=e9,t=NV){this._buffer=new J,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new Oe("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===qe.NEW_STREAM||o===qe.MESSAGE_INITIATOR||o===qe.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=LC(e),{value:o,offset:i}=LC(e,n),s=t&7;if(Sh[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new Oe("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},DV=128,OC=127;function LC(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&OC)<<n:(i&OC)*Math.pow(2,n),n+=7}while(i>=DV);return e=o-e,{value:t,offset:e}}var t9=10*1024,r9=class{_pool;_poolOffset;constructor(){this._pool=It(t9),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Ue(e.id<<3|e.type,n,o),o+=Ce(e.id<<3|e.type),(e.type===qe.NEW_STREAM||e.type===qe.MESSAGE_INITIATOR||e.type===qe.MESSAGE_RECEIVER)&&e.data!=null?(Ue(e.data.length,n,o),o+=Ce(e.data.length)):(Ue(0,n,o),o+=Ce(0));let i=n.subarray(this._poolOffset,o);t9-o<100?(this._pool=It(t9),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===qe.NEW_STREAM||e.type===qe.MESSAGE_INITIATOR||e.type===qe.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},OV=new r9;async function*BC(r){for await(let e of r){let t=new J;OV.write(e,t),yield t}}var d3=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var n9=class extends Us{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?J7:DC,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:J7.NEW_STREAM,data:new J(H(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 MC(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=e9}=r;return new n9({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var LV=1024,BV=1024,MV=1024*1024*4,UV=5,FV=500;function UC(r){let e={...r,type:`${Sh[r.type]} (${r.type})`};return r.type===qe.NEW_STREAM&&(e.data=M(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===qe.MESSAGE_INITIATOR||r.type===qe.MESSAGE_RECEIVER)&&(e.data=M(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var h3=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??FV,this.sink=this._createSink(),this._source=en({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=nr(this._source,n=>BC(n)),this.closeController=new AbortController,this.rateLimiter=new xu({points:t.disconnectThreshold??UV,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new Go("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??BV))throw new ls("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=MC({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,UC(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{H2(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new f3(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",UC(e)),e.type===qe.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??LV)){this.log("too many inbound streams open"),this._source.push({id:t,type:qe.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:M(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,Sh[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let s=this._init.maxStreamBufferSize??MV;try{switch(n){case qe.MESSAGE_INITIATOR:case qe.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===qe.MESSAGE_INITIATOR?qe.RESET_RECEIVER:qe.RESET_INITIATOR}),new d3("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case qe.CLOSE_INITIATOR:case qe.CLOSE_RECEIVER:i.remoteCloseWrite();break;case qe.RESET_INITIATOR:case qe.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var o9=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[ze]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new h3(this.components,{...e,...this._init})}};function FC(r={}){return e=>new o9(e,r)}var $C="1.0.0",KC="ping",VC="ipfs";var p3=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??VC}/${KC}/${$C}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[ze]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Yt(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new zo("ping timeout"))});let a=await o.read({bytes:32,signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=Wr(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Yt(s),[,c]=await Promise.all([a.write(o,t),a.read({...t,bytes:32})]),l=Date.now()-n;if(!ge(o,c.subarray()))throw new $p(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function HC(r={}){return e=>new p3(e,r)}var Fr;(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=()=>vt(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Fr||(Fr={}));var qC=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],s9=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),jC="libp2p+webrtc+v1/";var WC=466,GC=2*1024*1024,zC=30*1e3,Fu=16*1024;function HV(r=Fu){let e=Ce(r-Ce(r)),t=1+Ce(Object.keys(Fr.Flag).length-1),n=1,o=r-e-t-n,i=Ce(o);return e+t+n+i}var XC=HV(),YC=5e3,QC=5e3,ZC=3e4,a9="/webrtc",Ah="/webrtc-signaling/0.0.1",JC="/libp2p/webrtc-direct/certificate",ek="webrtc-direct-certificate-private-key";var tk=12096e5,c9=864e5;var rk=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},qV=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var jV=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var WV=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 GV=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var zV=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var XV=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,YV=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,nk=3,QV=[["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",XV]],ok=[["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 sk(r){return r?ik(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new zV:typeof navigator<"u"?ik(navigator.userAgent):eH()}function ZV(r){return r!==""&&QV.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function ik(r){var e=ZV(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new GV;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<nk&&(o=rk(rk([],o,!0),tH(nk-o.length),!0)):o=[];var i=o.join("."),s=JV(r),a=YV.exec(r);return a&&a[1]?new WV(t,i,s,a[1]):new qV(t,i,s)}function JV(r){for(var e=0,t=ok.length;e<t;e++){var n=ok[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function eH(){var r=typeof process<"u"&&process.version;return r?new jV(process.version.slice(1)):null}function tH(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var ak=sk(),_h=ak!=null&&ak.name==="firefox",m3=async function*(){},g3=async r=>{};function ck(r,e,t=ZC,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=fe(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await mo(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function l9(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??qC.map(e=>({urls:[e]})),r}var lk=(r=32)=>jC+[...Array(r)].map(()=>s9.at(Math.floor(Math.random()*s9.length))).join("");var Lc=class{log;peerConnection;remoteAddr;timeline;metrics;source=m3();sink=g3;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var u9=class extends Us{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace('readable and writeable ends closed with status "%s"',this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await mo(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)}).finally(()=>{this.channel.close()})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=en(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??zC,this.maxBufferedAmount=e.maxBufferedAmount??GC,this.maxMessageSize=(e.maxMessageSize??Fu)-XC,this.receiveFinAck=fe(),this.finAckTimeout=e.closeTimeout??YC,this.openTimeout=e.openTimeout??QC,this.closeController=new AbortController,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new wa("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of To(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new J(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new wa(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=Ne([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await Jt(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=Ne([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await Jt(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new zo(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.log.trace('sending message, channel state "%s"',this.channel.readyState),this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){let t=e.byteLength;for(e=e.sublist();e.byteLength>0;){let n=Math.min(e.byteLength,this.maxMessageSize),o=e.subarray(0,n),i=Fr.encode({message:o}),s=Io.single(i);this.log.trace("sending %d/%d bytes on channel",o.byteLength,t),await this._sendMessage(s),e.consume(n)}this.log.trace('finished sending data, channel state "%s"',this.channel.readyState)}async sendReset(){try{await this._sendFlag(Fr.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}finally{this.channel.close()}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(Fr.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await ut(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){this.channel.readyState==="open"&&await this._sendFlag(Fr.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Fr.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===Fr.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Fr.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Fr.Flag.RESET&&this.reset(),t.flag===Fr.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Fr.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Fr.encode({flag:e}),n=Io.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function $u(r){let{channel:e,direction:t,handshake:n}=r;return new u9({id:`${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${n===!0?"handshake":t}:${e.id}`),...r})}var Gs=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??a9,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=$u({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new f9(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},f9=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??a9,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=n.id,i=$u({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),ck(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=m3();sink=g3;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=$u({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var y3=globalThis.RTCPeerConnection,w3=globalThis.RTCSessionDescription,uk=globalThis.RTCIceCandidate;var b3=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},x3=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},v3=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function fk(r,e={}){let t=Yt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??rt,o=e?.lengthEncoder??Ue;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new b3("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new v3("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new x3("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function E3(r,e){let t=fk(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var zs=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},to=class extends zs{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var S3=class extends zs{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var A3=class extends zs{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},_3=class extends zs{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var hn;(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=()=>vt(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(hn||(hn={}));var I3=async(r,e,t)=>{try{let n=fe();for(rH(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==hn.Type.ICE_CANDIDATE)throw new Oe("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new ae("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new uk(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new ae("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&T3(r)!=="connected")throw n}};function T3(r){return _h?r.iceConnectionState:r.connectionState}function rH(r,e){r[_h?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(T3(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new yl("RTCPeerConnection was closed"));break;default:break}}}async function dk({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=hk(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let f=u.getPeerId();if(f==null)throw new D("Relay peer was missing");let h=i.getConnections(wt(f)),m,g=!1;h.length===0?(l?.(new ae("webrtc:dial-relay")),m=await s.dial(u,{signal:t,onProgress:l}),g=!0):(l?.(new ae("webrtc:reuse-relay-connection")),m=h[0]);try{l?.(new ae("webrtc:open-signaling-stream"));let w=await m.newStream(Ah,{signal:t,runOnLimitedConnection:!0}),y=E3(w).pb(hn),x=new y3(r),I=new Gs({logger:c},{peerConnection:x,dataChannelOptions:e});try{let v=x.createDataChannel("init");x.onicecandidate=({candidate:U})=>{let P=JSON.stringify(U?.toJSON()??null);a.trace("initiator sending ICE candidate %o",U),y.write({type:hn.Type.ICE_CANDIDATE,data:P},{signal:t}).catch(N=>{a.error("error sending ICE candidate",N)})},x.onicecandidateerror=U=>{a.error("initiator ICE candidate error",U)};let R=await x.createOffer().catch(U=>{throw a.error("could not execute createOffer",U),new to("Failed to set createOffer")});a.trace("initiator send SDP offer %s",R.sdp),l?.(new ae("webrtc:send-sdp-offer")),await y.write({type:hn.Type.SDP_OFFER,data:R.sdp},{signal:t}),await x.setLocalDescription(R).catch(U=>{throw a.error("could not execute setLocalDescription",U),new to("Failed to set localDescription")}),l?.(new ae("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let q=await y.read({signal:t});if(q.type!==hn.Type.SDP_ANSWER)throw new to("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",q.data);let j=new w3({type:"answer",sdp:q.data});return await x.setRemoteDescription(j).catch(U=>{throw a.error("could not execute setRemoteDescription",U),new to("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new ae("webrtc:read-ice-candidates")),await I3(x,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),v.close(),l?.(new ae("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await w.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:x,muxerFactory:I}}catch(v){throw a.error("outgoing signaling error",v),x.close(),w.abort(v),v}finally{x.onicecandidate=null,x.onicecandidateerror=null}}finally{if(g)try{await m.close({signal:t})}catch(w){m.abort(w)}}}var pk=ot(Rm.matchers[0],Be("p2p-circuit")),C3=class r extends Le{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>pk.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>pk.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function mk({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=E3(e).pb(hn);try{r.onicecandidate=({candidate:u})=>{let f=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",f),i.write({type:hn.Type.ICE_CANDIDATE,data:f},{signal:t}).catch(h=>{o.error("error sending ICE candidate",h)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==hn.Type.SDP_OFFER)throw new to(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new w3({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new to("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new to("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:hn.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new to("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await I3(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(T3(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=ne(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var k3=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,this.shutdownController.signal,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[ss]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[ze]=["@libp2p/transport"];[An]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(Ah,e=>{let t=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t).catch(n=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,n)}).finally(()=>{t.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(Ah),this._started=!1}createListener(e){return new C3(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Pd.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await dk({rtcConfiguration:await l9(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=new Lc(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t},n){let o=new y3(await l9(this.init.rtcConfiguration)),i=new Gs(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await mk({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Lc(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i,signal:n}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function hk(r){let e=r.toString().split("/webrtc/");if(e.length!==2)throw new D("webrtc protocol was not present in multiaddr");if(!e[0].includes("/p2p-circuit"))throw new D("p2p-circuit protocol was not present in multiaddr");let t=ne(e[0]),o=ne("/"+e[1]).getPeerId();if(o==null)throw new D("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new D("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:wt(o)}}var ILe=$t(yk());var A;(function(r){r[r.Sequence=0]="Sequence",r[r.Set=1]="Set",r[r.Choice=2]="Choice"})(A||(A={}));var b;(function(r){r[r.Any=1]="Any",r[r.Boolean=2]="Boolean",r[r.OctetString=3]="OctetString",r[r.BitString=4]="BitString",r[r.Integer=5]="Integer",r[r.Enumerated=6]="Enumerated",r[r.ObjectIdentifier=7]="ObjectIdentifier",r[r.Utf8String=8]="Utf8String",r[r.BmpString=9]="BmpString",r[r.UniversalString=10]="UniversalString",r[r.NumericString=11]="NumericString",r[r.PrintableString=12]="PrintableString",r[r.TeletexString=13]="TeletexString",r[r.VideotexString=14]="VideotexString",r[r.IA5String=15]="IA5String",r[r.GraphicString=16]="GraphicString",r[r.VisibleString=17]="VisibleString",r[r.GeneralString=18]="GeneralString",r[r.CharacterString=19]="CharacterString",r[r.UTCTime=20]="UTCTime",r[r.GeneralizedTime=21]="GeneralizedTime",r[r.DATE=22]="DATE",r[r.TimeOfDay=23]="TimeOfDay",r[r.DateTime=24]="DateTime",r[r.Duration=25]="Duration",r[r.TIME=26]="TIME",r[r.Null=27]="Null"})(b||(b={}));var d9=$t($i()),fi=class{constructor(e,t=0){if(this.unusedBits=0,this.value=new ArrayBuffer(0),e)if(typeof e=="number")this.fromNumber(e);else if(d9.BufferSourceConverter.isBufferSource(e))this.unusedBits=t,this.value=d9.BufferSourceConverter.toArrayBuffer(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof Oo))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=e.valueBlock.valueHex,this}toASN(){return new Oo({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new Oo({name:e})}toNumber(){let e="",t=new Uint8Array(this.value);for(let n of t)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let t=e.toString(2),n=t.length+7>>3;this.unusedBits=(n<<3)-t.length;let o=new Uint8Array(n);t=t.padStart(n<<3,"0").split("").reverse().join("");let i=0;for(;i<n;)o[i]=parseInt(t.slice(i<<3,(i<<3)+8),2),i++;this.value=o.buffer}};var h9=$t($i()),be=class{get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):h9.BufferSourceConverter.isBufferSource(e)?this.buffer=h9.BufferSourceConverter.toArrayBuffer(e):Array.isArray(e)?this.buffer=new Uint8Array(e):this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Mr))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=e.valueBlock.valueHex,this}toASN(){return new Mr({valueHex:this.buffer})}toSchema(e){return new Mr({name:e})}};var nH={fromASN:r=>r instanceof ln?null:r.valueBeforeDecodeView,toASN:r=>{if(r===null)return new ln;let e=Ln(r);if(e.result.error)throw new Error(e.result.error);return e.result}},oH={fromASN:r=>r.valueBlock.valueHexView.byteLength>=4?r.valueBlock.toString():r.valueBlock.valueDec,toASN:r=>new Dn({value:+r})},iH={fromASN:r=>r.valueBlock.valueDec,toASN:r=>new lc({value:r})},Fe={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Dn({valueHex:r})};var sH={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Oo({valueHex:r})},aH={fromASN:r=>r.valueBlock.toString(),toASN:r=>new On({value:r})},cH={fromASN:r=>r.valueBlock.value,toASN:r=>new cc({value:r})},Ku={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Mr({valueHex:r})},wk={fromASN:r=>new be(r.getValue()),toASN:r=>r.toASN()};function ro(r){return{fromASN:e=>e.valueBlock.value,toASN:e=>new r({value:e})}}var p9=ro(Xn),lH=ro(uc),uH=ro(fc),fH=ro(dc),dH=ro(hc),hH=ro(pc),pH=ro(mc),mH=ro(gc),gH=ro(yc),yH=ro(Os),wH=ro(wc),bH=ro(bc),xH={fromASN:r=>r.toDate(),toASN:r=>new Ls({valueDate:r})},vH={fromASN:r=>r.toDate(),toASN:r=>new xc({valueDate:r})},EH={fromASN:()=>null,toASN:()=>new ln};function Vu(r){switch(r){case b.Any:return nH;case b.BitString:return sH;case b.BmpString:return lH;case b.Boolean:return cH;case b.CharacterString:return bH;case b.Enumerated:return iH;case b.GeneralString:return wH;case b.GeneralizedTime:return vH;case b.GraphicString:return gH;case b.IA5String:return mH;case b.Integer:return oH;case b.Null:return EH;case b.NumericString:return fH;case b.ObjectIdentifier:return aH;case b.OctetString:return Ku;case b.PrintableString:return dH;case b.TeletexString:return hH;case b.UTCTime:return xH;case b.UniversalString:return uH;case b.Utf8String:return p9;case b.VideotexString:return pH;case b.VisibleString:return yH;default:return null}}function no(r){return typeof r=="function"&&r.prototype?r.prototype.toASN&&r.prototype.fromASN?!0:no(r.prototype):!!(r&&typeof r=="object"&&"toASN"in r&&"fromASN"in r)}function g9(r){var e;if(r){let t=Object.getPrototypeOf(r);return((e=t?.prototype)===null||e===void 0?void 0:e.constructor)===Array?!0:g9(t)}return!1}function bk(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}var P3=class{constructor(){this.items=new WeakMap}has(e){return this.items.has(e)}get(e,t=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(t&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let t=this.get(e);t.schema||(t.schema=this.create(e,!0))}createDefault(e){let t={type:A.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(t,n),t.items=Object.assign({},t.items,n.items)),t}create(e,t){let n=this.items.get(e)||this.createDefault(e),o=[];for(let i in n.items){let s=n.items[i],a=t?i:"",c;if(typeof s.type=="number"){let u=b[s.type],f=Yn[u];if(!f)throw new Error(`Cannot get ASN1 class by name '${u}'`);c=new f({name:a})}else no(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===A.Choice?c=new ci({name:a}):(c=this.create(s.type,!1),c.name=a):c=new ci({name:a});let l=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let u=s.repeated==="set"?un:Et;c=new u({name:"",value:[new vc({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||no(s.type)){let u=s.repeated?Xt:Vi;o.push(new u({name:a,optional:l,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let u=!!s.repeated,f=u?c:this.get(s.type,!0).schema;f="valueBlock"in f?f.valueBlock.value:f.value,o.push(new Xt({name:u?"":a,optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:f}))}else o.push(new Xt({optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=l,o.push(c)}switch(n.type){case A.Sequence:return new Et({value:o,name:""});case A.Set:return new un({value:o,name:""});case A.Choice:return new mu({value:o,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,t){return this.items.set(e,t),this}findParentSchema(e){let t=Object.getPrototypeOf(e);return t?this.items.get(t)||this.findParentSchema(t):null}};var Qr=new P3;var C=r=>e=>{let t;Qr.has(e)?t=Qr.get(e):(t=Qr.createDefault(e),Qr.set(e,t)),Object.assign(t,r)};var p=r=>(e,t)=>{let n;Qr.has(e.constructor)?n=Qr.get(e.constructor):(n=Qr.createDefault(e.constructor),Qr.set(e.constructor,n));let o=Object.assign({},r);if(typeof o.type=="number"&&!o.converter){let i=Vu(r.type);if(!i)throw new Error(`Cannot get default converter for property '${t}' of ${e.constructor.name}`);o.converter=i}n.items[t]=o};var Ih=class extends Error{constructor(){super(...arguments),this.schemas=[]}};var Th=class{static parse(e,t){let n=Ln(e);if(n.result.error)throw new Error(n.result.error);return this.fromASN(n.result,t)}static fromASN(e,t){var n;try{if(no(t))return new t().fromASN(e);let o=Qr.get(t);Qr.cache(t);let i=o.schema;if(e.constructor===Xt&&o.type!==A.Choice){i=new Xt({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:o.schema.valueBlock.value});for(let c in o.items)delete e[c]}let s=Ds({},e,i);if(!s.verified)throw new Ih(`Data does not match to ${t.name} ASN1 schema. ${s.result.error}`);let a=new t;if(g9(t)){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let c=o.itemType;if(typeof c=="number"){let l=Vu(c);if(!l)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);return t.from(e.valueBlock.value,u=>l.fromASN(u))}else return t.from(e.valueBlock.value,l=>this.fromASN(l,c))}for(let c in o.items){let l=s.result[c];if(!l)continue;let u=o.items[c],f=u.type;if(typeof f=="number"||no(f)){let h=(n=u.converter)!==null&&n!==void 0?n:no(f)?new f:null;if(!h)throw new Error("Converter is empty");if(u.repeated)if(u.implicit){let m=u.repeated==="sequence"?Et:un,g=new m;g.valueBlock=l.valueBlock;let w=Ln(g.toBER(!1));if(w.offset===-1)throw new Error(`Cannot parse the child item. ${w.result.error}`);if(!("value"in w.result.valueBlock&&Array.isArray(w.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let y=w.result.valueBlock.value;a[c]=Array.from(y,x=>h.fromASN(x))}else a[c]=Array.from(l,m=>h.fromASN(m));else{let m=l;if(u.implicit){let g;if(no(f))g=new f().toSchema("");else{let w=b[f],y=Yn[w];if(!y)throw new Error(`Cannot get '${w}' class from asn1js module`);g=new y}g.valueBlock=m.valueBlock,m=Ln(g.toBER(!1)).result}a[c]=h.fromASN(m)}}else if(u.repeated){if(!Array.isArray(l))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");a[c]=Array.from(l,h=>this.fromASN(h,f))}else a[c]=this.fromASN(l,f)}return a}catch(o){throw o instanceof Ih&&o.schemas.push(t.name),o}}};var Ch=class r{static serialize(e){return e instanceof qt?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&no(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let t=e.constructor,n=Qr.get(t);Qr.cache(t);let o=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=Vu(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);o=e.map(a=>s.toASN(a))}else o=e.map(s=>this.toAsnItem({type:n.itemType},"[]",t,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&bk(this.serialize(a.defaultValue),this.serialize(c)))continue;let l=r.toAsnItem(a,s,t,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||no(a.type))){let u={};u.valueHex=l instanceof ln?l.valueBeforeDecodeView:l.valueBlock.toBER(),o.push(new Vi({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...u}))}else o.push(new Xt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:l.valueBlock.value}));else o.push(new Xt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[l]}));else a.repeated?o=o.concat(l):o.push(l)}let i;switch(n.type){case A.Sequence:i=new Et({value:o});break;case A.Set:i=new un({value:o});break;case A.Choice:if(!o[0])throw new Error(`Schema '${t.name}' has wrong data. Choice cannot be empty.`);i=o[0];break}return i}static toAsnItem(e,t,n,o){let i;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${t}' doesn't have converter for type ${b[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(o,l=>s.toASN(l)),c=e.repeated==="sequence"?Et:un;i=new c({value:a})}else i=s.toASN(o)}else if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(o,c=>this.toASN(c)),a=e.repeated==="sequence"?Et:un;i=new a({value:s})}else i=this.toASN(o);return i}};var we=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let t of e)this.push(t)}}};var y9=$t($i());var ee=class r{static serialize(e){return Ch.serialize(e)}static parse(e,t){return Th.parse(e,t)}static toString(e){let t=y9.BufferSourceConverter.isBufferSource(e)?y9.BufferSourceConverter.toArrayBuffer(e):r.serialize(e),n=Ln(t);if(n.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${n.result.error}`);return n.result.toString()}};function d(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var xk=$t($i()),kh=class{static isIPv4(e){return/^(\d{1,3}\.){3}\d{1,3}$/.test(e)}static parseIPv4(e){let t=e.split(".");if(t.length!==4)throw new Error("Invalid IPv4 address");return t.map(n=>{let o=parseInt(n,10);if(isNaN(o)||o<0||o>255)throw new Error("Invalid IPv4 address part");return o})}static parseIPv6(e){let n=this.expandIPv6(e).split(":");if(n.length!==8)throw new Error("Invalid IPv6 address");return n.reduce((o,i)=>{let s=parseInt(i,16);if(isNaN(s)||s<0||s>65535)throw new Error("Invalid IPv6 address part");return o.push(s>>8&255),o.push(s&255),o},[])}static expandIPv6(e){if(!e.includes("::"))return e;let t=e.split("::");if(t.length>2)throw new Error("Invalid IPv6 address");let n=t[0]?t[0].split(":"):[],o=t[1]?t[1].split(":"):[],i=8-(n.length+o.length);if(i<0)throw new Error("Invalid IPv6 address");return[...n,...Array(i).fill("0"),...o].join(":")}static formatIPv6(e){let t=[];for(let n=0;n<16;n+=2)t.push((e[n]<<8|e[n+1]).toString(16));return this.compressIPv6(t.join(":"))}static compressIPv6(e){let t=e.split(":"),n=-1,o=0,i=-1,s=0;for(let a=0;a<t.length;a++)t[a]==="0"?(i===-1&&(i=a),s++):(s>o&&(n=i,o=s),i=-1,s=0);if(s>o&&(n=i,o=s),o>1){let a=t.slice(0,n).join(":"),c=t.slice(n+o).join(":");return`${a}::${c}`}return e}static parseCIDR(e){let[t,n]=e.split("/"),o=parseInt(n,10);if(this.isIPv4(t)){if(o<0||o>32)throw new Error("Invalid IPv4 prefix length");return[this.parseIPv4(t),o]}else{if(o<0||o>128)throw new Error("Invalid IPv6 prefix length");return[this.parseIPv6(t),o]}}static decodeIP(e){if(e.length===64&&parseInt(e,16)===0)return"::/0";if(e.length!==16)return e;let t=parseInt(e.slice(8),16).toString(2).split("").reduce((o,i)=>o+ +i,0),n=e.slice(0,8).replace(/(.{2})/g,o=>`${parseInt(o,16)}.`);return n=n.slice(0,-1),`${n}/${t}`}static toString(e){let t=new Uint8Array(e);if(t.length===4)return Array.from(t).join(".");if(t.length===16)return this.formatIPv6(t);if(t.length===8||t.length===32){let n=t.length/2,o=t.slice(0,n),i=t.slice(n);if(t.every(c=>c===0))return t.length===8?"0.0.0.0/0":"::/0";let a=i.reduce((c,l)=>c+(l.toString(2).match(/1/g)||[]).length,0);return t.length===8?`${Array.from(o).join(".")}/${a}`:`${this.formatIPv6(o)}/${a}`}return this.decodeIP(xk.Convert.ToHex(e))}static fromString(e){if(e.includes("/")){let[n,o]=this.parseCIDR(e),i=new Uint8Array(n.length),s=o;for(let c=0;c<i.length;c++)s>=8?(i[c]=255,s-=8):s>0&&(i[c]=255<<8-s,s=0);let a=new Uint8Array(n.length*2);return a.set(n,0),a.set(i,n.length),a.buffer}let t=this.isIPv4(e)?this.parseIPv4(e):this.parseIPv6(e);return new Uint8Array(t).buffer}};var vk=$t($i()),w9,b9,x9,jt=class{constructor(e={}){Object.assign(this,e)}toString(){return this.bmpString||this.printableString||this.teletexString||this.universalString||this.utf8String||""}};d([p({type:b.TeletexString})],jt.prototype,"teletexString",void 0);d([p({type:b.PrintableString})],jt.prototype,"printableString",void 0);d([p({type:b.UniversalString})],jt.prototype,"universalString",void 0);d([p({type:b.Utf8String})],jt.prototype,"utf8String",void 0);d([p({type:b.BmpString})],jt.prototype,"bmpString",void 0);jt=d([C({type:A.Choice})],jt);var Hu=class extends jt{constructor(e={}){super(e),Object.assign(this,e)}toString(){return this.ia5String||(this.anyValue?vk.Convert.ToHex(this.anyValue):super.toString())}};d([p({type:b.IA5String})],Hu.prototype,"ia5String",void 0);d([p({type:b.Any})],Hu.prototype,"anyValue",void 0);Hu=d([C({type:A.Choice})],Hu);var Bc=class{constructor(e={}){this.type="",this.value=new Hu,Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Bc.prototype,"type",void 0);d([p({type:Hu})],Bc.prototype,"value",void 0);var Xs=w9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,w9.prototype)}};Xs=w9=d([C({type:A.Set,itemType:Bc})],Xs);var v9=b9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,b9.prototype)}};v9=b9=d([C({type:A.Sequence,itemType:Xs})],v9);var ct=x9=class extends v9{constructor(e){super(e),Object.setPrototypeOf(this,x9.prototype)}};ct=x9=d([C({type:A.Sequence})],ct);var SH={fromASN:r=>kh.toString(Ku.fromASN(r)),toASN:r=>Ku.toASN(kh.fromString(r))},Ys=class{constructor(e={}){this.typeId="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Ys.prototype,"typeId",void 0);d([p({type:b.Any,context:0})],Ys.prototype,"value",void 0);var Ph=class{constructor(e={}){this.partyName=new jt,Object.assign(this,e)}};d([p({type:jt,optional:!0,context:0,implicit:!0})],Ph.prototype,"nameAssigner",void 0);d([p({type:jt,context:1,implicit:!0})],Ph.prototype,"partyName",void 0);var Ee=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Ys,context:0,implicit:!0})],Ee.prototype,"otherName",void 0);d([p({type:b.IA5String,context:1,implicit:!0})],Ee.prototype,"rfc822Name",void 0);d([p({type:b.IA5String,context:2,implicit:!0})],Ee.prototype,"dNSName",void 0);d([p({type:b.Any,context:3,implicit:!0})],Ee.prototype,"x400Address",void 0);d([p({type:ct,context:4,implicit:!1})],Ee.prototype,"directoryName",void 0);d([p({type:Ph,context:5})],Ee.prototype,"ediPartyName",void 0);d([p({type:b.IA5String,context:6,implicit:!0})],Ee.prototype,"uniformResourceIdentifier",void 0);d([p({type:b.OctetString,context:7,implicit:!0,converter:SH})],Ee.prototype,"iPAddress",void 0);d([p({type:b.ObjectIdentifier,context:8,implicit:!0})],Ee.prototype,"registeredID",void 0);Ee=d([C({type:A.Choice})],Ee);var Qs="1.3.6.1.5.5.7",Zs=`${Qs}.1`,Ek=`${Qs}.2`,Mc=`${Qs}.3`,R3=`${Qs}.48`,Gwe=`${Ek}.1`,zwe=`${Ek}.2`,E9=`${R3}.1`,S9=`${R3}.2`,A9=`${R3}.3`,_9=`${R3}.5`,Re="2.5.29";var I9,N3=`${Zs}.1`,zi=class{constructor(e={}){this.accessMethod="",this.accessLocation=new Ee,Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],zi.prototype,"accessMethod",void 0);d([p({type:Ee})],zi.prototype,"accessLocation",void 0);var Uc=I9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,I9.prototype)}};Uc=I9=d([C({type:A.Sequence,itemType:zi})],Uc);var D3=`${Re}.35`,Fc=class extends be{},di=class{constructor(e={}){e&&Object.assign(this,e)}};d([p({type:Fc,context:0,optional:!0,implicit:!0})],di.prototype,"keyIdentifier",void 0);d([p({type:Ee,context:1,optional:!0,implicit:!0,repeated:"sequence"})],di.prototype,"authorityCertIssuer",void 0);d([p({type:b.Integer,context:2,optional:!0,implicit:!0,converter:Fe})],di.prototype,"authorityCertSerialNumber",void 0);var O3=`${Re}.19`,$c=class{constructor(e={}){this.cA=!1,Object.assign(this,e)}};d([p({type:b.Boolean,defaultValue:!1})],$c.prototype,"cA",void 0);d([p({type:b.Integer,optional:!0})],$c.prototype,"pathLenConstraint",void 0);var T9,At=T9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,T9.prototype)}};At=T9=d([C({type:A.Sequence,itemType:Ee})],At);var C9,AH=`${Re}.29`,Sk=C9=class extends At{constructor(e){super(e),Object.setPrototypeOf(this,C9.prototype)}};Sk=C9=d([C({type:A.Sequence})],Sk);var k9,B3=`${Re}.32`,Ibe=`${B3}.0`,Xi=class{constructor(e={}){Object.assign(this,e)}toString(){return this.ia5String||this.visibleString||this.bmpString||this.utf8String||""}};d([p({type:b.IA5String})],Xi.prototype,"ia5String",void 0);d([p({type:b.VisibleString})],Xi.prototype,"visibleString",void 0);d([p({type:b.BmpString})],Xi.prototype,"bmpString",void 0);d([p({type:b.Utf8String})],Xi.prototype,"utf8String",void 0);Xi=d([C({type:A.Choice})],Xi);var Rh=class{constructor(e={}){this.organization=new Xi,this.noticeNumbers=[],Object.assign(this,e)}};d([p({type:Xi})],Rh.prototype,"organization",void 0);d([p({type:b.Integer,repeated:"sequence"})],Rh.prototype,"noticeNumbers",void 0);var Nh=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Rh,optional:!0})],Nh.prototype,"noticeRef",void 0);d([p({type:Xi,optional:!0})],Nh.prototype,"explicitText",void 0);var L3=class{constructor(e={}){Object.assign(this,e)}};d([p({type:b.IA5String})],L3.prototype,"cPSuri",void 0);d([p({type:Nh})],L3.prototype,"userNotice",void 0);L3=d([C({type:A.Choice})],L3);var Dh=class{constructor(e={}){this.policyQualifierId="",this.qualifier=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Dh.prototype,"policyQualifierId",void 0);d([p({type:b.Any})],Dh.prototype,"qualifier",void 0);var Kc=class{constructor(e={}){this.policyIdentifier="",Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Kc.prototype,"policyIdentifier",void 0);d([p({type:Dh,repeated:"sequence",optional:!0})],Kc.prototype,"policyQualifiers",void 0);var Oh=k9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,k9.prototype)}};Oh=k9=d([C({type:A.Sequence,itemType:Kc})],Oh);var Obe=`${Re}.20`,Lh=class{constructor(e=0){this.value=e}};d([p({type:b.Integer})],Lh.prototype,"value",void 0);Lh=d([C({type:A.Choice})],Lh);var Kbe=`${Re}.27`,Ak=class extends Lh{};Ak=d([C({type:A.Choice})],Ak);var P9,M3=`${Re}.31`,$o;(function(r){r[r.unused=1]="unused",r[r.keyCompromise=2]="keyCompromise",r[r.cACompromise=4]="cACompromise",r[r.affiliationChanged=8]="affiliationChanged",r[r.superseded=16]="superseded",r[r.cessationOfOperation=32]="cessationOfOperation",r[r.certificateHold=64]="certificateHold",r[r.privilegeWithdrawn=128]="privilegeWithdrawn",r[r.aACompromise=256]="aACompromise"})($o||($o={}));var Bh=class extends fi{toJSON(){let e=[],t=this.toNumber();return t&$o.aACompromise&&e.push("aACompromise"),t&$o.affiliationChanged&&e.push("affiliationChanged"),t&$o.cACompromise&&e.push("cACompromise"),t&$o.certificateHold&&e.push("certificateHold"),t&$o.cessationOfOperation&&e.push("cessationOfOperation"),t&$o.keyCompromise&&e.push("keyCompromise"),t&$o.privilegeWithdrawn&&e.push("privilegeWithdrawn"),t&$o.superseded&&e.push("superseded"),t&$o.unused&&e.push("unused"),e}toString(){return`[${this.toJSON().join(", ")}]`}},Yi=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Ee,context:0,repeated:"sequence",implicit:!0})],Yi.prototype,"fullName",void 0);d([p({type:Xs,context:1,implicit:!0})],Yi.prototype,"nameRelativeToCRLIssuer",void 0);Yi=d([C({type:A.Choice})],Yi);var hi=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Yi,context:0,optional:!0})],hi.prototype,"distributionPoint",void 0);d([p({type:Bh,context:1,optional:!0,implicit:!0})],hi.prototype,"reasons",void 0);d([p({type:Ee,context:2,optional:!0,repeated:"sequence",implicit:!0})],hi.prototype,"cRLIssuer",void 0);var Js=P9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,P9.prototype)}};Js=P9=d([C({type:A.Sequence,itemType:hi})],Js);var R9,rxe=`${Re}.46`,_k=R9=class extends Js{constructor(e){super(e),Object.setPrototypeOf(this,R9.prototype)}};_k=R9=d([C({type:A.Sequence,itemType:hi})],_k);var uxe=`${Re}.28`,Un=class r{constructor(e={}){this.onlyContainsUserCerts=r.ONLY,this.onlyContainsCACerts=r.ONLY,this.indirectCRL=r.ONLY,this.onlyContainsAttributeCerts=r.ONLY,Object.assign(this,e)}};Un.ONLY=!1;d([p({type:Yi,context:0,optional:!0})],Un.prototype,"distributionPoint",void 0);d([p({type:b.Boolean,context:1,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsUserCerts",void 0);d([p({type:b.Boolean,context:2,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsCACerts",void 0);d([p({type:Bh,context:3,optional:!0,implicit:!0})],Un.prototype,"onlySomeReasons",void 0);d([p({type:b.Boolean,context:4,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"indirectCRL",void 0);d([p({type:b.Boolean,context:5,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsAttributeCerts",void 0);var Ik=`${Re}.21`,Mh;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(Mh||(Mh={}));var Uh=class{constructor(e=Mh.unspecified){this.reason=Mh.unspecified,this.reason=e}toJSON(){return Mh[this.reason]}toString(){return this.toJSON()}};d([p({type:b.Enumerated})],Uh.prototype,"reason",void 0);Uh=d([C({type:A.Choice})],Uh);var N9,U3=`${Re}.37`,Fh=N9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,N9.prototype)}};Fh=N9=d([C({type:A.Sequence,itemType:b.ObjectIdentifier})],Fh);var vxe=`${U3}.0`,Tk=`${Mc}.1`,Ck=`${Mc}.2`,kk=`${Mc}.3`,Pk=`${Mc}.4`,Rk=`${Mc}.8`,Nk=`${Mc}.9`;var Ixe=`${Re}.54`,D9=class{constructor(e=new ArrayBuffer(0)){this.value=e}};d([p({type:b.Integer,converter:Fe})],D9.prototype,"value",void 0);D9=d([C({type:A.Choice})],D9);var Dk=`${Re}.24`,$h=class{constructor(e){this.value=new Date,e&&(this.value=e)}};d([p({type:b.GeneralizedTime})],$h.prototype,"value",void 0);$h=d([C({type:A.Choice})],$h);var O9,Uxe=`${Re}.18`,Ok=O9=class extends At{constructor(e){super(e),Object.setPrototypeOf(this,O9.prototype)}};Ok=O9=d([C({type:A.Sequence})],Ok);var F3=`${Re}.15`,Ko;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(Ko||(Ko={}));var qu=class extends fi{toJSON(){let e=this.toNumber(),t=[];return e&Ko.cRLSign&&t.push("crlSign"),e&Ko.dataEncipherment&&t.push("dataEncipherment"),e&Ko.decipherOnly&&t.push("decipherOnly"),e&Ko.digitalSignature&&t.push("digitalSignature"),e&Ko.encipherOnly&&t.push("encipherOnly"),e&Ko.keyAgreement&&t.push("keyAgreement"),e&Ko.keyCertSign&&t.push("keyCertSign"),e&Ko.keyEncipherment&&t.push("keyEncipherment"),e&Ko.nonRepudiation&&t.push("nonRepudiation"),t}toString(){return`[${this.toJSON().join(", ")}]`}};var L9,zxe=`${Re}.30`,ju=class{constructor(e={}){this.base=new Ee,this.minimum=0,Object.assign(this,e)}};d([p({type:Ee})],ju.prototype,"base",void 0);d([p({type:b.Integer,context:0,defaultValue:0,implicit:!0})],ju.prototype,"minimum",void 0);d([p({type:b.Integer,context:1,optional:!0,implicit:!0})],ju.prototype,"maximum",void 0);var $3=L9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,L9.prototype)}};$3=L9=d([C({type:A.Sequence,itemType:ju})],$3);var K3=class{constructor(e={}){Object.assign(this,e)}};d([p({type:$3,context:0,optional:!0,implicit:!0})],K3.prototype,"permittedSubtrees",void 0);d([p({type:$3,context:1,optional:!0,implicit:!0})],K3.prototype,"excludedSubtrees",void 0);var eve=`${Re}.36`,V3=class{constructor(e={}){Object.assign(this,e)}};d([p({type:b.Integer,context:0,implicit:!0,optional:!0,converter:Fe})],V3.prototype,"requireExplicitPolicy",void 0);d([p({type:b.Integer,context:1,implicit:!0,optional:!0,converter:Fe})],V3.prototype,"inhibitPolicyMapping",void 0);var B9,ive=`${Re}.33`,Kh=class{constructor(e={}){this.issuerDomainPolicy="",this.subjectDomainPolicy="",Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Kh.prototype,"issuerDomainPolicy",void 0);d([p({type:b.ObjectIdentifier})],Kh.prototype,"subjectDomainPolicy",void 0);var Lk=B9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,B9.prototype)}};Lk=B9=d([C({type:A.Sequence,itemType:Kh})],Lk);var M9,U9=`${Re}.17`,H3=M9=class extends At{constructor(e){super(e),Object.setPrototypeOf(this,M9.prototype)}};H3=M9=d([C({type:A.Sequence})],H3);var br=class{constructor(e={}){this.type="",this.values=[],Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],br.prototype,"type",void 0);d([p({type:b.Any,repeated:"set"})],br.prototype,"values",void 0);var F9,vve=`${Re}.9`,Bk=F9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,F9.prototype)}};Bk=F9=d([C({type:A.Sequence,itemType:br})],Bk);var $9=`${Re}.14`,pn=class extends Fc{};var Pve=`${Re}.16`,q3=class{constructor(e={}){Object.assign(this,e)}};d([p({type:b.GeneralizedTime,context:0,implicit:!0,optional:!0})],q3.prototype,"notBefore",void 0);d([p({type:b.GeneralizedTime,context:1,implicit:!0,optional:!0})],q3.prototype,"notAfter",void 0);var Vh;(function(r){r[r.keyUpdateAllowed=1]="keyUpdateAllowed",r[r.newExtensions=2]="newExtensions",r[r.pKIXCertificate=4]="pKIXCertificate"})(Vh||(Vh={}));var j3=class extends fi{toJSON(){let e=[],t=this.toNumber();return t&Vh.pKIXCertificate&&e.push("pKIXCertificate"),t&Vh.newExtensions&&e.push("newExtensions"),t&Vh.keyUpdateAllowed&&e.push("keyUpdateAllowed"),e}toString(){return`[${this.toJSON().join(", ")}]`}},W3=class{constructor(e={}){this.entrustVers="",this.entrustInfoFlags=new j3,Object.assign(this,e)}};d([p({type:b.GeneralString})],W3.prototype,"entrustVers",void 0);d([p({type:j3})],W3.prototype,"entrustInfoFlags",void 0);var K9,Fve=`${Zs}.11`,Mk=K9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,K9.prototype)}};Mk=K9=d([C({type:A.Sequence,itemType:zi})],Mk);var Uk=$t($i()),Y=class r{constructor(e={}){this.algorithm="",Object.assign(this,e)}isEqual(e){return e instanceof r&&e.algorithm==this.algorithm&&(e.parameters&&this.parameters&&Uk.isEqual(e.parameters,this.parameters)||e.parameters===this.parameters)}};d([p({type:b.ObjectIdentifier})],Y.prototype,"algorithm",void 0);d([p({type:b.Any,optional:!0})],Y.prototype,"parameters",void 0);var xr=class{constructor(e={}){this.algorithm=new Y,this.subjectPublicKey=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:Y})],xr.prototype,"algorithm",void 0);d([p({type:b.BitString})],xr.prototype,"subjectPublicKey",void 0);var Nt=class{constructor(e){if(e)if(typeof e=="string"||typeof e=="number"||e instanceof Date){let t=new Date(e);t.getUTCFullYear()>2049?this.generalTime=t:this.utcTime=t}else Object.assign(this,e)}getTime(){let e=this.utcTime||this.generalTime;if(!e)throw new Error("Cannot get time from CHOICE object");return e}};d([p({type:b.UTCTime})],Nt.prototype,"utcTime",void 0);d([p({type:b.GeneralizedTime})],Nt.prototype,"generalTime",void 0);Nt=d([C({type:A.Choice})],Nt);var Qi=class{constructor(e){this.notBefore=new Nt(new Date),this.notAfter=new Nt(new Date),e&&(this.notBefore=new Nt(e.notBefore),this.notAfter=new Nt(e.notAfter))}};d([p({type:Nt})],Qi.prototype,"notBefore",void 0);d([p({type:Nt})],Qi.prototype,"notAfter",void 0);var V9,vr=class r{constructor(e={}){this.extnID="",this.critical=r.CRITICAL,this.extnValue=new be,Object.assign(this,e)}};vr.CRITICAL=!1;d([p({type:b.ObjectIdentifier})],vr.prototype,"extnID",void 0);d([p({type:b.Boolean,defaultValue:vr.CRITICAL})],vr.prototype,"critical",void 0);d([p({type:be})],vr.prototype,"extnValue",void 0);var Fn=V9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,V9.prototype)}};Fn=V9=d([C({type:A.Sequence,itemType:vr})],Fn);var pi;(function(r){r[r.v1=0]="v1",r[r.v2=1]="v2",r[r.v3=2]="v3"})(pi||(pi={}));var Er=class{constructor(e={}){this.version=pi.v1,this.serialNumber=new ArrayBuffer(0),this.signature=new Y,this.issuer=new ct,this.validity=new Qi,this.subject=new ct,this.subjectPublicKeyInfo=new xr,Object.assign(this,e)}};d([p({type:b.Integer,context:0,defaultValue:pi.v1})],Er.prototype,"version",void 0);d([p({type:b.Integer,converter:Fe})],Er.prototype,"serialNumber",void 0);d([p({type:Y})],Er.prototype,"signature",void 0);d([p({type:ct})],Er.prototype,"issuer",void 0);d([p({type:Qi})],Er.prototype,"validity",void 0);d([p({type:ct})],Er.prototype,"subject",void 0);d([p({type:xr})],Er.prototype,"subjectPublicKeyInfo",void 0);d([p({type:b.BitString,context:1,implicit:!0,optional:!0})],Er.prototype,"issuerUniqueID",void 0);d([p({type:b.BitString,context:2,implicit:!0,optional:!0})],Er.prototype,"subjectUniqueID",void 0);d([p({type:Fn,context:3,optional:!0})],Er.prototype,"extensions",void 0);var oo=class{constructor(e={}){this.tbsCertificate=new Er,this.signatureAlgorithm=new Y,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:Er})],oo.prototype,"tbsCertificate",void 0);d([p({type:Y})],oo.prototype,"signatureAlgorithm",void 0);d([p({type:b.BitString})],oo.prototype,"signatureValue",void 0);var Vc=class{constructor(e={}){this.userCertificate=new ArrayBuffer(0),this.revocationDate=new Nt,Object.assign(this,e)}};d([p({type:b.Integer,converter:Fe})],Vc.prototype,"userCertificate",void 0);d([p({type:Nt})],Vc.prototype,"revocationDate",void 0);d([p({type:vr,optional:!0,repeated:"sequence"})],Vc.prototype,"crlEntryExtensions",void 0);var $n=class{constructor(e={}){this.signature=new Y,this.issuer=new ct,this.thisUpdate=new Nt,Object.assign(this,e)}};d([p({type:b.Integer,optional:!0})],$n.prototype,"version",void 0);d([p({type:Y})],$n.prototype,"signature",void 0);d([p({type:ct})],$n.prototype,"issuer",void 0);d([p({type:Nt})],$n.prototype,"thisUpdate",void 0);d([p({type:Nt,optional:!0})],$n.prototype,"nextUpdate",void 0);d([p({type:Vc,repeated:"sequence",optional:!0})],$n.prototype,"revokedCertificates",void 0);d([p({type:vr,optional:!0,context:0,repeated:"sequence"})],$n.prototype,"crlExtensions",void 0);var Hc=class{constructor(e={}){this.tbsCertList=new $n,this.signatureAlgorithm=new Y,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:$n})],Hc.prototype,"tbsCertList",void 0);d([p({type:Y})],Hc.prototype,"signatureAlgorithm",void 0);d([p({type:b.BitString})],Hc.prototype,"signature",void 0);var Q=$t($i());var Vo=class{constructor(e={}){this.issuer=new ct,this.serialNumber=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:ct})],Vo.prototype,"issuer",void 0);d([p({type:b.Integer,converter:Fe})],Vo.prototype,"serialNumber",void 0);var qc=class{constructor(e={}){Object.assign(this,e)}};d([p({type:pn,context:0,implicit:!0})],qc.prototype,"subjectKeyIdentifier",void 0);d([p({type:Vo})],qc.prototype,"issuerAndSerialNumber",void 0);qc=d([C({type:A.Choice})],qc);var Sr;(function(r){r[r.v0=0]="v0",r[r.v1=1]="v1",r[r.v2=2]="v2",r[r.v3=3]="v3",r[r.v4=4]="v4",r[r.v5=5]="v5"})(Sr||(Sr={}));var jc=class extends Y{};jc=d([C({type:A.Sequence})],jc);var Hh=class extends Y{};Hh=d([C({type:A.Sequence})],Hh);var mn=class extends Y{};mn=d([C({type:A.Sequence})],mn);var qh=class extends Y{};qh=d([C({type:A.Sequence})],qh);var $k=class extends Y{};$k=d([C({type:A.Sequence})],$k);var G3=class extends Y{};G3=d([C({type:A.Sequence})],G3);var Ho=class{constructor(e={}){this.attrType="",this.attrValues=[],Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Ho.prototype,"attrType",void 0);d([p({type:b.Any,repeated:"set"})],Ho.prototype,"attrValues",void 0);var H9,gn=class{constructor(e={}){this.version=Sr.v0,this.sid=new qc,this.digestAlgorithm=new jc,this.signatureAlgorithm=new Hh,this.signature=new be,Object.assign(this,e)}};d([p({type:b.Integer})],gn.prototype,"version",void 0);d([p({type:qc})],gn.prototype,"sid",void 0);d([p({type:jc})],gn.prototype,"digestAlgorithm",void 0);d([p({type:Ho,repeated:"set",context:0,implicit:!0,optional:!0})],gn.prototype,"signedAttrs",void 0);d([p({type:Hh})],gn.prototype,"signatureAlgorithm",void 0);d([p({type:be})],gn.prototype,"signature",void 0);d([p({type:Ho,repeated:"set",context:1,implicit:!0,optional:!0})],gn.prototype,"unsignedAttrs",void 0);var jh=H9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,H9.prototype)}};jh=H9=d([C({type:A.Set,itemType:gn})],jh);var Kk=class extends Nt{};Kk=d([C({type:A.Choice})],Kk);var Vk=class extends gn{};Vk=d([C({type:A.Sequence})],Vk);var Wh=class{constructor(e={}){this.acIssuer=new Ee,this.acSerial=0,this.attrs=[],Object.assign(this,e)}};d([p({type:Ee})],Wh.prototype,"acIssuer",void 0);d([p({type:b.Integer})],Wh.prototype,"acSerial",void 0);d([p({type:br,repeated:"sequence"})],Wh.prototype,"attrs",void 0);var q9,Gh=q9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,q9.prototype)}};Gh=q9=d([C({type:A.Sequence,itemType:b.ObjectIdentifier})],Gh);var Wu=class{constructor(e={}){this.permitUnSpecified=!0,Object.assign(this,e)}};d([p({type:b.Integer,optional:!0})],Wu.prototype,"pathLenConstraint",void 0);d([p({type:Gh,implicit:!0,context:0,optional:!0})],Wu.prototype,"permittedAttrs",void 0);d([p({type:Gh,implicit:!0,context:1,optional:!0})],Wu.prototype,"excludedAttrs",void 0);d([p({type:b.Boolean,defaultValue:!0})],Wu.prototype,"permitUnSpecified",void 0);var io=class{constructor(e={}){this.issuer=new At,this.serial=new ArrayBuffer(0),this.issuerUID=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:At})],io.prototype,"issuer",void 0);d([p({type:b.Integer,converter:Fe})],io.prototype,"serial",void 0);d([p({type:b.BitString,optional:!0})],io.prototype,"issuerUID",void 0);var j9;(function(r){r[r.publicKey=0]="publicKey",r[r.publicKeyCert=1]="publicKeyCert",r[r.otherObjectTypes=2]="otherObjectTypes"})(j9||(j9={}));var so=class{constructor(e={}){this.digestedObjectType=j9.publicKey,this.digestAlgorithm=new Y,this.objectDigest=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.Enumerated})],so.prototype,"digestedObjectType",void 0);d([p({type:b.ObjectIdentifier,optional:!0})],so.prototype,"otherObjectTypeID",void 0);d([p({type:Y})],so.prototype,"digestAlgorithm",void 0);d([p({type:b.BitString})],so.prototype,"objectDigest",void 0);var Wc=class{constructor(e={}){Object.assign(this,e)}};d([p({type:At,optional:!0})],Wc.prototype,"issuerName",void 0);d([p({type:io,context:0,implicit:!0,optional:!0})],Wc.prototype,"baseCertificateID",void 0);d([p({type:so,context:1,implicit:!0,optional:!0})],Wc.prototype,"objectDigestInfo",void 0);var Gc=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Ee,repeated:"sequence"})],Gc.prototype,"v1Form",void 0);d([p({type:Wc,context:0,implicit:!0})],Gc.prototype,"v2Form",void 0);Gc=d([C({type:A.Choice})],Gc);var zc=class{constructor(e={}){this.notBeforeTime=new Date,this.notAfterTime=new Date,Object.assign(this,e)}};d([p({type:b.GeneralizedTime})],zc.prototype,"notBeforeTime",void 0);d([p({type:b.GeneralizedTime})],zc.prototype,"notAfterTime",void 0);var ea=class{constructor(e={}){Object.assign(this,e)}};d([p({type:io,implicit:!0,context:0,optional:!0})],ea.prototype,"baseCertificateID",void 0);d([p({type:At,implicit:!0,context:1,optional:!0})],ea.prototype,"entityName",void 0);d([p({type:so,implicit:!0,context:2,optional:!0})],ea.prototype,"objectDigestInfo",void 0);var W9;(function(r){r[r.v2=1]="v2"})(W9||(W9={}));var yn=class{constructor(e={}){this.version=W9.v2,this.holder=new ea,this.issuer=new Gc,this.signature=new Y,this.serialNumber=new ArrayBuffer(0),this.attrCertValidityPeriod=new zc,this.attributes=[],Object.assign(this,e)}};d([p({type:b.Integer})],yn.prototype,"version",void 0);d([p({type:ea})],yn.prototype,"holder",void 0);d([p({type:Gc})],yn.prototype,"issuer",void 0);d([p({type:Y})],yn.prototype,"signature",void 0);d([p({type:b.Integer,converter:Fe})],yn.prototype,"serialNumber",void 0);d([p({type:zc})],yn.prototype,"attrCertValidityPeriod",void 0);d([p({type:br,repeated:"sequence"})],yn.prototype,"attributes",void 0);d([p({type:b.BitString,optional:!0})],yn.prototype,"issuerUniqueID",void 0);d([p({type:Fn,optional:!0})],yn.prototype,"extensions",void 0);var Xc=class{constructor(e={}){this.acinfo=new yn,this.signatureAlgorithm=new Y,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:yn})],Xc.prototype,"acinfo",void 0);d([p({type:Y})],Xc.prototype,"signatureAlgorithm",void 0);d([p({type:b.BitString})],Xc.prototype,"signatureValue",void 0);var zh;(function(r){r[r.unmarked=1]="unmarked",r[r.unclassified=2]="unclassified",r[r.restricted=4]="restricted",r[r.confidential=8]="confidential",r[r.secret=16]="secret",r[r.topSecret=32]="topSecret"})(zh||(zh={}));var Gu=class extends fi{};var zu=class{constructor(e={}){this.type="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier,implicit:!0,context:0})],zu.prototype,"type",void 0);d([p({type:b.Any,implicit:!0,context:1})],zu.prototype,"value",void 0);var Xh=class{constructor(e={}){this.policyId="",this.classList=new Gu(zh.unclassified),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Xh.prototype,"policyId",void 0);d([p({type:Gu,defaultValue:new Gu(zh.unclassified)})],Xh.prototype,"classList",void 0);d([p({type:zu,repeated:"set"})],Xh.prototype,"securityCategories",void 0);var Xu=class{constructor(e={}){Object.assign(this,e)}};d([p({type:be})],Xu.prototype,"cotets",void 0);d([p({type:b.ObjectIdentifier})],Xu.prototype,"oid",void 0);d([p({type:b.Utf8String})],Xu.prototype,"string",void 0);var z3=class{constructor(e={}){this.values=[],Object.assign(this,e)}};d([p({type:At,implicit:!0,context:0,optional:!0})],z3.prototype,"policyAuthority",void 0);d([p({type:Xu,repeated:"sequence"})],z3.prototype,"values",void 0);var b_e=`${Zs}.4`,x_e=`${Zs}.6`,v_e=`${Zs}.10`,E_e=`${Re}.55`,Yh=`${Qs}.10`,S_e=`${Yh}.1`,A_e=`${Yh}.2`,__e=`${Yh}.3`,I_e=`${Yh}.4`,T_e=`${Yh}.6`,G9="2.5.4",C_e=`${G9}.72`;var z9,Yu=class{constructor(e={}){this.targetCertificate=new io,Object.assign(this,e)}};d([p({type:io})],Yu.prototype,"targetCertificate",void 0);d([p({type:Ee,optional:!0})],Yu.prototype,"targetName",void 0);d([p({type:so,optional:!0})],Yu.prototype,"certDigestInfo",void 0);var Qu=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Ee,context:0,implicit:!0})],Qu.prototype,"targetName",void 0);d([p({type:Ee,context:1,implicit:!0})],Qu.prototype,"targetGroup",void 0);d([p({type:Yu,context:2,implicit:!0})],Qu.prototype,"targetCert",void 0);Qu=d([C({type:A.Choice})],Qu);var X3=z9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,z9.prototype)}};X3=z9=d([C({type:A.Sequence,itemType:Qu})],X3);var X9,Hk=X9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,X9.prototype)}};Hk=X9=d([C({type:A.Sequence,itemType:X3})],Hk);var Y3=class{constructor(e={}){Object.assign(this,e)}};d([p({type:At,implicit:!0,context:0,optional:!0})],Y3.prototype,"roleAuthority",void 0);d([p({type:Ee,implicit:!0,context:1})],Y3.prototype,"roleName",void 0);var Qh=class{constructor(e={}){this.service=new Ee,this.ident=new Ee,Object.assign(this,e)}};d([p({type:Ee})],Qh.prototype,"service",void 0);d([p({type:Ee})],Qh.prototype,"ident",void 0);d([p({type:be,optional:!0})],Qh.prototype,"authInfo",void 0);var Y9,Zh=class{constructor(e={}){this.otherCertFormat="",this.otherCert=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Zh.prototype,"otherCertFormat",void 0);d([p({type:b.Any})],Zh.prototype,"otherCert",void 0);var Yc=class{constructor(e={}){Object.assign(this,e)}};d([p({type:oo})],Yc.prototype,"certificate",void 0);d([p({type:Xc,context:2,implicit:!0})],Yc.prototype,"v2AttrCert",void 0);d([p({type:Zh,context:3,implicit:!0})],Yc.prototype,"other",void 0);Yc=d([C({type:A.Choice})],Yc);var Qc=Y9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Y9.prototype)}};Qc=Y9=d([C({type:A.Set,itemType:Yc})],Qc);var ao=class{constructor(e={}){this.contentType="",this.content=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],ao.prototype,"contentType",void 0);d([p({type:b.Any,context:0})],ao.prototype,"content",void 0);var Zu=class{constructor(e={}){Object.assign(this,e)}};d([p({type:be})],Zu.prototype,"single",void 0);d([p({type:b.Any})],Zu.prototype,"any",void 0);Zu=d([C({type:A.Choice})],Zu);var Zc=class{constructor(e={}){this.eContentType="",Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],Zc.prototype,"eContentType",void 0);d([p({type:Zu,context:0,optional:!0})],Zc.prototype,"eContent",void 0);var Jh=class{constructor(e={}){Object.assign(this,e)}};d([p({type:be,context:0,implicit:!0,optional:!0})],Jh.prototype,"value",void 0);d([p({type:be,converter:wk,context:0,implicit:!0,optional:!0,repeated:"sequence"})],Jh.prototype,"constructedValue",void 0);Jh=d([C({type:A.Choice})],Jh);var ta=class{constructor(e={}){this.contentType="",this.contentEncryptionAlgorithm=new qh,Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],ta.prototype,"contentType",void 0);d([p({type:qh})],ta.prototype,"contentEncryptionAlgorithm",void 0);d([p({type:Jh,optional:!0})],ta.prototype,"encryptedContent",void 0);var ra=class{constructor(e={}){this.keyAttrId="",Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],ra.prototype,"keyAttrId",void 0);d([p({type:b.Any,optional:!0})],ra.prototype,"keyAttr",void 0);var Q9,Ju=class{constructor(e={}){this.subjectKeyIdentifier=new pn,Object.assign(this,e)}};d([p({type:pn})],Ju.prototype,"subjectKeyIdentifier",void 0);d([p({type:b.GeneralizedTime,optional:!0})],Ju.prototype,"date",void 0);d([p({type:ra,optional:!0})],Ju.prototype,"other",void 0);var ef=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Ju,context:0,implicit:!0,optional:!0})],ef.prototype,"rKeyId",void 0);d([p({type:Vo,optional:!0})],ef.prototype,"issuerAndSerialNumber",void 0);ef=d([C({type:A.Choice})],ef);var ep=class{constructor(e={}){this.rid=new ef,this.encryptedKey=new be,Object.assign(this,e)}};d([p({type:ef})],ep.prototype,"rid",void 0);d([p({type:be})],ep.prototype,"encryptedKey",void 0);var Q3=Q9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Q9.prototype)}};Q3=Q9=d([C({type:A.Sequence,itemType:ep})],Q3);var tp=class{constructor(e={}){this.algorithm=new Y,this.publicKey=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:Y})],tp.prototype,"algorithm",void 0);d([p({type:b.BitString})],tp.prototype,"publicKey",void 0);var Jc=class{constructor(e={}){Object.assign(this,e)}};d([p({type:pn,context:0,implicit:!0,optional:!0})],Jc.prototype,"subjectKeyIdentifier",void 0);d([p({type:tp,context:1,implicit:!0,optional:!0})],Jc.prototype,"originatorKey",void 0);d([p({type:Vo,optional:!0})],Jc.prototype,"issuerAndSerialNumber",void 0);Jc=d([C({type:A.Choice})],Jc);var Zi=class{constructor(e={}){this.version=Sr.v3,this.originator=new Jc,this.keyEncryptionAlgorithm=new mn,this.recipientEncryptedKeys=new Q3,Object.assign(this,e)}};d([p({type:b.Integer})],Zi.prototype,"version",void 0);d([p({type:Jc,context:0})],Zi.prototype,"originator",void 0);d([p({type:be,context:1,optional:!0})],Zi.prototype,"ukm",void 0);d([p({type:mn})],Zi.prototype,"keyEncryptionAlgorithm",void 0);d([p({type:Q3})],Zi.prototype,"recipientEncryptedKeys",void 0);var tf=class{constructor(e={}){Object.assign(this,e)}};d([p({type:pn,context:0,implicit:!0})],tf.prototype,"subjectKeyIdentifier",void 0);d([p({type:Vo})],tf.prototype,"issuerAndSerialNumber",void 0);tf=d([C({type:A.Choice})],tf);var na=class{constructor(e={}){this.version=Sr.v0,this.rid=new tf,this.keyEncryptionAlgorithm=new mn,this.encryptedKey=new be,Object.assign(this,e)}};d([p({type:b.Integer})],na.prototype,"version",void 0);d([p({type:tf})],na.prototype,"rid",void 0);d([p({type:mn})],na.prototype,"keyEncryptionAlgorithm",void 0);d([p({type:be})],na.prototype,"encryptedKey",void 0);var el=class{constructor(e={}){this.keyIdentifier=new be,Object.assign(this,e)}};d([p({type:be})],el.prototype,"keyIdentifier",void 0);d([p({type:b.GeneralizedTime,optional:!0})],el.prototype,"date",void 0);d([p({type:ra,optional:!0})],el.prototype,"other",void 0);var oa=class{constructor(e={}){this.version=Sr.v4,this.kekid=new el,this.keyEncryptionAlgorithm=new mn,this.encryptedKey=new be,Object.assign(this,e)}};d([p({type:b.Integer})],oa.prototype,"version",void 0);d([p({type:el})],oa.prototype,"kekid",void 0);d([p({type:mn})],oa.prototype,"keyEncryptionAlgorithm",void 0);d([p({type:be})],oa.prototype,"encryptedKey",void 0);var ia=class{constructor(e={}){this.version=Sr.v0,this.keyEncryptionAlgorithm=new mn,this.encryptedKey=new be,Object.assign(this,e)}};d([p({type:b.Integer})],ia.prototype,"version",void 0);d([p({type:G3,context:0,optional:!0})],ia.prototype,"keyDerivationAlgorithm",void 0);d([p({type:mn})],ia.prototype,"keyEncryptionAlgorithm",void 0);d([p({type:be})],ia.prototype,"encryptedKey",void 0);var rp=class{constructor(e={}){this.oriType="",this.oriValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],rp.prototype,"oriType",void 0);d([p({type:b.Any})],rp.prototype,"oriValue",void 0);var Ji=class{constructor(e={}){Object.assign(this,e)}};d([p({type:na,optional:!0})],Ji.prototype,"ktri",void 0);d([p({type:Zi,context:1,implicit:!0,optional:!0})],Ji.prototype,"kari",void 0);d([p({type:oa,context:2,implicit:!0,optional:!0})],Ji.prototype,"kekri",void 0);d([p({type:ia,context:3,implicit:!0,optional:!0})],Ji.prototype,"pwri",void 0);d([p({type:rp,context:4,implicit:!0,optional:!0})],Ji.prototype,"ori",void 0);Ji=d([C({type:A.Choice})],Ji);var Z9,np=Z9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Z9.prototype)}};np=Z9=d([C({type:A.Set,itemType:Ji})],np);var J9,qk=`${Qs}.16`,TTe=`${qk}.2`,CTe=`${qk}.4`,rf=class{constructor(e={}){this.otherRevInfoFormat="",this.otherRevInfo=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],rf.prototype,"otherRevInfoFormat",void 0);d([p({type:b.Any})],rf.prototype,"otherRevInfo",void 0);var Z3=class{constructor(e={}){this.other=new rf,Object.assign(this,e)}};d([p({type:rf,context:1,implicit:!0})],Z3.prototype,"other",void 0);Z3=d([C({type:A.Choice})],Z3);var nf=J9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,J9.prototype)}};nf=J9=d([C({type:A.Set,itemType:Z3})],nf);var of=class{constructor(e={}){Object.assign(this,e)}};d([p({type:Qc,context:0,implicit:!0,optional:!0})],of.prototype,"certs",void 0);d([p({type:nf,context:1,implicit:!0,optional:!0})],of.prototype,"crls",void 0);var ew,tw=ew=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,ew.prototype)}};tw=ew=d([C({type:A.Set,itemType:Ho})],tw);var tl=class{constructor(e={}){this.version=Sr.v0,this.recipientInfos=new np,this.encryptedContentInfo=new ta,Object.assign(this,e)}};d([p({type:b.Integer})],tl.prototype,"version",void 0);d([p({type:of,context:0,implicit:!0,optional:!0})],tl.prototype,"originatorInfo",void 0);d([p({type:np})],tl.prototype,"recipientInfos",void 0);d([p({type:ta})],tl.prototype,"encryptedContentInfo",void 0);d([p({type:tw,context:1,implicit:!0,optional:!0})],tl.prototype,"unprotectedAttrs",void 0);var jk="1.2.840.113549.1.7.2";var rw,J3=rw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,rw.prototype)}};J3=rw=d([C({type:A.Set,itemType:jc})],J3);var es=class{constructor(e={}){this.version=Sr.v0,this.digestAlgorithms=new J3,this.encapContentInfo=new Zc,this.signerInfos=new jh,Object.assign(this,e)}};d([p({type:b.Integer})],es.prototype,"version",void 0);d([p({type:J3})],es.prototype,"digestAlgorithms",void 0);d([p({type:Zc})],es.prototype,"encapContentInfo",void 0);d([p({type:Qc,context:0,implicit:!0,optional:!0})],es.prototype,"certificates",void 0);d([p({type:nf,context:1,implicit:!0,optional:!0})],es.prototype,"crls",void 0);d([p({type:jh})],es.prototype,"signerInfos",void 0);var rl="1.2.840.10045.2.1";var op="1.2.840.10045.4.1",ey="1.2.840.10045.4.3.1",ip="1.2.840.10045.4.3.2",sp="1.2.840.10045.4.3.3",ap="1.2.840.10045.4.3.4";var nw="1.2.840.10045.3.1.7";var ow="1.3.132.0.34";var iw="1.3.132.0.35";function cp(r){return new Y({algorithm:r})}var Gk=cp(op),ACe=cp(ey),zk=cp(ip),Xk=cp(sp),Yk=cp(ap);var lp=class{constructor(e={}){Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],lp.prototype,"fieldType",void 0);d([p({type:b.Any})],lp.prototype,"parameters",void 0);lp=d([C({type:A.Sequence})],lp);var sw=class extends be{};var sf=class{constructor(e={}){Object.assign(this,e)}};d([p({type:b.OctetString})],sf.prototype,"a",void 0);d([p({type:b.OctetString})],sf.prototype,"b",void 0);d([p({type:b.BitString,optional:!0})],sf.prototype,"seed",void 0);sf=d([C({type:A.Sequence})],sf);var aw;(function(r){r[r.ecpVer1=1]="ecpVer1"})(aw||(aw={}));var mi=class{constructor(e={}){this.version=aw.ecpVer1,Object.assign(this,e)}};d([p({type:b.Integer})],mi.prototype,"version",void 0);d([p({type:lp})],mi.prototype,"fieldID",void 0);d([p({type:sf})],mi.prototype,"curve",void 0);d([p({type:sw})],mi.prototype,"base",void 0);d([p({type:b.Integer,converter:Fe})],mi.prototype,"order",void 0);d([p({type:b.Integer,optional:!0})],mi.prototype,"cofactor",void 0);mi=d([C({type:A.Sequence})],mi);var gi=class{constructor(e={}){Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],gi.prototype,"namedCurve",void 0);d([p({type:b.Null})],gi.prototype,"implicitCurve",void 0);d([p({type:mi})],gi.prototype,"specifiedCurve",void 0);gi=d([C({type:A.Choice})],gi);var af=class{constructor(e={}){this.version=1,this.privateKey=new be,Object.assign(this,e)}};d([p({type:b.Integer})],af.prototype,"version",void 0);d([p({type:be})],af.prototype,"privateKey",void 0);d([p({type:gi,context:0,optional:!0})],af.prototype,"parameters",void 0);d([p({type:b.BitString,context:1,optional:!0})],af.prototype,"publicKey",void 0);var nl=class{constructor(e={}){this.r=new ArrayBuffer(0),this.s=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.Integer,converter:Fe})],nl.prototype,"r",void 0);d([p({type:b.Integer,converter:Fe})],nl.prototype,"s",void 0);var wn="1.2.840.113549.1.1",yi=`${wn}.1`,Qk=`${wn}.7`,Zk=`${wn}.9`,sa=`${wn}.10`,Jk=`${wn}.2`,eP=`${wn}.4`,cf=`${wn}.5`,tP=`${wn}.14`;var ty=`${wn}.11`,lf=`${wn}.12`,uf=`${wn}.13`,cw=`${wn}.15`,lw=`${wn}.16`,ol="1.3.14.3.2.26",ry="2.16.840.1.101.3.4.2.4",il="2.16.840.1.101.3.4.2.1",sl="2.16.840.1.101.3.4.2.2",al="2.16.840.1.101.3.4.2.3",rP="2.16.840.1.101.3.4.2.5",nP="2.16.840.1.101.3.4.2.6",oP="1.2.840.113549.2.2",iP="1.2.840.113549.2.5",aa=`${wn}.8`;function Qt(r){return new Y({algorithm:r,parameters:null})}var ZCe=Qt(oP),JCe=Qt(iP),ts=Qt(ol),eke=Qt(ry),tke=Qt(il),rke=Qt(sl),nke=Qt(al),oke=Qt(rP),ike=Qt(nP),ny=new Y({algorithm:aa,parameters:ee.serialize(ts)}),uw=new Y({algorithm:Zk,parameters:ee.serialize(Ku.toASN(new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]).buffer))}),ske=Qt(yi),ake=Qt(Jk),cke=Qt(eP),lke=Qt(cf),uke=Qt(cw),fke=Qt(lw),dke=Qt(lf),hke=Qt(uf),pke=Qt(cw),mke=Qt(lw);var ff=class{constructor(e={}){this.hashAlgorithm=new Y(ts),this.maskGenAlgorithm=new Y({algorithm:aa,parameters:ee.serialize(ts)}),this.pSourceAlgorithm=new Y(uw),Object.assign(this,e)}};d([p({type:Y,context:0,defaultValue:ts})],ff.prototype,"hashAlgorithm",void 0);d([p({type:Y,context:1,defaultValue:ny})],ff.prototype,"maskGenAlgorithm",void 0);d([p({type:Y,context:2,defaultValue:uw})],ff.prototype,"pSourceAlgorithm",void 0);var Eke=new Y({algorithm:Qk,parameters:ee.serialize(new ff)});var wi=class{constructor(e={}){this.hashAlgorithm=new Y(ts),this.maskGenAlgorithm=new Y({algorithm:aa,parameters:ee.serialize(ts)}),this.saltLength=20,this.trailerField=1,Object.assign(this,e)}};d([p({type:Y,context:0,defaultValue:ts})],wi.prototype,"hashAlgorithm",void 0);d([p({type:Y,context:1,defaultValue:ny})],wi.prototype,"maskGenAlgorithm",void 0);d([p({type:b.Integer,context:2,defaultValue:20})],wi.prototype,"saltLength",void 0);d([p({type:b.Integer,context:3,defaultValue:1})],wi.prototype,"trailerField",void 0);var kke=new Y({algorithm:sa,parameters:ee.serialize(new wi)});var cl=class{constructor(e={}){this.digestAlgorithm=new Y,this.digest=new be,Object.assign(this,e)}};d([p({type:Y})],cl.prototype,"digestAlgorithm",void 0);d([p({type:be})],cl.prototype,"digest",void 0);var fw,df=class{constructor(e={}){this.prime=new ArrayBuffer(0),this.exponent=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.Integer,converter:Fe})],df.prototype,"prime",void 0);d([p({type:b.Integer,converter:Fe})],df.prototype,"exponent",void 0);d([p({type:b.Integer,converter:Fe})],df.prototype,"coefficient",void 0);var oy=fw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,fw.prototype)}};oy=fw=d([C({type:A.Sequence,itemType:df})],oy);var co=class{constructor(e={}){this.version=0,this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),this.privateExponent=new ArrayBuffer(0),this.prime1=new ArrayBuffer(0),this.prime2=new ArrayBuffer(0),this.exponent1=new ArrayBuffer(0),this.exponent2=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.Integer})],co.prototype,"version",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"modulus",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"publicExponent",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"privateExponent",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"prime1",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"prime2",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"exponent1",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"exponent2",void 0);d([p({type:b.Integer,converter:Fe})],co.prototype,"coefficient",void 0);d([p({type:oy,optional:!0})],co.prototype,"otherPrimeInfos",void 0);var hf=class{constructor(e={}){this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.Integer,converter:Fe})],hf.prototype,"modulus",void 0);d([p({type:b.Integer,converter:Fe})],hf.prototype,"publicExponent",void 0);var dw;(function(r){r[r.Transient=0]="Transient",r[r.Singleton=1]="Singleton",r[r.ResolutionScoped=2]="ResolutionScoped",r[r.ContainerScoped=3]="ContainerScoped"})(dw||(dw={}));var Ar=dw;var TP=$t(IP(),1),{__extends:mf,__assign:sPe,__rest:PH,__decorate:aPe,__param:cPe,__metadata:lPe,__awaiter:CP,__generator:kP,__exportStar:uPe,__createBinding:fPe,__values:up,__read:fp,__spread:qo,__spreadArrays:dPe,__await:hPe,__asyncGenerator:pPe,__asyncDelegator:mPe,__asyncValues:gPe,__makeTemplateObject:yPe,__importStar:wPe,__importDefault:bPe,__classPrivateFieldGet:xPe,__classPrivateFieldSet:vPe}=TP.default;var RH="injectionTokens";function pw(r){var e=Reflect.getMetadata("design:paramtypes",r)||[],t=Reflect.getOwnMetadata(RH,r)||{};return Object.keys(t).forEach(function(n){e[+n]=t[n]}),e}function dp(r){return!!r.useClass}function gf(r){return!!r.useFactory}var ay=function(){function r(e){this.wrap=e,this.reflectMethods=["get","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","defineProperty","has","set","deleteProperty","apply","construct","ownKeys"]}return r.prototype.createProxy=function(e){var t=this,n={},o=!1,i,s=function(){return o||(i=e(t.wrap()),o=!0),i};return new Proxy(n,this.createHandler(s))},r.prototype.createHandler=function(e){var t={},n=function(o){t[o]=function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];i[0]=e();var a=Reflect[o];return a.apply(void 0,qo(i))}};return this.reflectMethods.forEach(n),t},r}();function ca(r){return typeof r=="string"||typeof r=="symbol"}function mw(r){return typeof r=="object"&&"token"in r&&"multiple"in r}function cy(r){return typeof r=="object"&&"token"in r&&"transform"in r}function PP(r){return typeof r=="function"||r instanceof ay}function ll(r){return!!r.useToken}function ul(r){return r.useValue!=null}function RP(r){return dp(r)||ul(r)||ll(r)||gf(r)}var NH=function(){function r(){this._registryMap=new Map}return r.prototype.entries=function(){return this._registryMap.entries()},r.prototype.getAll=function(e){return this.ensure(e),this._registryMap.get(e)},r.prototype.get=function(e){this.ensure(e);var t=this._registryMap.get(e);return t[t.length-1]||null},r.prototype.set=function(e,t){this.ensure(e),this._registryMap.get(e).push(t)},r.prototype.setAll=function(e,t){this._registryMap.set(e,t)},r.prototype.has=function(e){return this.ensure(e),this._registryMap.get(e).length>0},r.prototype.clear=function(){this._registryMap.clear()},r.prototype.ensure=function(e){this._registryMap.has(e)||this._registryMap.set(e,[])},r}(),hp=NH;var DH=function(r){mf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hp),NP=DH;var OH=function(){function r(){this.scopedResolutions=new Map}return r}(),pp=OH;function LH(r,e){if(r===null)return"at position #"+e;var t=r.split(",")[e].trim();return'"'+t+'" at position #'+e}function BH(r,e,t){return t===void 0&&(t=" "),qo([r],e.message.split(`
38
+ `).map(function(n){return t+n})).join(`
39
+ `)}function gw(r,e,t){var n=fp(r.toString().match(/constructor\(([\w, ]+)\)/)||[],2),o=n[1],i=o===void 0?null:o,s=LH(i,e);return BH("Cannot inject the dependency "+s+' of "'+r.name+'" constructor. Reason:',t)}function DP(r){if(typeof r.dispose!="function")return!1;var e=r.dispose;return!(e.length>0)}var MH=function(r){mf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hp);var UH=function(r){mf(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(hp);var FH=function(){function r(){this.preResolution=new MH,this.postResolution=new UH}return r}(),OP=FH;var yw=new Map,$H=function(){function r(e){this.parent=e,this._registry=new NP,this.interceptors=new OP,this.disposed=!1,this.disposables=new Set}return r.prototype.register=function(e,t,n){n===void 0&&(n={lifecycle:Ar.Transient}),this.ensureNotDisposed();var o;if(RP(t)?o=t:o={useClass:t},ll(o))for(var i=[e],s=o;s!=null;){var a=s.useToken;if(i.includes(a))throw new Error("Token registration cycle detected! "+qo(i,[a]).join(" -> "));i.push(a);var c=this._registry.get(a);c&&ll(c.provider)?s=c.provider:s=null}if((n.lifecycle===Ar.Singleton||n.lifecycle==Ar.ContainerScoped||n.lifecycle==Ar.ResolutionScoped)&&(ul(o)||gf(o)))throw new Error('Cannot use lifecycle "'+Ar[n.lifecycle]+'" with ValueProviders or FactoryProviders');return this._registry.set(e,{provider:o,options:n}),this},r.prototype.registerType=function(e,t){return this.ensureNotDisposed(),ca(t)?this.register(e,{useToken:t}):this.register(e,{useClass:t})},r.prototype.registerInstance=function(e,t){return this.ensureNotDisposed(),this.register(e,{useValue:t})},r.prototype.registerSingleton=function(e,t){if(this.ensureNotDisposed(),ca(e)){if(ca(t))return this.register(e,{useToken:t},{lifecycle:Ar.Singleton});if(t)return this.register(e,{useClass:t},{lifecycle:Ar.Singleton});throw new Error('Cannot register a type name as a singleton without a "to" token')}var n=e;return t&&!ca(t)&&(n=t),this.register(e,{useClass:n},{lifecycle:Ar.Singleton})},r.prototype.resolve=function(e,t,n){t===void 0&&(t=new pp),n===void 0&&(n=!1),this.ensureNotDisposed();var o=this.getRegistration(e);if(!o&&ca(e)){if(n)return;throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"Single"),o){var i=this.resolveRegistration(o,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}if(PP(e)){var i=this.construct(e,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}throw new Error("Attempted to construct an undefined constructor. Could mean a circular dependency problem. Try using `delay` function.")},r.prototype.executePreResolutionInterceptor=function(e,t){var n,o;if(this.interceptors.preResolution.has(e)){var i=[];try{for(var s=up(this.interceptors.preResolution.getAll(e)),a=s.next();!a.done;a=s.next()){var c=a.value;c.options.frequency!="Once"&&i.push(c),c.callback(e,t)}}catch(l){n={error:l}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}this.interceptors.preResolution.setAll(e,i)}},r.prototype.executePostResolutionInterceptor=function(e,t,n){var o,i;if(this.interceptors.postResolution.has(e)){var s=[];try{for(var a=up(this.interceptors.postResolution.getAll(e)),c=a.next();!c.done;c=a.next()){var l=c.value;l.options.frequency!="Once"&&s.push(l),l.callback(e,t,n)}}catch(u){o={error:u}}finally{try{c&&!c.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}this.interceptors.postResolution.setAll(e,s)}},r.prototype.resolveRegistration=function(e,t){if(this.ensureNotDisposed(),e.options.lifecycle===Ar.ResolutionScoped&&t.scopedResolutions.has(e))return t.scopedResolutions.get(e);var n=e.options.lifecycle===Ar.Singleton,o=e.options.lifecycle===Ar.ContainerScoped,i=n||o,s;return ul(e.provider)?s=e.provider.useValue:ll(e.provider)?s=i?e.instance||(e.instance=this.resolve(e.provider.useToken,t)):this.resolve(e.provider.useToken,t):dp(e.provider)?s=i?e.instance||(e.instance=this.construct(e.provider.useClass,t)):this.construct(e.provider.useClass,t):gf(e.provider)?s=e.provider.useFactory(this):s=this.construct(e.provider,t),e.options.lifecycle===Ar.ResolutionScoped&&t.scopedResolutions.set(e,s),s},r.prototype.resolveAll=function(e,t,n){var o=this;t===void 0&&(t=new pp),n===void 0&&(n=!1),this.ensureNotDisposed();var i=this.getAllRegistrations(e);if(!i&&ca(e)){if(n)return[];throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"All"),i){var s=i.map(function(c){return o.resolveRegistration(c,t)});return this.executePostResolutionInterceptor(e,s,"All"),s}var a=[this.construct(e,t)];return this.executePostResolutionInterceptor(e,a,"All"),a},r.prototype.isRegistered=function(e,t){return t===void 0&&(t=!1),this.ensureNotDisposed(),this._registry.has(e)||t&&(this.parent||!1)&&this.parent.isRegistered(e,!0)},r.prototype.reset=function(){this.ensureNotDisposed(),this._registry.clear(),this.interceptors.preResolution.clear(),this.interceptors.postResolution.clear()},r.prototype.clearInstances=function(){var e,t;this.ensureNotDisposed();try{for(var n=up(this._registry.entries()),o=n.next();!o.done;o=n.next()){var i=fp(o.value,2),s=i[0],a=i[1];this._registry.setAll(s,a.filter(function(c){return!ul(c.provider)}).map(function(c){return c.instance=void 0,c}))}}catch(c){e={error:c}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},r.prototype.createChildContainer=function(){var e,t;this.ensureNotDisposed();var n=new r(this);try{for(var o=up(this._registry.entries()),i=o.next();!i.done;i=o.next()){var s=fp(i.value,2),a=s[0],c=s[1];c.some(function(l){var u=l.options;return u.lifecycle===Ar.ContainerScoped})&&n._registry.setAll(a,c.map(function(l){return l.options.lifecycle===Ar.ContainerScoped?{provider:l.provider,options:l.options}:l}))}}catch(l){e={error:l}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return n},r.prototype.beforeResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.preResolution.set(e,{callback:t,options:n})},r.prototype.afterResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.postResolution.set(e,{callback:t,options:n})},r.prototype.dispose=function(){return CP(this,void 0,void 0,function(){var e;return kP(this,function(t){switch(t.label){case 0:return this.disposed=!0,e=[],this.disposables.forEach(function(n){var o=n.dispose();o&&e.push(o)}),[4,Promise.all(e)];case 1:return t.sent(),[2]}})})},r.prototype.getRegistration=function(e){return this.isRegistered(e)?this._registry.get(e):this.parent?this.parent.getRegistration(e):null},r.prototype.getAllRegistrations=function(e){return this.isRegistered(e)?this._registry.getAll(e):this.parent?this.parent.getAllRegistrations(e):null},r.prototype.construct=function(e,t){var n=this;if(e instanceof ay)return e.createProxy(function(i){return n.resolve(i,t)});var o=function(){var i=yw.get(e);if(!i||i.length===0){if(e.length===0)return new e;throw new Error('TypeInfo not known for "'+e.name+'"')}var s=i.map(n.resolveParams(t,e));return new(e.bind.apply(e,qo([void 0],s)))}();return DP(o)&&this.disposables.add(o),o},r.prototype.resolveParams=function(e,t){var n=this;return function(o,i){var s,a,c;try{return mw(o)?cy(o)?o.multiple?(s=n.resolve(o.transform)).transform.apply(s,qo([n.resolveAll(o.token,new pp,o.isOptional)],o.transformArgs)):(a=n.resolve(o.transform)).transform.apply(a,qo([n.resolve(o.token,e,o.isOptional)],o.transformArgs)):o.multiple?n.resolveAll(o.token,new pp,o.isOptional):n.resolve(o.token,e,o.isOptional):cy(o)?(c=n.resolve(o.transform,e)).transform.apply(c,qo([n.resolve(o.token,e)],o.transformArgs)):n.resolve(o,e)}catch(l){throw new Error(gw(t,i,l))}}},r.prototype.ensureNotDisposed=function(){if(this.disposed)throw new Error("This container has been disposed, you cannot interact with a disposed container")},r}(),ht=new $H;function KH(r){return function(e){yw.set(e,pw(e)),r&&r.token&&(Array.isArray(r.token)?r.token.forEach(function(t){ht.register(t,e)}):ht.register(r.token,e))}}var la=KH;if(typeof Reflect>"u"||!Reflect.getMetadata)throw new Error(`tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.`);var bw,fl=class{constructor(e={}){this.attrId="",this.attrValues=[],Object.assign(e)}};d([p({type:b.ObjectIdentifier})],fl.prototype,"attrId",void 0);d([p({type:b.Any,repeated:"set"})],fl.prototype,"attrValues",void 0);var LP=bw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,bw.prototype)}};LP=bw=d([C({type:A.Sequence,itemType:fl})],LP);var xw,BP=xw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,xw.prototype)}};BP=xw=d([C({type:A.Sequence,itemType:ao})],BP);var VH="1.2.840.113549",HH=`${VH}.1`,MP=`${HH}.12`,yf=`${MP}.1`,NNe=`${yf}.1`,DNe=`${yf}.2`,ONe=`${yf}.3`,LNe=`${yf}.4`,BNe=`${yf}.5`,MNe=`${yf}.6`,dl=`${MP}.10.1`;var $Ne=`${dl}.1`,KNe=`${dl}.2`,VNe=`${dl}.3`,HNe=`${dl}.4`,qNe=`${dl}.5`,jNe=`${dl}.6`,ly="1.2.840.113549.1.9";var uy=class{constructor(e={}){this.certId="",this.certValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],uy.prototype,"certId",void 0);d([p({type:b.Any,context:0})],uy.prototype,"certValue",void 0);var UP=`${ly}.22`,YNe=`${UP}.1`,QNe=`${UP}.2`;var fy=class{constructor(e={}){this.crlId="",this.crltValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],fy.prototype,"crlId",void 0);d([p({type:b.Any,context:0})],fy.prototype,"crltValue",void 0);var qH=`${ly}.23`,rDe=`${qH}.1`;var dy=class extends be{},ua=class{constructor(e={}){this.encryptionAlgorithm=new Y,this.encryptedData=new dy,Object.assign(this,e)}};d([p({type:Y})],ua.prototype,"encryptionAlgorithm",void 0);d([p({type:dy})],ua.prototype,"encryptedData",void 0);var vw,Ew;(function(r){r[r.v1=0]="v1"})(Ew||(Ew={}));var hy=class extends be{},Sw=vw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,vw.prototype)}};Sw=vw=d([C({type:A.Sequence,itemType:br})],Sw);var fa=class{constructor(e={}){this.version=Ew.v1,this.privateKeyAlgorithm=new Y,this.privateKey=new hy,Object.assign(this,e)}};d([p({type:b.Integer})],fa.prototype,"version",void 0);d([p({type:Y})],fa.prototype,"privateKeyAlgorithm",void 0);d([p({type:hy})],fa.prototype,"privateKey",void 0);d([p({type:Sw,implicit:!0,context:0,optional:!0})],fa.prototype,"attributes",void 0);var FP=class extends fa{};FP=d([C({type:A.Sequence})],FP);var $P=class extends ua{};$P=d([C({type:A.Sequence})],$P);var py=class{constructor(e={}){this.secretTypeId="",this.secretValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],py.prototype,"secretTypeId",void 0);d([p({type:b.Any,context:0})],py.prototype,"secretValue",void 0);var da=class{constructor(e={}){this.mac=new cl,this.macSalt=new be,this.iterations=1,Object.assign(this,e)}};d([p({type:cl})],da.prototype,"mac",void 0);d([p({type:be})],da.prototype,"macSalt",void 0);d([p({type:b.Integer,defaultValue:1})],da.prototype,"iterations",void 0);var hl=class{constructor(e={}){this.version=3,this.authSafe=new ao,this.macData=new da,Object.assign(this,e)}};d([p({type:b.Integer})],hl.prototype,"version",void 0);d([p({type:ao})],hl.prototype,"authSafe",void 0);d([p({type:da,optional:!0})],hl.prototype,"macData",void 0);var Aw,wf=class{constructor(e={}){this.bagId="",this.bagValue=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:b.ObjectIdentifier})],wf.prototype,"bagId",void 0);d([p({type:b.Any,context:0})],wf.prototype,"bagValue",void 0);d([p({type:fl,repeated:"set",optional:!0})],wf.prototype,"bagAttributes",void 0);var KP=Aw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Aw.prototype)}};KP=Aw=d([C({type:A.Sequence,itemType:wf})],KP);var _w,Iw,Tw,Dt="1.2.840.113549.1.9",oOe=`${Dt}.0`,tR=`${Dt}.24`,gp=`${Dt}.25`,rR=`${Dt}.26`,nR=`${Dt}.27`,iOe=`${tR}.1`,sOe=`${tR}.2`,aOe=`${Dt}.1`,cOe=`${Dt}.2`,lOe=`${Dt}.3`,uOe=`${Dt}.4`,fOe=`${Dt}.5`,dOe=`${Dt}.6`,Lw=`${Dt}.7`,hOe=`${Dt}.8`,pOe=`${Dt}.9`,mOe=`${Dt}.13`,yp=`${Dt}.14`,gOe=`${Dt}.15`,yOe=`${Dt}.20`,wOe=`${Dt}.21`;var bOe=`${gp}.1`,xOe=`${gp}.2`,vOe=`${gp}.3`,EOe=`${gp}.4`,SOe=`${gp}.5`,wp="1.3.6.1.5.5.7.9",AOe=`${wp}.1`,_Oe=`${wp}.2`,IOe=`${wp}.3`,TOe=`${wp}.4`,COe=`${wp}.5`,kOe=`${rR}.1`,POe=`${rR}.2`,ROe=`${nR}.1`,NOe=`${nR}.2`,DOe=`${Dt}.16`,OOe=`${Dt}.22`,LOe=`${Dt}.23`,BOe=`${G9}.65`,my=class extends jt{constructor(e={}){super(e)}toString(){return{}.toString(),this.ia5String||super.toString()}};d([p({type:b.IA5String})],my.prototype,"ia5String",void 0);my=d([C({type:A.Choice})],my);var VP=class extends ao{};VP=d([C({type:A.Sequence})],VP);var HP=class extends hl{};HP=d([C({type:A.Sequence})],HP);var qP=class extends ua{};qP=d([C({type:A.Sequence})],qP);var Cw=class{constructor(e=""){this.value=e}toString(){return this.value}};d([p({type:b.IA5String})],Cw.prototype,"value",void 0);Cw=d([C({type:A.Choice})],Cw);var jP=class extends my{};jP=d([C({type:A.Choice})],jP);var WP=class extends jt{};WP=d([C({type:A.Choice})],WP);var kw=class{constructor(e=new Date){this.value=e}};d([p({type:b.GeneralizedTime})],kw.prototype,"value",void 0);kw=d([C({type:A.Choice})],kw);var GP=class extends jt{};GP=d([C({type:A.Choice})],GP);var Pw=class{constructor(e="M"){this.value=e}toString(){return this.value}};d([p({type:b.PrintableString})],Pw.prototype,"value",void 0);Pw=d([C({type:A.Choice})],Pw);var gy=class{constructor(e=""){this.value=e}toString(){return this.value}};d([p({type:b.PrintableString})],gy.prototype,"value",void 0);gy=d([C({type:A.Choice})],gy);var zP=class extends gy{};zP=d([C({type:A.Choice})],zP);var XP=class extends jt{};XP=d([C({type:A.Choice})],XP);var Rw=class{constructor(e=""){this.value=e}toString(){return this.value}};d([p({type:b.ObjectIdentifier})],Rw.prototype,"value",void 0);Rw=d([C({type:A.Choice})],Rw);var YP=class extends Nt{};YP=d([C({type:A.Choice})],YP);var Nw=class{constructor(e=0){this.value=e}toString(){return this.value.toString()}};d([p({type:b.Integer})],Nw.prototype,"value",void 0);Nw=d([C({type:A.Choice})],Nw);var QP=class extends gn{};QP=d([C({type:A.Sequence})],QP);var mp=class extends jt{};mp=d([C({type:A.Choice})],mp);var ZP=_w=class extends Fn{constructor(e){super(e),Object.setPrototypeOf(this,_w.prototype)}};ZP=_w=d([C({type:A.Sequence})],ZP);var JP=Iw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Iw.prototype)}};JP=Iw=d([C({type:A.Set,itemType:Ho})],JP);var Dw=class{constructor(e=""){this.value=e}toString(){return this.value}};d([p({type:b.BmpString})],Dw.prototype,"value",void 0);Dw=d([C({type:A.Choice})],Dw);var Ow=class extends Y{};Ow=d([C({type:A.Sequence})],Ow);var eR=Tw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Tw.prototype)}};eR=Tw=d([C({type:A.Sequence,itemType:Ow})],eR);var Bw,bp=Bw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Bw.prototype)}};bp=Bw=d([C({type:A.Sequence,itemType:br})],bp);var bi=class{constructor(e={}){this.version=0,this.subject=new ct,this.subjectPKInfo=new xr,this.attributes=new bp,Object.assign(this,e)}};d([p({type:b.Integer})],bi.prototype,"version",void 0);d([p({type:ct})],bi.prototype,"subject",void 0);d([p({type:xr})],bi.prototype,"subjectPKInfo",void 0);d([p({type:bp,implicit:!0,context:0})],bi.prototype,"attributes",void 0);var ha=class{constructor(e={}){this.certificationRequestInfo=new bi,this.signatureAlgorithm=new Y,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};d([p({type:bi})],ha.prototype,"certificationRequestInfo",void 0);d([p({type:Y})],ha.prototype,"signatureAlgorithm",void 0);d([p({type:b.BitString})],ha.prototype,"signature",void 0);var _p="crypto.algorithm",Ww=class{getAlgorithms(){return ht.resolveAll(_p)}toAsnAlgorithm(e){({...e});for(let t of this.getAlgorithms()){let n=t.toAsnAlgorithm(e);if(n)return n}if(/^[0-9.]+$/.test(e.name)){let t=new Y({algorithm:e.name});if("parameters"in e){let n=e;t.parameters=n.parameters}return t}throw new Error("Cannot convert WebCrypto algorithm to ASN.1 algorithm")}toWebAlgorithm(e){for(let n of this.getAlgorithms()){let o=n.toWebAlgorithm(e);if(o)return o}return{name:e.algorithm,parameters:e.parameters}}},pl="crypto.algorithmProvider";ht.registerSingleton(pl,Ww);var xy,vn="1.3.36.3.3.2.8.1.1",oR=`${vn}.1`,iR=`${vn}.2`,sR=`${vn}.3`,aR=`${vn}.4`,cR=`${vn}.5`,lR=`${vn}.6`,uR=`${vn}.7`,fR=`${vn}.8`,dR=`${vn}.9`,hR=`${vn}.10`,pR=`${vn}.11`,mR=`${vn}.12`,gR=`${vn}.13`,yR=`${vn}.14`,wR="brainpoolP160r1",bR="brainpoolP160t1",xR="brainpoolP192r1",vR="brainpoolP192t1",ER="brainpoolP224r1",SR="brainpoolP224t1",AR="brainpoolP256r1",_R="brainpoolP256t1",IR="brainpoolP320r1",TR="brainpoolP320t1",CR="brainpoolP384r1",kR="brainpoolP384t1",PR="brainpoolP512r1",RR="brainpoolP512t1",Tt="ECDSA",vp=xy=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case Tt.toLowerCase():if("hash"in e)switch((typeof e.hash=="string"?e.hash:e.hash.name).toLowerCase()){case"sha-1":return Gk;case"sha-256":return zk;case"sha-384":return Xk;case"sha-512":return Yk}else if("namedCurve"in e){let t="";switch(e.namedCurve){case"P-256":t=nw;break;case"K-256":t=xy.SECP256K1;break;case"P-384":t=ow;break;case"P-521":t=iw;break;case wR:t=oR;break;case bR:t=iR;break;case xR:t=sR;break;case vR:t=aR;break;case ER:t=cR;break;case SR:t=lR;break;case AR:t=uR;break;case _R:t=fR;break;case IR:t=dR;break;case TR:t=hR;break;case CR:t=pR;break;case kR:t=mR;break;case PR:t=gR;break;case RR:t=yR;break}if(t)return new Y({algorithm:rl,parameters:ee.serialize(new gi({namedCurve:t}))})}}return null}toWebAlgorithm(e){switch(e.algorithm){case op:return{name:Tt,hash:{name:"SHA-1"}};case ip:return{name:Tt,hash:{name:"SHA-256"}};case sp:return{name:Tt,hash:{name:"SHA-384"}};case ap:return{name:Tt,hash:{name:"SHA-512"}};case rl:{if(!e.parameters)throw new TypeError("Cannot get required parameters from EC algorithm");switch(ee.parse(e.parameters,gi).namedCurve){case nw:return{name:Tt,namedCurve:"P-256"};case xy.SECP256K1:return{name:Tt,namedCurve:"K-256"};case ow:return{name:Tt,namedCurve:"P-384"};case iw:return{name:Tt,namedCurve:"P-521"};case oR:return{name:Tt,namedCurve:wR};case iR:return{name:Tt,namedCurve:bR};case sR:return{name:Tt,namedCurve:xR};case aR:return{name:Tt,namedCurve:vR};case cR:return{name:Tt,namedCurve:ER};case lR:return{name:Tt,namedCurve:SR};case uR:return{name:Tt,namedCurve:AR};case fR:return{name:Tt,namedCurve:_R};case dR:return{name:Tt,namedCurve:IR};case hR:return{name:Tt,namedCurve:TR};case pR:return{name:Tt,namedCurve:CR};case mR:return{name:Tt,namedCurve:kR};case gR:return{name:Tt,namedCurve:PR};case yR:return{name:Tt,namedCurve:RR}}}}return null}};vp.SECP256K1="1.3.132.0.10";vp=xy=d([la()],vp);ht.registerSingleton(_p,vp);var VR=Symbol("name"),HR=Symbol("value"),We=class{constructor(e,t={},n=""){this[VR]=e,this[HR]=n;for(let o in t)this[o]=t[o]}};We.NAME=VR;We.VALUE=HR;var Gw=class{static toTextObject(e){let t=new We("Algorithm Identifier",{},vi.toString(e.algorithm));if(e.parameters)switch(e.algorithm){case rl:{let n=new vp().toWebAlgorithm(e);n&&"namedCurve"in n?t["Named Curve"]=n.namedCurve:t.Parameters=e.parameters;break}default:t.Parameters=e.parameters}return t}},vi=class{static toString(e){let t=this.items[e];return t||e}};vi.items={[ol]:"sha1",[ry]:"sha224",[il]:"sha256",[sl]:"sha384",[al]:"sha512",[yi]:"rsaEncryption",[cf]:"sha1WithRSAEncryption",[tP]:"sha224WithRSAEncryption",[ty]:"sha256WithRSAEncryption",[lf]:"sha384WithRSAEncryption",[uf]:"sha512WithRSAEncryption",[rl]:"ecPublicKey",[op]:"ecdsaWithSHA1",[ey]:"ecdsaWithSHA224",[ip]:"ecdsaWithSHA256",[sp]:"ecdsaWithSHA384",[ap]:"ecdsaWithSHA512",[Tk]:"TLS WWW server authentication",[Ck]:"TLS WWW client authentication",[kk]:"Code Signing",[Pk]:"E-mail Protection",[Rk]:"Time Stamping",[Nk]:"OCSP Signing",[jk]:"Signed Data"};var ns=class{static serialize(e){return this.serializeObj(e).join(`
40
+ `)}static pad(e=0){return"".padStart(2*e," ")}static serializeObj(e,t=0){let n=[],o=this.pad(t++),i="",s=e[We.VALUE];s&&(i=` ${s}`),n.push(`${o}${e[We.NAME]}:${i}`),o=this.pad(t);for(let a in e){if(typeof a=="symbol")continue;let c=e[a],l=a?`${a}: `:"";if(typeof c=="string"||typeof c=="number"||typeof c=="boolean")n.push(`${o}${l}${c}`);else if(c instanceof Date)n.push(`${o}${l}${c.toUTCString()}`);else if(Array.isArray(c))for(let u of c)u[We.NAME]=a,n.push(...this.serializeObj(u,t));else if(c instanceof We)c[We.NAME]=a,n.push(...this.serializeObj(c,t));else if(Q.BufferSourceConverter.isBufferSource(c))a?(n.push(`${o}${l}`),n.push(...this.serializeBufferSource(c,t+1))):n.push(...this.serializeBufferSource(c,t));else if("toTextObject"in c){let u=c.toTextObject();u[We.NAME]=a,n.push(...this.serializeObj(u,t))}else throw new TypeError("Cannot serialize data in text format. Unsupported type.")}return n}static serializeBufferSource(e,t=0){let n=this.pad(t),o=Q.BufferSourceConverter.toUint8Array(e),i=[];for(let s=0;s<o.length;){let a=[];for(let c=0;c<16&&s<o.length;c++){c===8&&a.push("");let l=o[s++].toString(16).padStart(2,"0");a.push(l)}i.push(`${n}${a.join(" ")}`)}return i}static serializeAlgorithm(e){return this.algorithmSerializer.toTextObject(e)}};ns.oidSerializer=vi;ns.algorithmSerializer=Gw;var pa=class r{constructor(...e){if(e.length===1){let t=e[0];this.rawData=ee.serialize(t),this.onInit(t)}else{let t=ee.parse(e[0],e[1]);this.rawData=Q.BufferSourceConverter.toArrayBuffer(e[0]),this.onInit(t)}}equal(e){return e instanceof r?(0,Q.isEqual)(e.rawData,this.rawData):!1}toString(e="text"){switch(e){case"asn":return ee.toString(this.rawData);case"text":return ns.serialize(this.toTextObject());case"hex":return Q.Convert.ToHex(this.rawData);case"base64":return Q.Convert.ToBase64(this.rawData);case"base64url":return Q.Convert.ToBase64Url(this.rawData);default:throw TypeError("Argument 'format' is unsupported value")}}getTextName(){return this.constructor.NAME}toTextObject(){let e=this.toTextObjectEmpty();return e[""]=this.rawData,e}toTextObjectEmpty(e){return new We(this.getTextName(),{},e)}};pa.NAME="ASN";var uo=class r extends pa{constructor(...e){let t;Q.BufferSourceConverter.isBufferSource(e[0])?t=Q.BufferSourceConverter.toArrayBuffer(e[0]):t=ee.serialize(new vr({extnID:e[0],critical:e[1],extnValue:new be(Q.BufferSourceConverter.toArrayBuffer(e[2]))})),super(t,vr)}onInit(e){this.type=e.extnID,this.critical=e.critical,this.value=e.extnValue.buffer}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.value,e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty(this.critical?"critical":void 0);return e[We.NAME]===r.NAME&&(e[We.NAME]=vi.toString(this.type)),e}},qR,Ep=class r{static isCryptoKeyPair(e){return e&&e.privateKey&&e.publicKey}static isCryptoKey(e){return e&&e.usages&&e.type&&e.algorithm&&e.extractable!==void 0}constructor(){this.items=new Map,this[qR]="CryptoProvider",typeof self<"u"&&typeof crypto<"u"?this.set(r.DEFAULT,crypto):typeof globalThis<"u"&&globalThis.crypto&&globalThis.crypto.subtle&&this.set(r.DEFAULT,globalThis.crypto)}clear(){this.items.clear()}delete(e){return this.items.delete(e)}forEach(e,t){return this.items.forEach(e,t)}has(e){return this.items.has(e)}get size(){return this.items.size}entries(){return this.items.entries()}keys(){return this.items.keys()}values(){return this.items.values()}[Symbol.iterator](){return this.items[Symbol.iterator]()}get(e=r.DEFAULT){let t=this.items.get(e.toLowerCase());if(!t)throw new Error(`Cannot get Crypto by name '${e}'`);return t}set(e,t){if(typeof e=="string"){if(!t)throw new TypeError("Argument 'value' is required");this.items.set(e.toLowerCase(),t)}else this.items.set(r.DEFAULT,e);return this}};qR=Symbol.toStringTag;Ep.DEFAULT="default";var _r=new Ep,zH=/^[0-2](?:\.[1-9][0-9]*)+$/;function XH(r){return new RegExp(zH).test(r)}var Ey=class{constructor(e={}){this.items={};for(let t in e)this.register(t,e[t])}get(e){return this.items[e]||null}findId(e){return XH(e)?e:this.get(e)}register(e,t){this.items[e]=t,this.items[t]=e}},bn=new Ey;bn.register("CN","2.5.4.3");bn.register("L","2.5.4.7");bn.register("ST","2.5.4.8");bn.register("O","2.5.4.10");bn.register("OU","2.5.4.11");bn.register("C","2.5.4.6");bn.register("DC","0.9.2342.19200300.100.1.25");bn.register("E","1.2.840.113549.1.9.1");bn.register("G","2.5.4.42");bn.register("I","2.5.4.43");bn.register("SN","2.5.4.4");bn.register("T","2.5.4.12");function YH(r,e){return`\\${Q.Convert.ToHex(Q.Convert.FromUtf8String(e)).toUpperCase()}`}function QH(r){return r.replace(/([,+"\\<>;])/g,"\\$1").replace(/^([ #])/,"\\$1").replace(/([ ]$)/,"\\$1").replace(/([\r\n\t])/,YH)}var lo=class r{static isASCII(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return!1;return!0}static isPrintableString(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/g.test(e)}constructor(e,t={}){this.extraNames=new Ey,this.asn=new ct;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n];this.extraNames.register(n,o)}typeof e=="string"?this.asn=this.fromString(e):e instanceof ct?this.asn=e:Q.BufferSourceConverter.isBufferSource(e)?this.asn=ee.parse(e,ct):this.asn=this.fromJSON(e)}getField(e){let t=this.extraNames.findId(e)||bn.findId(e),n=[];for(let o of this.asn)for(let i of o)i.type===t&&n.push(i.value.toString());return n}getName(e){return this.extraNames.get(e)||bn.get(e)}toString(){return this.asn.map(e=>e.map(t=>{let n=this.getName(t.type)||t.type,o=t.value.anyValue?`#${Q.Convert.ToHex(t.value.anyValue)}`:QH(t.value.toString());return`${n}=${o}`}).join("+")).join(", ")}toJSON(){var e;let t=[];for(let n of this.asn){let o={};for(let i of n){let s=this.getName(i.type)||i.type;(e=o[s])!==null&&e!==void 0||(o[s]=[]),o[s].push(i.value.anyValue?`#${Q.Convert.ToHex(i.value.anyValue)}`:i.value.toString())}t.push(o)}return t}fromString(e){let t=new ct,n=/(\d\.[\d.]*\d|[A-Za-z]+)=((?:"")|(?:".*?[^\\]")|(?:[^,+].*?(?:[^\\][,+]))|(?:))([,+])?/g,o=null,i=",";for(;o=n.exec(`${e},`);){let[,s,a]=o,c=a[a.length-1];(c===","||c==="+")&&(a=a.slice(0,a.length-1),o[3]=c);let l=o[3];s=this.getTypeOid(s);let u=this.createAttribute(s,a);i==="+"?t[t.length-1].push(u):t.push(new Xs([u])),i=l}return t}fromJSON(e){let t=new ct;for(let n of e){let o=new Xs;for(let i in n){let s=this.getTypeOid(i),a=n[i];for(let c of a){let l=this.createAttribute(s,c);o.push(l)}}t.push(o)}return t}getTypeOid(e){if(/[\d.]+/.test(e)||(e=this.getName(e)||""),!e)throw new Error(`Cannot get OID for name type '${e}'`);return e}createAttribute(e,t){let n=new Bc({type:e});if(typeof t=="object")for(let o in t)switch(o){case"ia5String":n.value.ia5String=t[o];break;case"utf8String":n.value.utf8String=t[o];break;case"universalString":n.value.universalString=t[o];break;case"bmpString":n.value.bmpString=t[o];break;case"printableString":n.value.printableString=t[o];break}else if(t[0]==="#")n.value.anyValue=Q.Convert.FromHex(t.slice(1));else{let o=this.processStringValue(t);e===this.getName("E")||e===this.getName("DC")?n.value.ia5String=o:r.isPrintableString(o)?n.value.printableString=o:n.value.utf8String=o}return n}processStringValue(e){let t=/"(.*?[^\\])?"/.exec(e);return t&&(e=t[1]),e.replace(/\\0a/ig,`
41
+ `).replace(/\\0d/ig,"\r").replace(/\\0g/ig," ").replace(/\\(.)/g,"$1")}toArrayBuffer(){return ee.serialize(this.asn)}async getThumbprint(...e){var t;let n,o="SHA-1";return e.length>=1&&!(!((t=e[0])===null||t===void 0)&&t.subtle)?(o=e[0]||o,n=e[1]||_r.get()):n=e[0]||_r.get(),await n.subtle.digest(o,this.toArrayBuffer())}},jR="Cannot initialize GeneralName from ASN.1 data.",NR=`${jR} Unsupported string format in use.`,ZH=`${jR} Value doesn't match to GUID regular expression.`,DR=/^([0-9a-f]{8})-?([0-9a-f]{4})-?([0-9a-f]{4})-?([0-9a-f]{4})-?([0-9a-f]{12})$/i,OR="1.3.6.1.4.1.311.25.1",LR="1.3.6.1.4.1.311.20.2.3",Mw="dns",Uw="dn",Fw="email",$w="ip",Kw="url",Vw="guid",Hw="upn",yy="id",xi=class extends pa{constructor(...e){let t;if(e.length===2)switch(e[0]){case Uw:{let n=new lo(e[1]).toArrayBuffer(),o=ee.parse(n,ct);t=new Ee({directoryName:o});break}case Mw:t=new Ee({dNSName:e[1]});break;case Fw:t=new Ee({rfc822Name:e[1]});break;case Vw:{let n=new RegExp(DR,"i").exec(e[1]);if(!n)throw new Error("Cannot parse GUID value. Value doesn't match to regular expression");let o=n.slice(1).map((i,s)=>s<3?Q.Convert.ToHex(new Uint8Array(Q.Convert.FromHex(i)).reverse()):i).join("");t=new Ee({otherName:new Ys({typeId:OR,value:ee.serialize(new be(Q.Convert.FromHex(o)))})});break}case $w:t=new Ee({iPAddress:e[1]});break;case yy:t=new Ee({registeredID:e[1]});break;case Hw:{t=new Ee({otherName:new Ys({typeId:LR,value:ee.serialize(p9.toASN(e[1]))})});break}case Kw:t=new Ee({uniformResourceIdentifier:e[1]});break;default:throw new Error("Cannot create GeneralName. Unsupported type of the name")}else Q.BufferSourceConverter.isBufferSource(e[0])?t=ee.parse(e[0],Ee):t=e[0];super(t)}onInit(e){if(e.dNSName!=null)this.type=Mw,this.value=e.dNSName;else if(e.rfc822Name!=null)this.type=Fw,this.value=e.rfc822Name;else if(e.iPAddress!=null)this.type=$w,this.value=e.iPAddress;else if(e.uniformResourceIdentifier!=null)this.type=Kw,this.value=e.uniformResourceIdentifier;else if(e.registeredID!=null)this.type=yy,this.value=e.registeredID;else if(e.directoryName!=null)this.type=Uw,this.value=new lo(e.directoryName).toString();else if(e.otherName!=null)if(e.otherName.typeId===OR){this.type=Vw;let t=ee.parse(e.otherName.value,be),n=new RegExp(DR,"i").exec(Q.Convert.ToHex(t));if(!n)throw new Error(ZH);this.value=n.slice(1).map((o,i)=>i<3?Q.Convert.ToHex(new Uint8Array(Q.Convert.FromHex(o)).reverse()):o).join("-")}else if(e.otherName.typeId===LR)this.type=Hw,this.value=ee.parse(e.otherName.value,jt).toString();else throw new Error(NR);else throw new Error(NR)}toJSON(){return{type:this.type,value:this.value}}toTextObject(){let e;switch(this.type){case Uw:case Mw:case Vw:case $w:case yy:case Hw:case Kw:e=this.type.toUpperCase();break;case Fw:e="Email";break;default:throw new Error("Unsupported GeneralName type")}let t=this.value;return this.type===yy&&(t=vi.toString(t)),new We(e,void 0,t)}},ml=class extends pa{constructor(e){let t;if(e instanceof At)t=e;else if(Array.isArray(e)){let n=[];for(let o of e)if(o instanceof Ee)n.push(o);else{let i=ee.parse(new xi(o.type,o.value).rawData,Ee);n.push(i)}t=new At(n)}else if(Q.BufferSourceConverter.isBufferSource(e))t=ee.parse(e,At);else throw new Error("Cannot initialize GeneralNames. Incorrect incoming arguments");super(t)}onInit(e){let t=[];for(let n of e){let o=null;try{o=new xi(n)}catch{continue}t.push(o)}this.items=t}toJSON(){return this.items.map(e=>e.toJSON())}toTextObject(){let e=super.toTextObjectEmpty();for(let t of this.items){let n=t.toTextObject(),o=e[n[We.NAME]];Array.isArray(o)||(o=[],e[n[We.NAME]]=o),o.push(n)}return e}};ml.NAME="GeneralNames";var xp="-{5}",Sp="\\n",JH=`[^${Sp}]+`,eq=`${xp}BEGIN (${JH}(?=${xp}))${xp}`,tq=`${xp}END \\1${xp}`,bf="\\n",rq=`[^:${Sp}]+`,nq=`(?:[^${Sp}]+${bf}(?: +[^${Sp}]+${bf})*)`,oq="[a-zA-Z0-9=+/]+",iq=`(?:${oq}${bf})+`,BR=`${eq}${bf}(?:((?:${rq}: ${nq})+))?${bf}?(${iq})${tq}`,Zr=class{static isPem(e){return typeof e=="string"&&new RegExp(BR,"g").test(e)}static decodeWithHeaders(e){e=e.replace(/\r/g,"");let t=new RegExp(BR,"g"),n=[],o=null;for(;o=t.exec(e);){let i=o[3].replace(new RegExp(`[${Sp}]+`,"g"),""),s={type:o[1],headers:[],rawData:Q.Convert.FromBase64(i)},a=o[2];if(a){let c=a.split(new RegExp(bf,"g")),l=null;for(let u of c){let[f,h]=u.split(/:(.*)/);if(h===void 0){if(!l)throw new Error("Cannot parse PEM string. Incorrect header value");l.value+=f.trim()}else l&&s.headers.push(l),l={key:f,value:h.trim()}}l&&s.headers.push(l)}n.push(s)}return n}static decode(e){return this.decodeWithHeaders(e).map(n=>n.rawData)}static decodeFirst(e){let t=this.decode(e);if(!t.length)throw new RangeError("PEM string doesn't contain any objects");return t[0]}static encode(e,t){if(Array.isArray(e)){let n=new Array;return t?e.forEach(o=>{if(!Q.BufferSourceConverter.isBufferSource(o))throw new TypeError("Cannot encode array of BufferSource in PEM format. Not all items of the array are BufferSource");n.push(this.encodeStruct({type:t,rawData:Q.BufferSourceConverter.toArrayBuffer(o)}))}):e.forEach(o=>{if(!("type"in o))throw new TypeError("Cannot encode array of PemStruct in PEM format. Not all items of the array are PemStrut");n.push(this.encodeStruct(o))}),n.join(`
42
+ `)}else{if(!t)throw new Error("Required argument 'tag' is missed");return this.encodeStruct({type:t,rawData:Q.BufferSourceConverter.toArrayBuffer(e)})}}static encodeStruct(e){var t;let n=e.type.toLocaleUpperCase(),o=[];if(o.push(`-----BEGIN ${n}-----`),!((t=e.headers)===null||t===void 0)&&t.length){for(let l of e.headers)o.push(`${l.key}: ${l.value}`);o.push("")}let i=Q.Convert.ToBase64(e.rawData),s,a=0,c=Array();for(;a<i.length&&(i.length-a<64?s=i.substring(a):(s=i.substring(a,a+64),a+=64),s.length!==0);)if(c.push(s),s.length<64)break;return o.push(...c),o.push(`-----END ${n}-----`),o.join(`
43
+ `)}};Zr.CertificateTag="CERTIFICATE";Zr.CrlTag="CRL";Zr.CertificateRequestTag="CERTIFICATE REQUEST";Zr.PublicKeyTag="PUBLIC KEY";Zr.PrivateKeyTag="PRIVATE KEY";var ma=class r extends pa{static isAsnEncoded(e){return Q.BufferSourceConverter.isBufferSource(e)||typeof e=="string"}static toArrayBuffer(e){if(typeof e=="string"){if(Zr.isPem(e))return Zr.decode(e)[0];if(Q.Convert.isHex(e))return Q.Convert.FromHex(e);if(Q.Convert.isBase64(e))return Q.Convert.FromBase64(e);if(Q.Convert.isBase64Url(e))return Q.Convert.FromBase64Url(e);throw new TypeError("Unsupported format of 'raw' argument. Must be one of DER, PEM, HEX, Base64, or Base4Url")}else{let t=Q.Convert.ToBinary(e);return Zr.isPem(t)?Zr.decode(t)[0]:Q.Convert.isHex(t)?Q.Convert.FromHex(t):Q.Convert.isBase64(t)?Q.Convert.FromBase64(t):Q.Convert.isBase64Url(t)?Q.Convert.FromBase64Url(t):Q.BufferSourceConverter.toArrayBuffer(e)}}constructor(...e){r.isAsnEncoded(e[0])?super(r.toArrayBuffer(e[0]),e[1]):super(e[0])}toString(e="pem"){switch(e){case"pem":return Zr.encode(this.rawData,this.tag);default:return super.toString(e)}}},rs=class r extends ma{static async create(e,t=_r.get()){if(e instanceof r)return e;if(Ep.isCryptoKey(e)){if(e.type!=="public")throw new TypeError("Public key is required");let n=await t.subtle.exportKey("spki",e);return new r(n)}else{if(e.publicKey)return e.publicKey;if(Q.BufferSourceConverter.isBufferSource(e))return new r(e);throw new TypeError("Unsupported PublicKeyType")}}constructor(e){ma.isAsnEncoded(e)?super(e,xr):super(e),this.tag=Zr.PublicKeyTag}async export(...e){let t,n=["verify"],o={hash:"SHA-256",...this.algorithm};e.length>1?(o=e[0]||o,n=e[1]||n,t=e[2]||_r.get()):t=e[0]||_r.get();let i=this.rawData,s=ee.parse(this.rawData,xr);return s.algorithm.algorithm===sa&&(i=sq(s,i)),t.subtle.importKey("spki",i,o,!0,n)}onInit(e){let t=ht.resolve(pl),n=this.algorithm=t.toWebAlgorithm(e.algorithm);switch(e.algorithm.algorithm){case yi:{let o=ee.parse(e.subjectPublicKey,hf),i=Q.BufferSourceConverter.toUint8Array(o.modulus);n.publicExponent=Q.BufferSourceConverter.toUint8Array(o.publicExponent),n.modulusLength=(i[0]?i:i.slice(1)).byteLength<<3;break}}}async getThumbprint(...e){var t;let n,o="SHA-1";return e.length>=1&&!(!((t=e[0])===null||t===void 0)&&t.subtle)?(o=e[0]||o,n=e[1]||_r.get()):n=e[0]||_r.get(),await n.subtle.digest(o,this.rawData)}async getKeyIdentifier(...e){let t,n="SHA-1";e.length===1?typeof e[0]=="string"?(n=e[0],t=_r.get()):t=e[0]:e.length===2?(n=e[0],t=e[1]):t=_r.get();let o=ee.parse(this.rawData,xr);return await t.subtle.digest(n,o.subjectPublicKey)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,xr);switch(e.Algorithm=ns.serializeAlgorithm(t.algorithm),t.algorithm.algorithm){case rl:e["EC Point"]=t.subjectPublicKey;break;case yi:default:e["Raw Data"]=t.subjectPublicKey}return e}};function sq(r,e){return r.algorithm=new Y({algorithm:yi,parameters:null}),e=ee.serialize(r),e}var Sy=class r extends uo{static async create(e,t=!1,n=_r.get()){if("name"in e&&"serialNumber"in e)return new r(e,t);let i=await(await rs.create(e,n)).getKeyIdentifier(n);return new r(Q.Convert.ToHex(i),t)}constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(typeof e[0]=="string"){let t=new di({keyIdentifier:new Fc(Q.Convert.FromHex(e[0]))});super(D3,e[1],ee.serialize(t))}else{let t=e[0],n=t.name instanceof ml?ee.parse(t.name.rawData,At):t.name,o=new di({authorityCertIssuer:n,authorityCertSerialNumber:Q.Convert.FromHex(t.serialNumber)});super(D3,e[1],ee.serialize(o))}}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,di);t.keyIdentifier&&(this.keyId=Q.Convert.ToHex(t.keyIdentifier)),(t.authorityCertIssuer||t.authorityCertSerialNumber)&&(this.certId={name:t.authorityCertIssuer||[],serialNumber:t.authorityCertSerialNumber?Q.Convert.ToHex(t.authorityCertSerialNumber):""})}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,di);return t.authorityCertIssuer&&(e["Authority Issuer"]=new ml(t.authorityCertIssuer).toTextObject()),t.authorityCertSerialNumber&&(e["Authority Serial Number"]=t.authorityCertSerialNumber),t.keyIdentifier&&(e[""]=t.keyIdentifier),e}};Sy.NAME="Authority Key Identifier";var xf=class extends uo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,$c);this.ca=t.cA,this.pathLength=t.pathLenConstraint}else{let t=new $c({cA:e[0],pathLenConstraint:e[1]});super(O3,e[2],ee.serialize(t)),this.ca=e[0],this.pathLength=e[1]}}toTextObject(){let e=this.toTextObjectWithoutValue();return this.ca&&(e.CA=this.ca),this.pathLength!==void 0&&(e["Path Length"]=this.pathLength),e}};xf.NAME="Basic Constraints";var MR;(function(r){r.serverAuth="1.3.6.1.5.5.7.3.1",r.clientAuth="1.3.6.1.5.5.7.3.2",r.codeSigning="1.3.6.1.5.5.7.3.3",r.emailProtection="1.3.6.1.5.5.7.3.4",r.timeStamping="1.3.6.1.5.5.7.3.8",r.ocspSigning="1.3.6.1.5.5.7.3.9"})(MR||(MR={}));var Ay=class extends uo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,Fh);this.usages=t.map(n=>n)}else{let t=new Fh(e[0]);super(U3,e[1],ee.serialize(t)),this.usages=e[0]}}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.usages.map(t=>vi.toString(t)).join(", "),e}};Ay.NAME="Extended Key Usages";var UR;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(UR||(UR={}));var _y=class extends uo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,qu);this.usages=t.toNumber()}else{let t=new qu(e[0]);super(F3,e[1],ee.serialize(t)),this.usages=e[0]}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,qu);return e[""]=t.toJSON().join(", "),e}};_y.NAME="Key Usages";var Iy=class r extends uo{static async create(e,t=!1,n=_r.get()){let i=await(await rs.create(e,n)).getKeyIdentifier(n);return new r(Q.Convert.ToHex(i),t)}constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,pn);this.keyId=Q.Convert.ToHex(t)}else{let t=typeof e[0]=="string"?Q.Convert.FromHex(e[0]):e[0],n=new pn(t);super($9,e[1],ee.serialize(n)),this.keyId=Q.Convert.ToHex(t)}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,pn);return e[""]=t,e}};Iy.NAME="Subject Key Identifier";var Ty=class extends uo{constructor(...e){Q.BufferSourceConverter.isBufferSource(e[0])?super(e[0]):super(U9,e[1],new ml(e[0]||[]).rawData)}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,H3);this.names=new ml(t)}toTextObject(){let e=this.toTextObjectWithoutValue(),t=this.names.toTextObject();for(let n in t)e[n]=t[n];return e}};Ty.NAME="Subject Alternative Name";var xn=class{static register(e,t){this.items.set(e,t)}static create(e){let t=new uo(e),n=this.items.get(t.type);return n?new n(e):t}};xn.items=new Map;var Cy=class extends uo{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let n=ee.parse(this.value,Oh);this.policies=n.map(o=>o.policyIdentifier)}else{let n=e[0],o=(t=e[1])!==null&&t!==void 0?t:!1,i=new Oh(n.map(s=>new Kc({policyIdentifier:s})));super(B3,o,ee.serialize(i)),this.policies=n}}toTextObject(){let e=this.toTextObjectWithoutValue();return e.Policy=this.policies.map(t=>new We("",{},vi.toString(t))),e}};Cy.NAME="Certificate Policies";xn.register(B3,Cy);var ky=class extends uo{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(Array.isArray(e[0])&&typeof e[0][0]=="string"){let o=e[0].map(s=>new hi({distributionPoint:new Yi({fullName:[new Ee({uniformResourceIdentifier:s})]})})),i=new Js(o);super(M3,e[1],ee.serialize(i))}else{let n=new Js(e[0]);super(M3,e[1],ee.serialize(n))}(t=this.distributionPoints)!==null&&t!==void 0||(this.distributionPoints=[])}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,Js);this.distributionPoints=t}toTextObject(){let e=this.toTextObjectWithoutValue();return e["Distribution Point"]=this.distributionPoints.map(t=>{var n;let o={};return t.distributionPoint&&(o[""]=(n=t.distributionPoint.fullName)===null||n===void 0?void 0:n.map(i=>new xi(i).toString()).join(", ")),t.reasons&&(o.Reasons=t.reasons.toString()),t.cRLIssuer&&(o["CRL Issuer"]=t.cRLIssuer.map(i=>i.toString()).join(", ")),o}),e}};ky.NAME="CRL Distribution Points";var Py=class extends uo{constructor(...e){var t,n,o,i;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(e[0]instanceof Uc){let s=new Uc(e[0]);super(N3,e[1],ee.serialize(s))}else{let s=e[0],a=new Uc;by(a,s,E9,"ocsp"),by(a,s,S9,"caIssuers"),by(a,s,A9,"timeStamping"),by(a,s,_9,"caRepository"),super(N3,e[1],ee.serialize(a))}(t=this.ocsp)!==null&&t!==void 0||(this.ocsp=[]),(n=this.caIssuers)!==null&&n!==void 0||(this.caIssuers=[]),(o=this.timeStamping)!==null&&o!==void 0||(this.timeStamping=[]),(i=this.caRepository)!==null&&i!==void 0||(this.caRepository=[])}onInit(e){super.onInit(e),this.ocsp=[],this.caIssuers=[],this.timeStamping=[],this.caRepository=[],ee.parse(e.extnValue,Uc).forEach(n=>{switch(n.accessMethod){case E9:this.ocsp.push(new xi(n.accessLocation));break;case S9:this.caIssuers.push(new xi(n.accessLocation));break;case A9:this.timeStamping.push(new xi(n.accessLocation));break;case _9:this.caRepository.push(new xi(n.accessLocation));break}})}toTextObject(){let e=this.toTextObjectWithoutValue();return this.ocsp.length&&wy(e,"OCSP",this.ocsp),this.caIssuers.length&&wy(e,"CA Issuers",this.caIssuers),this.timeStamping.length&&wy(e,"Time Stamping",this.timeStamping),this.caRepository.length&&wy(e,"CA Repository",this.caRepository),e}};Py.NAME="Authority Info Access";function wy(r,e,t){if(t.length===1)r[e]=t[0].toTextObject();else{let n=new We("");t.forEach((o,i)=>{let s=o.toTextObject(),a=`${s[We.NAME]} ${i+1}`,c=n[a];Array.isArray(c)||(c=[],n[a]=c),c.push(s)}),r[e]=n}}function by(r,e,t,n){let o=e[n];o&&(Array.isArray(o)?o:[o]).forEach(s=>{typeof s=="string"&&(s=new xi("url",s)),r.push(new zi({accessMethod:t,accessLocation:ee.parse(s.rawData,Ee)}))})}var vf=class r extends pa{constructor(...e){let t;if(Q.BufferSourceConverter.isBufferSource(e[0]))t=Q.BufferSourceConverter.toArrayBuffer(e[0]);else{let n=e[0],o=Array.isArray(e[1])?e[1].map(i=>Q.BufferSourceConverter.toArrayBuffer(i)):[];t=ee.serialize(new br({type:n,values:o}))}super(t,br)}onInit(e){this.type=e.type,this.values=e.values}toTextObject(){let e=this.toTextObjectWithoutValue();return e.Value=this.values.map(t=>new We("",{"":t})),e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty();return e[We.NAME]===r.NAME&&(e[We.NAME]=vi.toString(this.type)),e}};vf.NAME="Attribute";var Ry=class extends vf{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else{let n=new mp({printableString:e[0]});super(Lw,[ee.serialize(n)])}(t=this.password)!==null&&t!==void 0||(this.password="")}onInit(e){if(super.onInit(e),this.values[0]){let t=ee.parse(this.values[0],mp);this.password=t.toString()}}toTextObject(){let e=this.toTextObjectWithoutValue();return e[We.VALUE]=this.password,e}};Ry.NAME="Challenge Password";var Ap=class extends vf{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else{let n=e[0],o=new Fn;for(let i of n)o.push(ee.parse(i.rawData,vr));super(yp,[ee.serialize(o)])}(t=this.items)!==null&&t!==void 0||(this.items=[])}onInit(e){if(super.onInit(e),this.values[0]){let t=ee.parse(this.values[0],Fn);this.items=t.map(n=>xn.create(ee.serialize(n)))}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=this.items.map(n=>n.toTextObject());for(let n of t)e[n[We.NAME]]=n;return e}};Ap.NAME="Extensions";var Ef=class{static register(e,t){this.items.set(e,t)}static create(e){let t=new vf(e),n=this.items.get(t.type);return n?new n(e):t}};Ef.items=new Map;var Ip="crypto.signatureFormatter",zw=class{toAsnSignature(e,t){return Q.BufferSourceConverter.toArrayBuffer(t)}toWebSignature(e,t){return Q.BufferSourceConverter.toArrayBuffer(t)}},vy,Xw=vy=class{static createPssParams(e,t){let n=vy.getHashAlgorithm(e);return n?new wi({hashAlgorithm:n,maskGenAlgorithm:new Y({algorithm:aa,parameters:ee.serialize(n)}),saltLength:t}):null}static getHashAlgorithm(e){let t=ht.resolve(pl);return typeof e=="string"?t.toAsnAlgorithm({name:e}):typeof e=="object"&&e&&"name"in e?t.toAsnAlgorithm(e):null}toAsnAlgorithm(e){switch(e.name.toLowerCase()){case"rsassa-pkcs1-v1_5":if("hash"in e){let t;if(typeof e.hash=="string")t=e.hash;else if(e.hash&&typeof e.hash=="object"&&"name"in e.hash&&typeof e.hash.name=="string")t=e.hash.name.toUpperCase();else throw new Error("Cannot get hash algorithm name");switch(t.toLowerCase()){case"sha-1":return new Y({algorithm:cf,parameters:null});case"sha-256":return new Y({algorithm:ty,parameters:null});case"sha-384":return new Y({algorithm:lf,parameters:null});case"sha-512":return new Y({algorithm:uf,parameters:null})}}else return new Y({algorithm:yi,parameters:null});break;case"rsa-pss":if("hash"in e){if(!("saltLength"in e&&typeof e.saltLength=="number"))throw new Error("Cannot get 'saltLength' from 'alg' argument");let t=vy.createPssParams(e.hash,e.saltLength);if(!t)throw new Error("Cannot create PSS parameters");return new Y({algorithm:sa,parameters:ee.serialize(t)})}else return new Y({algorithm:sa,parameters:null})}return null}toWebAlgorithm(e){switch(e.algorithm){case yi:return{name:"RSASSA-PKCS1-v1_5"};case cf:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-1"}};case ty:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case lf:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-384"}};case uf:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-512"}};case sa:if(e.parameters){let t=ee.parse(e.parameters,wi);return{name:"RSA-PSS",hash:ht.resolve(pl).toWebAlgorithm(t.hashAlgorithm),saltLength:t.saltLength}}else return{name:"RSA-PSS"}}return null}};Xw=vy=d([la()],Xw);ht.registerSingleton(_p,Xw);var Yw=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case"sha-1":return new Y({algorithm:ol});case"sha-256":return new Y({algorithm:il});case"sha-384":return new Y({algorithm:sl});case"sha-512":return new Y({algorithm:al})}return null}toWebAlgorithm(e){switch(e.algorithm){case ol:return{name:"SHA-1"};case il:return{name:"SHA-256"};case sl:return{name:"SHA-384"};case al:return{name:"SHA-512"}}return null}};Yw=d([la()],Yw);ht.registerSingleton(_p,Yw);var os=class r{addPadding(e,t){let n=Q.BufferSourceConverter.toUint8Array(t),o=new Uint8Array(e);return o.set(n,e-n.length),o}removePadding(e,t=!1){let n=Q.BufferSourceConverter.toUint8Array(e);for(let o=0;o<n.length;o++)if(n[o]){n=n.slice(o);break}if(t&&n[0]>127){let o=new Uint8Array(n.length+1);return o.set(n,1),o.buffer}return n.buffer}toAsnSignature(e,t){if(e.name==="ECDSA"){let n=e.namedCurve,o=r.namedCurveSize.get(n)||r.defaultNamedCurveSize,i=new nl,s=Q.BufferSourceConverter.toUint8Array(t);return i.r=this.removePadding(s.slice(0,o),!0),i.s=this.removePadding(s.slice(o,o+o),!0),ee.serialize(i)}return null}toWebSignature(e,t){if(e.name==="ECDSA"){let n=ee.parse(t,nl),o=e.namedCurve,i=r.namedCurveSize.get(o)||r.defaultNamedCurveSize,s=this.addPadding(i,this.removePadding(n.r)),a=this.addPadding(i,this.removePadding(n.s));return(0,Q.combine)(s,a)}return null}};os.namedCurveSize=new Map;os.defaultNamedCurveSize=32;var qw="1.3.101.110",FR="1.3.101.111",jw="1.3.101.112",$R="1.3.101.113",Qw=class{toAsnAlgorithm(e){let t=null;switch(e.name.toLowerCase()){case"ed25519":t=jw;break;case"x25519":t=qw;break;case"eddsa":switch(e.namedCurve.toLowerCase()){case"ed25519":t=jw;break;case"ed448":t=$R;break}break;case"ecdh-es":switch(e.namedCurve.toLowerCase()){case"x25519":t=qw;break;case"x448":t=FR;break}}return t?new Y({algorithm:t}):null}toWebAlgorithm(e){switch(e.algorithm){case jw:return{name:"Ed25519"};case $R:return{name:"EdDSA",namedCurve:"Ed448"};case qw:return{name:"X25519"};case FR:return{name:"ECDH-ES",namedCurve:"X448"}}return null}};Qw=d([la()],Qw);ht.registerSingleton(_p,Qw);var Zw=class extends ma{constructor(e){ma.isAsnEncoded(e)?super(e,ha):super(e),this.tag=Zr.CertificateRequestTag}onInit(e){this.tbs=ee.serialize(e.certificationRequestInfo),this.publicKey=new rs(e.certificationRequestInfo.subjectPKInfo);let t=ht.resolve(pl);this.signatureAlgorithm=t.toWebAlgorithm(e.signatureAlgorithm),this.signature=e.signature,this.attributes=e.certificationRequestInfo.attributes.map(o=>Ef.create(ee.serialize(o)));let n=this.getAttribute(yp);this.extensions=[],n instanceof Ap&&(this.extensions=n.items),this.subjectName=new lo(e.certificationRequestInfo.subject),this.subject=this.subjectName.toString()}getAttribute(e){for(let t of this.attributes)if(t.type===e)return t;return null}getAttributes(e){return this.attributes.filter(t=>t.type===e)}getExtension(e){for(let t of this.extensions)if(t.type===e)return t;return null}getExtensions(e){return this.extensions.filter(t=>t.type===e)}async verify(e=_r.get()){let t={...this.publicKey.algorithm,...this.signatureAlgorithm},n=await this.publicKey.export(t,["verify"],e),o=ht.resolveAll(Ip).reverse(),i=null;for(let a of o)if(i=a.toWebSignature(t,this.signature),i)break;if(!i)throw Error("Cannot convert WebCrypto signature value to ASN.1 format");return await e.subtle.verify(this.signatureAlgorithm,n,i,this.tbs)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,ha),n=t.certificationRequestInfo,o=new We("",{Version:`${pi[n.version]} (${n.version})`,Subject:this.subject,"Subject Public Key Info":this.publicKey});if(this.attributes.length){let i=new We("");for(let s of this.attributes){let a=s.toTextObject();i[a[We.NAME]]=a}o.Attributes=i}return e.Data=o,e.Signature=new We("",{Algorithm:ns.serializeAlgorithm(t.signatureAlgorithm),"":t.signature}),e}};Zw.NAME="PKCS#10 Certificate Request";var Sf=class extends ma{constructor(e){ma.isAsnEncoded(e)?super(e,oo):super(e),this.tag=Zr.CertificateTag}onInit(e){let t=e.tbsCertificate;this.tbs=ee.serialize(t),this.serialNumber=Q.Convert.ToHex(t.serialNumber),this.subjectName=new lo(t.subject),this.subject=new lo(t.subject).toString(),this.issuerName=new lo(t.issuer),this.issuer=this.issuerName.toString();let n=ht.resolve(pl);this.signatureAlgorithm=n.toWebAlgorithm(e.signatureAlgorithm),this.signature=e.signatureValue;let o=t.validity.notBefore.utcTime||t.validity.notBefore.generalTime;if(!o)throw new Error("Cannot get 'notBefore' value");this.notBefore=o;let i=t.validity.notAfter.utcTime||t.validity.notAfter.generalTime;if(!i)throw new Error("Cannot get 'notAfter' value");this.notAfter=i,this.extensions=[],t.extensions&&(this.extensions=t.extensions.map(s=>xn.create(ee.serialize(s)))),this.publicKey=new rs(t.subjectPublicKeyInfo)}getExtension(e){for(let t of this.extensions)if(typeof e=="string"){if(t.type===e)return t}else if(t instanceof e)return t;return null}getExtensions(e){return this.extensions.filter(t=>typeof e=="string"?t.type===e:t instanceof e)}async verify(e={},t=_r.get()){let n,o,i=e.publicKey;try{if(!i)n={...this.publicKey.algorithm,...this.signatureAlgorithm},o=await this.publicKey.export(n,["verify"],t);else if("publicKey"in i)n={...i.publicKey.algorithm,...this.signatureAlgorithm},o=await i.publicKey.export(n,["verify"],t);else if(i instanceof rs)n={...i.algorithm,...this.signatureAlgorithm},o=await i.export(n,["verify"],t);else if(Q.BufferSourceConverter.isBufferSource(i)){let l=new rs(i);n={...l.algorithm,...this.signatureAlgorithm},o=await l.export(n,["verify"],t)}else n={...i.algorithm,...this.signatureAlgorithm},o=i}catch{return!1}let s=ht.resolveAll(Ip).reverse(),a=null;for(let l of s)if(a=l.toWebSignature(n,this.signature),a)break;if(!a)throw Error("Cannot convert ASN.1 signature value to WebCrypto format");let c=await t.subtle.verify(this.signatureAlgorithm,o,a,this.tbs);if(e.signatureOnly)return c;{let u=(e.date||new Date).getTime();return c&&this.notBefore.getTime()<u&&u<this.notAfter.getTime()}}async getThumbprint(...e){let t,n="SHA-1";return e[0]&&(e[0].subtle?t=e[0]:(n=e[0]||n,t=e[1])),t??(t=_r.get()),await t.subtle.digest(n,this.rawData)}async isSelfSigned(e=_r.get()){return this.subject===this.issuer&&await this.verify({signatureOnly:!0},e)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,oo),n=t.tbsCertificate,o=new We("",{Version:`${pi[n.version]} (${n.version})`,"Serial Number":n.serialNumber,"Signature Algorithm":ns.serializeAlgorithm(n.signature),Issuer:this.issuer,Validity:new We("",{"Not Before":n.validity.notBefore.getTime(),"Not After":n.validity.notAfter.getTime()}),Subject:this.subject,"Subject Public Key Info":this.publicKey});if(n.issuerUniqueID&&(o["Issuer Unique ID"]=n.issuerUniqueID),n.subjectUniqueID&&(o["Subject Unique ID"]=n.subjectUniqueID),this.extensions.length){let i=new We("");for(let s of this.extensions){let a=s.toTextObject();i[a[We.NAME]]=a}o.Extensions=i}return e.Data=o,e.Signature=new We("",{Algorithm:ns.serializeAlgorithm(t.signatureAlgorithm),"":t.signatureValue}),e}};Sf.NAME="Certificate";var Ny=class{static async createSelfSigned(e,t=_r.get()){if(!e.keys.privateKey)throw new Error("Bad field 'keys' in 'params' argument. 'privateKey' is empty");if(!e.keys.publicKey)throw new Error("Bad field 'keys' in 'params' argument. 'publicKey' is empty");return this.create({serialNumber:e.serialNumber,subject:e.name,issuer:e.name,notBefore:e.notBefore,notAfter:e.notAfter,publicKey:e.keys.publicKey,signingKey:e.keys.privateKey,signingAlgorithm:e.signingAlgorithm,extensions:e.extensions},t)}static async create(e,t=_r.get()){var n;let o;e.publicKey instanceof rs?o=e.publicKey.rawData:"publicKey"in e.publicKey?o=e.publicKey.publicKey.rawData:Q.BufferSourceConverter.isBufferSource(e.publicKey)?o=e.publicKey:o=await t.subtle.exportKey("spki",e.publicKey);let i=e.serialNumber?Q.BufferSourceConverter.toUint8Array(Q.Convert.FromHex(e.serialNumber)):t.getRandomValues(new Uint8Array(16));i[0]>127&&(i[0]&=127),i.length>1&&i[0]===0&&(i[1]|=128);let s=e.notBefore||new Date,a=e.notAfter||new Date(s.getTime()+31536e6),c=new oo({tbsCertificate:new Er({version:pi.v3,serialNumber:i,validity:new Qi({notBefore:s,notAfter:a}),extensions:new Fn(((n=e.extensions)===null||n===void 0?void 0:n.map(y=>ee.parse(y.rawData,vr)))||[]),subjectPublicKeyInfo:ee.parse(o,xr)})});if(e.subject){let y=e.subject instanceof lo?e.subject:new lo(e.subject);c.tbsCertificate.subject=ee.parse(y.toArrayBuffer(),ct)}if(e.issuer){let y=e.issuer instanceof lo?e.issuer:new lo(e.issuer);c.tbsCertificate.issuer=ee.parse(y.toArrayBuffer(),ct)}let l={hash:"SHA-256"},u="signingKey"in e?{...l,...e.signingAlgorithm,...e.signingKey.algorithm}:{...l,...e.signingAlgorithm},f=ht.resolve(pl);c.tbsCertificate.signature=c.signatureAlgorithm=f.toAsnAlgorithm(u);let h=ee.serialize(c.tbsCertificate),m="signingKey"in e?await t.subtle.sign(u,e.signingKey,h):e.signature,g=ht.resolveAll(Ip).reverse(),w=null;for(let y of g)if(w=y.toAsnSignature(u,m),w)break;if(!w)throw Error("Cannot convert ASN.1 signature value to WebCrypto format");return c.signatureValue=w,new Sf(ee.serialize(c))}},KR;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(KR||(KR={}));xn.register(O3,xf);xn.register(U3,Ay);xn.register(F3,_y);xn.register($9,Iy);xn.register(D3,Sy);xn.register(U9,Ty);xn.register(M3,ky);xn.register(N3,Py);Ef.register(Lw,Ry);Ef.register(yp,Ap);ht.registerSingleton(Ip,zw);ht.registerSingleton(Ip,os);os.namedCurveSize.set("P-256",32);os.namedCurveSize.set("K-256",32);os.namedCurveSize.set("P-384",48);os.namedCurveSize.set("P-521",66);var Dy=class extends Le{async listen(){throw new A3("WebRTCTransport.createListener")}getAddrs(){return[]}updateAnnounceAddrs(){}async close(){}};var Jw=Object.values(Sa).map(r=>r.decoder).reduce((r,e)=>r.or(e)),aq=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function WR(r){return r?.match(aq)?.groups?.fingerprint}function eb(r){let t=r.stringTuples().filter(n=>n[0]===WC).map(n=>n[1])[0];if(t===void 0||t==="")throw new D(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function cq(r){return xt.decode(Jw.decode(r))}function lq(r){let e=cq(eb(r)),t=uq(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new S3(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function GR(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=kr(gt.code,t);return ne(`/certhash/${xa.encode(n.bytes)}`)}function uq(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new _3(r)}}function zR(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=lq(r);return{type:"answer",sdp:`v=0
20
44
  o=- 0 0 IN IP${o} ${t}
21
45
  s=-
22
46
  t=0 0
@@ -30,10 +54,10 @@ a=ice-pwd:${e}
30
54
  a=fingerprint:${i}
31
55
  a=setup:passive
32
56
  a=sctp-port:5000
33
- a=max-message-size:${pa}
57
+ a=max-message-size:${Fu}
34
58
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
35
59
  a=end-of-candidates
36
- `}}function Lb(r,e){let{host:t,port:n,family:o}=r.toOptions();return{type:"offer",sdp:`v=0
60
+ `}}function XR(r,e){let{host:t,port:n,family:o}=r.toOptions();return{type:"offer",sdp:`v=0
37
61
  o=- 0 0 IN IP${o} ${t}
38
62
  s=-
39
63
  c=IN IP${o} ${t}
@@ -46,33 +70,16 @@ a=ice-ufrag:${e}
46
70
  a=ice-pwd:${e}
47
71
  a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
48
72
  a=sctp-port:5000
49
- a=max-message-size:${pa}
73
+ a=max-message-size:${Fu}
50
74
  a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
51
75
  a=end-of-candidates
52
- `}}function f4(r,e){if(r.sdp===void 0)throw new P("Can't munge a missing SDP");let t=r.sdp.includes(`\r
76
+ `}}function tb(r,e){if(r.sdp===void 0)throw new D("Can't munge a missing SDP");let t=r.sdp.includes(`\r
53
77
  `)?`\r
54
78
  `:`
55
79
  `;return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
56
80
  a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
57
- a=ice-pwd:`+e+t),r}var h4=N("libp2p-webrtc-noise:");function Ob(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=N(n,"hex"),i=Nt(Qe.code,o),s=u4.decode(d4(e)),a=h4.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?ke([h4,s,i.bytes],a):ke([h4,i.bytes,s],a)}var VP=tl?"iceconnectionstatechange":"connectionstatechange";async function Mb(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});if(t.role==="client"){t.log.trace("client creating local offer");let f=await r.createOffer();t.log.trace("client created local offer %s",f.sdp);let h=f4(f,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let p=Db(t.remoteAddr,e);t.log.trace("client setting server description %s",p.sdp),await r.setRemoteDescription(p)}else{let f=Lb(t.remoteAddr,e);t.log.trace("server setting client %s %s",f.type,f.sdp),await r.setRemoteDescription(f),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let p=f4(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(p)}if(t.log.trace("%s wait for handshake channel to open",t.role),await lt(n,"open",t.signal),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let f=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(Rb(f))}let o=Pb(r.localDescription?.sdp);if(o==null)throw new Qo("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=Ob(o,t.remoteAddr,t.role),s=Yd({prologueBytes:i})(t),a=ma({channel:n,direction:"inbound",logger:t.logger,...t.dataChannel??{}}),c={...a,sink:a.sink.bind(a),source:async function*(){for await(let f of a.source)for(let h of f)yield h}()},l=new zi(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(VP,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":l.close().catch(f=>{t.log.error("error closing connection",f),l.abort(f)});break;default:break}}),t.events?.increment({peer_connection:!0});let u=new Go(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(c,{remotePeer:t.remotePeerId,signal:t.signal}),t.log.trace("%s upgrade outbound",t.role),t.upgrader.upgradeOutbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u,signal:t.signal});t.log.trace("%s secure outbound",t.role);let d=await s.secureOutbound(c,{remotePeer:t.remotePeerId,signal:t.signal});l.remoteAddr=l.remoteAddr.encapsulate(`/p2p/${d.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(l,{skipProtection:!0,skipEncryption:!0,muxerFactory:u,signal:t.signal})}async function Bb(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}var Ah=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Ae]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){return new Sh(this.components,{...this.init,...e})}listenFilter(e){return e.filter(yc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){t.signal.throwIfAborted();let n,o=e.getPeerId();o!=null&&(n=Ve(o));let i=Ab(),s=await Bb("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await et(Mb(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey}),t.signal)}catch(a){throw s.close(),a}}};function Ub(r){return e=>new Ah(e,r)}function Fb(r){return e=>new vh(e,r)}var Vb=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var $b=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Vb(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var zb=Br(Hb(),1);function qb(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var Wb=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new zb.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let f=null;typeof d.data=="string"&&(f=N(d.data)),qb(d.data)&&(f=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(f=d.data),f!=null&&s(f)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield qb(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var Gb=(r,e)=>{e=e??{};let t=Wb(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:$b(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var Qb=WebSocket;var KP={"http:":"ws:","https:":"wss:"},Yb="ws:",Xb=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??Yb}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??Yb,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(KP))t.protocol===n&&(t.protocol=o);return t};function Zb(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=Xb(r,t),o=new Qb(n.toString(),e.websocket);return Gb(o,e)}function jb(r){return r.filter(e=>_i.exactMatch(e)||Wn.exactMatch(e))}function Jb(){throw new Error("WebSocket Servers can not be created in the browser!")}function ex(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new Kt("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var g4=class{log;init;logger;metrics;components;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[so]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Ae]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=ex(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=J(),i=Zb(ud(e),this.init);i.socket.addEventListener("error",()=>{let s=new ji(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new W("websockets:open-connection")),await et(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return Jb({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):jb(e)}dialFilter(e){return this.listenFilter(e)}};function tx(r={}){return e=>new g4(e,r)}var y4=Br(yd(),1);function rx(r,e){let t=e.map((n,o)=>({record:Sn(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===ir.ValidityType.EOL&&o.record.validityType===ir.ValidityType.EOL){let a=y4.default.fromString(n.record.validity).toDate(),c=y4.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var _h="2.8.1",Ch="js-libp2p";function kh(r,e){return`${r??Ch}/${e??_h} browser/${globalThis.navigator.userAgent}`}var ox="5.3.0-c0bf36e",ix="helia";var sx={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function Ph(r={}){let e=`${ix}/${ox} ${kh()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[k3(),Fb(),Ub(),tx()],connectionEncrypters:[Yd()],streamMuxers:[w9(),nb()],peerDiscovery:[N9(sx)],services:{autoNAT:S9(),dcutr:J9(),delegatedRouting:()=>S7("https://delegated-ipfs.dev",Rm()),dht:Vy({clientMode:!0,validators:{ipns:Ad},selectors:{ipns:rx}}),identify:sy(),identifyPush:ay(),keychain:ah(r.keychain),ping:ab()}}}async function w4(r,e={}){let t=e.selfKey??"self",n=ah(e)({datastore:r,logger:To()}),o;return await r.has(new Ne(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await ou(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var qP=32,{code:zP}=oe("dnsaddr"),b4=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Wi=async function(e,t={}){let n=t.maxRecursiveDepth??qP;if(n===0)throw new b4("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===zP)??[],s=await(t?.dns??bu()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[pr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=$(u);if(u.startsWith("/dnsaddr")){let f=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(d.toString())}return c};var WP={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Wi}},transportManager:{faultTolerance:Zo.FATAL_ALL}};async function ax(r){let e=aa(WP,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new P("Private network is enforced, but no protector was provided");return e}var oo;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=ne((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:ae(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>re(s,o.codec()),o.decode=(s,a)=>te(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=ne((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),Dh.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=Dh.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>re(s,o.codec()),o.decode=(s,a)=>te(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=ne((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),Rh.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new Ue('Decode error - map field "addresses" had too many elements');a.addresses.push(Rh.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new Ue('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new _a('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new _a('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>re(o,r.codec()),r.decode=(o,i)=>te(o,r.codec(),i)})(oo||(oo={}));var Rh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ae(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Rh||(Rh={}));var Dh;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Dh||(Dh={}));function GP(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;if(r.type==="RSA"){let o=be.decode(`z${r}`);t=ve(o)}let n=rt(e.publicKey,t);return xn(n)}function Lh(r,e,t){let n=oo.decode(e);return Nh(r,n,t)}function Nh(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:GP(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:$(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function cx(r,e){return QP(r.addresses,e.addresses)&&YP(r.protocols,e.protocols)&&XP(r.publicKey,e.publicKey)&&ZP(r.peerRecordEnvelope,e.peerRecordEnvelope)&&jP(r.metadata,e.metadata)&&JP(r.tags,e.tags)}function QP(r,e){return ux(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!j(t.multiaddr,n.multiaddr)))}function YP(r,e){return ux(r,e,(t,n)=>t===n)}function XP(r,e){return lx(r,e)}function ZP(r,e){return lx(r,e)}function jP(r,e){return dx(r,e,(t,n)=>j(t,n))}function JP(r,e){return dx(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function lx(r,e){return r==null&&e==null?!0:r!=null&&e!=null?j(r,e):!1}function ux(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function dx(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var x4="/peers/";function nl(r){if(!dl(r)||r.type==null)throw new P("Invalid PeerId");let e=r.toCID().toString();return new Ne(`${x4}${e}`)}async function fx(r,e,t,n){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=$(i.multiaddr)),!Lo(i.multiaddr))throw new P("Multiaddr was invalid");if(!await e(r,i.multiaddr))continue;let s=i.isCertified??!1,a=i.multiaddr.toString(),c=o.get(a);c!=null?i.isCertified=c.isCertified||s:o.set(a,{multiaddr:i.multiaddr,isCertified:s})}return[...o.values()].sort((i,s)=>i.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:i,multiaddr:s})=>({isCertified:i,multiaddr:s.bytes}))}async function Mh(r,e,t,n){if(e==null)throw new P("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new P("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new P("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Oh(f,{validate:hx})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Oh(f,{validate:px,map:mx})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=Oh([...a.entries()],{validate:hx})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,g]of f)g==null?h.delete(p):h.set(p,g);c=Oh([...h.entries()],{validate:px,map:mx})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=Ot(o.id.publicKey):e.publicKey!=null?u=Ot(e.publicKey):r.publicKey!=null&&(u=Ot(r.publicKey));let d={addresses:await fx(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(f=>{f.observed=n.existingPeer?.peerPB.addresses?.find(h=>j(h.multiaddr,h.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function Oh(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function hx(r,e){if(typeof r!="string")throw new P("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new P("Metadata value must be a Uint8Array")}function px(r,e){if(typeof r!="string")throw new P("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new P("Tag value must be an integer");if(e.value<0||e.value>100)throw new P("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new P("Tag ttl must be an integer");if(e.ttl<0)throw new P("Tag ttl must be between greater than 0")}}function mx(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function gx(r){let e=r.toString().split("/")[2],t=Q.parse(e,at);return Qr(t)}function E4(r,e,t){let n=gx(r);return Lh(n,e,t)}function eR(r,e){return{prefix:x4,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(E4(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(E4(n.key,n.value,e),E4(o.key,o.value,e)))}}var Bh=class{peerId;datastore;lock;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Ei({name:"peer-store",singleProcess:!0}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}async has(e){try{return await this.load(e),!0}catch(t){if(t.name!=="NotFoundError")throw t}return!1}async delete(e){this.peerId.equals(e)||await this.datastore.delete(nl(e))}async load(e){let t=nl(e),n=await this.datastore.get(t),o=oo.decode(n);if(this.#r(o))throw await this.datastore.delete(t),new Ce;return Nh(e,o,this.maxAddressAge)}async save(e,t){let n=await this.#e(e),o=await Mh(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n)}async patch(e,t){let n=await this.#e(e),o=await Mh(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async merge(e,t){let n=await this.#e(e),o=await Mh(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(eR(e??{},this.maxAddressAge))){let o=gx(t);if(o.equals(this.peerId))continue;let i=oo.decode(n);if(this.#r(i)){await this.datastore.delete(t);continue}yield Nh(o,i,this.maxAddressAge)}}async#e(e){try{let t=nl(e),n=await this.datastore.get(t),o=oo.decode(n);if(this.#r(o))throw await this.datastore.delete(t),new Ce;return{peerPB:o,peer:Lh(e,n,this.maxAddressAge)}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}}async#t(e,t,n){t.updated=Date.now();let o=oo.encode(t);return await this.datastore.put(nl(e),o),{peer:Lh(e,o,this.maxAddressAge),previous:n?.peer,updated:n==null||!cx(t,n.peerPB)}}#r(e){if(e.updated==null)return!0;let t=e.updated<Date.now()-this.maxPeerAge,n=Date.now()-this.maxAddressAge,o=e.addresses.filter(i=>i.observed!=null&&i.observed>n);return t&&o.length===0}};var v4=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new Bh(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Ri(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await xr.openAndCertify(e,Yt.DOMAIN),o=Qr(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=Yt.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await xr.createFromProtobuf(s.peerRecordEnvelope),c=Yt.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function yx(r,e={}){return new v4(r,e)}function wx(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var bx=864e13;var tR=448,S4=449,rR=53,nR=54,oR=55,iR=56,Uh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Qt(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?bx-Date.now():0,lastVerified:o?bx-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:$(`/${i.map(u=>[oe(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===tR&&e[n+1]?.[0]!==S4)return e.splice(n+1,0,[S4,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===S4||t[0]===rR||t[0]===nR||t[0]===oR||t[0]===iR)return t[1]}};var A4=4,I4=41,T4=6,sR=273,Fh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:tn(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===T4?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===A4||o[0][0]===I4)&&o[1][0]===T4?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===A4||o[0][0]===I4)&&o[1][0]===sR&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?A4:I4,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:$(`/${o.map(c=>[oe(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===T4?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function xx(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var aR={maxObservedAddresses:10},Vh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??aR.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Lr(e)||xx(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:$(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var cR=[4,41,53,54,55,56];function _4(r){try{let[[e]]=r.stringTuples();return cR.includes(e)}catch{}return!1}var lR={maxObservedAddresses:10},$h=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??lR.maxObservedAddresses}get(e,t){if(Lr(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!_4(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(_4(e)){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}return e.toString()}};var Ex=6e4,vx={maxObservedAddresses:10,addressVerificationTTL:Ex*10,addressVerificationRetry:Ex*5},uR=r=>r;function C4(r,e){let t=r.getPeerId();return t!=null&&Ve(t).equals(e)&&(r=r.decapsulate($(`/p2p/${e.toString()}`))),r}var Kh=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new Vh(e,t),this.dnsMappings=new Uh(e,t),this.ipMappings=new Fh(e,t),this.transportAddresses=new $h(e,t),this.announceFilter=t.announceFilter??uR,this.observedAddressFilter=rr(1024),this.addressVerificationTTL=t.addressVerificationTTL??vx.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??vx.addressVerificationRetry,this._updatePeerStoreAddresses=wx(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>$(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>$(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>$(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=C4(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=C4(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=C4(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=$(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(n=>{n.updateAnnounceAddrs(e)}),e.map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];return t=t.concat(this.components.transportManager.getAddrs().map(n=>this.transportAddresses.get(n,this.addressVerificationTTL))),t=t.concat(this.getAppendAnnounceAddrs().map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove($(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${tn(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove($(`/ip${tn(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Qt(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Wn.exactMatch(i)||_i.exactMatch(i),i=>Ti.exactMatch(i),i=>H5.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var Sx;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Sx||(Sx={}));var Hh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},qh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},ga=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},ol=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},zh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Wh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Gh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},il=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Qh=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},Yh=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},Xh=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Zh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},jh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Gi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Qi=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Jh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var k4=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=To())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>wl(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},fR=["metrics","connectionProtector","dns"],hR=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Ax(r={}){let e=new k4(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!hR.includes(o)){let s=e.components[o];if(s==null&&!fR.includes(o))throw new Hh(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function Ix(r){let e={};for(let t of Object.values(r.components))for(let n of pR(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of mR(t))if(e[n]!==!0)throw new qh(`Service "${gR(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function pR(r){return Array.isArray(r?.[Ae])?r[Ae]:[]}function mR(r){return Array.isArray(r?.[dr])?r[dr]:[]}function gR(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var yR=4,wR=41;function Tx(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(Wn.matches(e))return!1;let t=e.stringTuples();return t[0][0]===yR||t[0][0]===wR?!!Qt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function e0(r){if(dl(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:Ve(t),r.forEach(n=>{if(!Lo(n))throw new ao("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new P("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Ve(o);if(e?.equals(i)!==!0)throw new P("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var bR=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function _x(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??bR;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var Cx="last-dial-failure",kx="last-dial-success";var t0=100,r0=50;async function Px(r,e){let t=!1;for(let o of Us.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}function sl(r){try{let e;if(typeof r=="string"?e=$(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return vm(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var xR={maxConnections:t0,allow:[]},n0=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??xR.maxConnections,this.allow=(t.allow??[]).map(n=>sl(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new ft;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((u,d)=>u+d.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await _x(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var o0=class extends Ht{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function Rx(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function P4(r){if(!s1(r))return!1;let{address:e}=r.nodeAddress();return Rx(e)}function ER(r,e){let t=Ti.exactMatch(r.multiaddr),n=Ti.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=_i.exactMatch(r.multiaddr),i=_i.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Wn.exactMatch(r.multiaddr),a=Wn.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=wc.exactMatch(r.multiaddr),l=wc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=yc.exactMatch(r.multiaddr),d=yc.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=dm.exactMatch(r.multiaddr),h=dm.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function vR(r,e){let t=P4(r.multiaddr),n=P4(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function SR(r,e){let t=Lr(r.multiaddr),n=Lr(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function AR(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function IR(r,e){let t=or.exactMatch(r.multiaddr),n=or.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Dx(r){return r.sort(ER).sort(AR).sort(IR).sort(SR).sort(vR)}var i0={maxParallelDials:r0,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:Wi}},s0=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??i0.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??i0.maxDialQueueLength,this.dialTimeout=t.dialTimeout??i0.dialTimeout,this.connections=t.connections??new ft,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))Us.set(n,o);this.queue=new o0({concurrency:t.maxParallelDials??i0.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==Kt.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=e0(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new W("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new W("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Rn("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new W("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a.onProgress?.(new W("dial-queue:start-dial"));let c=le([this.shutDownController.signal,a.signal]);try{return await this.dialPeer(a,c)}finally{c.clear()}},{peerId:n,priority:t.priority??N4,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let u=[],d=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let f=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let h of f){if(i.has(h.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",h.multiaddr,n);continue}u.push(h)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(h=>h.multiaddr.toString())),e?.onProgress?.(new W("dial-queue:calculated-addresses",u));for(let h of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Rn("Peer had more than maxPeerAddrsToDial");a++;try{let p=await this.components.transportManager.dial(h.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",h.multiaddr);try{await this.components.peerStore.merge(p.remotePeer,{multiaddrs:[p.remoteAddr],metadata:{[kx]:N(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p",n,g)}return p}catch(p){if(this.log.error("dial failed to %a",h.multiaddr,p),i.add(h.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Cx]:N(Date.now().toString())}})}catch(g){this.log.error("could not update last dial failure key for %p",n,g)}if(t.aborted)throw new gn(p.message);l.push(p)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:$(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Rn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new il("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let i=(await Promise.all(o.map(async d=>{let f=await Px(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of s){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Xh("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?Dx(l):l.sort(this.addressSorter);if(u.length===0)throw new il("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!or.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Fx=Br(Bx(),1);var _R=Object.prototype.toString,CR=r=>_R.call(r)==="[object Error]",kR=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function O4(r){return r&&CR(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:kR.has(r.message):!1}var M4=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},Ux=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function B4(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=Fx.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof M4)throw c.originalError;if(c instanceof TypeError&&!O4(c))throw c;if(Ux(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Ux(l,a,e),s(),n(l)}}})})}var a0=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new gt({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);Vx(t)&&(this.queue.has(e)||this.queue.add(async n=>{await B4(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(io)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>Vx(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function Vx(r){for(let e of r.tags.keys())if(e.startsWith(io))return!0;return!1}var N4=50,U4={maxConnections:t0,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},c0=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??U4.maxConnections,this.maxConnections<1)throw new P("Connection Manager maxConnections must be greater than 0");this.connections=new ft,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>sl(n)),this.deny=(t.deny??[]).map(n=>sl(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??U4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new ha({points:t.inboundConnectionThreshold??U4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new n0({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>$(n))}),this.dialQueue=new s0(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??r0,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:Wi},connections:this.connections}),this.reconnectQueue=new a0({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await mt(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await kt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new Ur("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=e0(e);if(this.peerId.equals(n))throw new Ji("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new W("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??N4});if(o.status!=="open")throw new Zi("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new ao("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>$(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var DR=1e4,LR="1.0.0",NR="ping",OR="ipfs",$x=32,MR=!0,l0=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??OR}/${NR}/${LR}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??DR,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??MR,this.timeout=new un({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Ae]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Ni(o);t=Date.now(),await Promise.all([i.write(zt($x),{signal:n}),i.read($x,{signal:n})]),e.rtt=Date.now()-t,await i.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var u0=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:O(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:O(n,"base36")})})??this.get}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new ga("No content routers available");let n=this,o=new Wt;for await(let i of qt(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new ga("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new ga("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Ur;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Ur;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var d0=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:O(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new ol("No peer routers available");if(e.toString()===this.peerId.toString())throw new zh("Should not try to find self");let n=this,o=qt(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Ce}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new ol("No peer routers available");let n=this,o=rr(1024);for await(let i of ln(async function*(){let s=qt(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var f0=class extends me{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=le([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await lt(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=le([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=zt(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await et(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var F4=32,V4=64,h0=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new Wh(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e)&&n?.force!==!0)throw new Gh(`Handler already registered for protocol ${e}`);let o=aa.bind({ignoreUndefined:!0})({maxInboundStreams:F4,maxOutboundStreams:V4},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new P("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var p0=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Qu({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??Zo.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new P("Transport must have a valid tag");if(this.transports.has(t))throw new P(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new Jh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new W("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new Ur("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new Qh)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(f=>f===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),am.matches(c)?t.ipv4.attempts++:cm.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),am.matches(c)&&t.ipv4.success++,cm.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,d),t.errors.set(c.toString(),d),d}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===Zo.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new Yh(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
58
- ${[...t.errors.entries()].map(([i,s])=>`
59
- ${i}: ${`${s.stack??s}`.split(`
60
- `).join(`
61
- `)}
62
- `).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&n}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Tt="/multistream/1.0.0";var BR=N(`
63
- `);async function Xi(r,e,t){await r.write(e,t)}async function Kx(r,e,t){await r.writeV(e,t)}async function UR(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==BR[0])throw e.log.error("Invalid mss message - missing newline",t),new he("Missing newline");return t.sublist(0,-1)}async function Yo(r,e){let t=await UR(r,e);return O(t.subarray())}async function al(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return FR(r,e[0],t);let n=An(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Tt,o);let i=N(`${Tt}
64
- `),s=N(`${o}
65
- `);await Kx(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await Yo(n,t);if(t.log.trace('select: read "%s"',a),a===Tt&&(t.log.trace("select: reading protocol response"),a=await Yo(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 Xi(n,N(`${c}
66
- `),t),t.log.trace("select: reading protocol response");let l=await Yo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Pn("protocol selection failed")}function FR(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=J(),c=!1,l=!1,u=J(),d=!1,f=!1,h=J(),p=An({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async x=>{let{sink:w}=p.unwrap();await w(async function*(){let I=!1;for await(let M of x){if(l&&await u.promise,c)yield M;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Tt,e,M.byteLength);let D=`${e}
67
- `;yield new ee(Uint8Array.from([19]),N(`${Tt}
68
- `),De(D.length),N(D),M).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Tt,e,M.byteLength),c=!0,l=!1,u.resolve(),g().catch(R=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,R)})}I=!0}I||await g()}())};async function g(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await m()),d||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{s=!1,i=!0,a.resolve()}}async function m(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Tt,e),await p.writeV([N(`${Tt}
69
- `),N(`${e}
70
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Tt,e)}finally{c=!0,l=!1,u.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let x=await Yo(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',x),x===Tt&&(x=await Yo(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',x,e),x!==e)throw new Pn("protocol selection failed")}finally{d=!0,f=!1,h.resolve()}}if(r.source=async function*(){await g(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let x=r.closeRead.bind(r);r.closeRead=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close read",I)}),await x(w)}}if(r.closeWrite!=null){let x=r.closeWrite.bind(r);r.closeWrite=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close write",I)}),await x(w)}}if(r.close!=null){let x=r.close.bind(r);r.close=async w=>{let I=[];l&&I.push(u.promise),f&&I.push(h.promise),I.length>0?await et(Promise.all(I),w?.signal):(i=!0,s=!1,a.resolve()),await x(w)}}return{stream:r,protocol:e}}async function cl(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=An(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Yo(n,t);if(t.log.trace('handle: read "%s"',o),o===Tt){t.log.trace('handle: respond with "%s" for "%s"',Tt,o),await Xi(n,N(`${Tt}
71
- `),t),t.log.trace('handle: responded with "%s" for "%s"',Tt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Xi(n,N(`${o}
72
- `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new ee(...e.map(s=>Vr.single(N(`${s}
73
- `))),N(`
74
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await Xi(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Xi(n,N(`na
75
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var $R=500,K4=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[Z4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new hl("the connection is being closed");if(this.status==="closed")throw new Zi("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new es("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout($R);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function qx(r){return new K4(r)}function HR(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return F4}function qR(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??V4}function zx(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var m0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new Zh(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=le([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new jh("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=Ve(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new W(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new ao(`${t} connection that skipped encryption must have a peer id`);let d=Ve(u);c="native",i=d}if(i.equals(this.components.peerId)){let u=new Ji("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new W(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let g=this.components.registrar.getProtocols(),m=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:x}=await cl(p,g,{signal:m,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",x);let w=HR(x,this.components.registrar);if(zx(x,"inbound",d)===w){let M=new yl(`Too many inbound protocol streams for protocol "${x}" - limit ${w}`);throw p.abort(M),M}p.source=y.source,p.sink=y.sink,p.protocol=x,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[x]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:x})}).catch(async g=>{d.log.error("error handling incoming stream id %s - %e",p.id,g),p.timeline.close==null&&await p.close()})}}),u=async(p,g={})=>{if(l==null)throw new Gi("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let m=await l.newStream();d.log.trace("started new stream %s for protocols %s",m.id,p);try{if(g.signal==null){m.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let M=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);g={...g,signal:M}}m.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:x}=await al(m,p,{...g,log:m.log,yieldBytes:!0});m.log.trace("selected protocol %s",x);let w=qR(x,this.components.registrar,g),I=zx(x,"outbound",d);if(I>=w){let M=new lo(`Too many outbound protocol streams for protocol "${x}" - ${I}/${w}`);throw m.abort(M),M}return await this.components.peerStore.merge(s,{protocols:[x]}),m.source=y.source,m.sink=y.sink,m.protocol=x,y.closeWrite!=null&&(m.closeWrite=y.closeWrite),y.closeRead!=null&&(m.closeRead=y.closeRead),y.close!=null&&(m.close=y.close),this.components.metrics?.trackProtocolStream(m,d),m}catch(y){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),m.timeline.close==null&&m.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{d.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(g){d.log.error("error closing connection after timeline close %e",g)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(g=>{d.log.error("error thrown while dispatching connection:close event %e",g)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Gi("Connection is not multiplexed")};return d=qx({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=f,d}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new es("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await cl(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Qi(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Qi(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await al(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Qi(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Qi(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:i,protocol:s}=await al(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new Gi(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await cl(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new Gi(String(i))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var g0=class extends me{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new me,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??To(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??Ch,i=e.nodeInfo?.version??_h,s=this.components=Ax({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??kh(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Di,connectionGater:Tx(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",yx(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new m0(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new p0(this.components,e.transportManager)),this.configureComponent("connectionManager",new c0(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new l0(this.components,e.connectionMonitor)),this.configureComponent("registrar",new h0(this.components)),this.configureComponent("addressManager",new Kh(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new d0(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new u0(this.components,{routers:c})),this.configureComponent("randomWalk",new f0(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[hn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[hn])),d[pn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[pn])),d[Xo]!=null&&(this.log("registering service %s for peer discovery",l),d[Xo].addEventListener?.("peer",f=>{this.#e(f)}))}Ix(s)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new Wt;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new P("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new P("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Lo(e)&&(e=Ve(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=ke([N("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=rt(o);return await this.peerStore.patch(e,{publicKey:i}),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function Wx(r={}){r.privateKey??=await ou("Ed25519");let e=new g0({...await ax(r),peerId:L6(r.privateKey)});return r.start!==!1&&await e.start(),e}async function Gx(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await w4(r.datastore,r.keychain));let t=Ph(e);return t.datastore=t.datastore??r.datastore,await Wx({...t,...e,start:!1})}async function zR(r={}){let e=r.datastore??new Di,t=r.blockstore??new Ac,n;WR(r.libp2p)?n=r.libp2p:n=await Gx({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new Dd({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[km(),rm()],routers:r.routers??[Km(n),Vm()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function WR(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return aE(GR);})();
81
+ a=ice-pwd:`+e+t),r}var rb=H("libp2p-webrtc-noise:");function QR(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=H(n,"hex"),i=kr(gt.code,o),s=Jw.decode(eb(e)),a=rb.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?st([rb,s,i.bytes],a):st([rb,i.bytes,s],a)}var fq=_h?"iceconnectionstatechange":"connectionstatechange";async function ZR(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});try{if(t.role==="client"){t.log.trace("client creating local offer");let f=await r.createOffer();t.log.trace("client created local offer %s",f.sdp);let h=tb(f,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let m=zR(t.remoteAddr,e);t.log.trace("client setting server description %s",m.sdp),await r.setRemoteDescription(m)}else{let f=XR(t.remoteAddr,e);t.log.trace("server setting client %s %s",f.type,f.sdp),await r.setRemoteDescription(f),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let m=tb(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(m)}if(n.readyState!=="open"&&(t.log.trace("%s wait for handshake channel to open, starting status %s",t.role,n.readyState),await Jt(n,"open",t.signal)),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let f=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(GR(f))}let o=WR(r.localDescription?.sdp);if(o==null)throw new zs("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=QR(o,t.remoteAddr,t.role),s=B2({prologueBytes:i})(t),a=$u({channel:n,direction:"outbound",handshake:!0,logger:t.logger,...t.dataChannel??{}}),c=new Lc(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(fq,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":c.close().catch(f=>{t.log.error("error closing connection",f),c.abort(f)});break;default:break}}),t.events?.increment({peer_connection:!0});let l=new Gs(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(a,{remotePeer:t.remotePeerId,signal:t.signal,skipStreamMuxerNegotiation:!0}),t.log.trace("%s upgrade outbound",t.role),await t.upgrader.upgradeOutbound(c,{skipProtection:!0,skipEncryption:!0,muxerFactory:l,signal:t.signal});t.log.trace("%s secure outbound",t.role);let u=await s.secureOutbound(a,{remotePeer:t.remotePeerId,signal:t.signal,skipStreamMuxerNegotiation:!0});c.remoteAddr=c.remoteAddr.encapsulate(`/p2p/${u.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(c,{skipProtection:!0,skipEncryption:!0,muxerFactory:l,signal:t.signal})}catch(o){throw n.close(),o}}async function JR(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}async function eN(r){let e=await J1(r),t=await crypto.subtle.exportKey("pkcs8",e.privateKey);return["-----BEGIN PRIVATE KEY-----",...M(new Uint8Array(t),"base64pad").split(/(.{64})/).filter(Boolean),"-----END PRIVATE KEY-----"].join(`
82
+ `)}var Oy=class{log;metrics;components;init;certificate;privateKey;emitter;renewCertificateTask;constructor(e,t={}){if(this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,this.emitter=new Le,t.certificateLifespan!=null&&t.certificateRenewalThreshold!=null&&t.certificateRenewalThreshold>=t.certificateLifespan)throw new D("Certificate renewal threshold must be less than certificate lifespan");e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[ss]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[ze]=["@libp2p/transport"];async start(){this.certificate=await this.getCertificate()}async stop(){this.renewCertificateTask!=null&&clearTimeout(this.renewCertificateTask),this.certificate=void 0}async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getPeerId();o!=null&&(n=wt(o));let i=lk(),s=await JR("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await ZR(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey})}catch(a){throw s.close(),a}}createListener(e){if(this.certificate==null)throw new Sn;return new Dy(this.components,{...this.init,...e,certificate:this.certificate,emitter:this.emitter})}listenFilter(e){return e.filter(kd.exactMatch)}dialFilter(e){return this.listenFilter(e)}async getCertificate(e){if(dq(this.init.certificate))return this.log("using provided TLS certificate"),this.init.certificate;let t=await this.loadOrCreatePrivateKey(),{pem:n,certhash:o}=await this.loadOrCreateCertificate(t,e);return{privateKey:await eN(t),pem:n,certhash:o}}async loadOrCreatePrivateKey(){if(this.privateKey!=null)return this.privateKey;let e=this.init.certificateKeychainName??ek,t=this.getKeychain();try{if(t==null)throw this.log("no keychain configured - not checking for stored private key"),new Ge;this.log.trace("checking for stored private key"),this.privateKey=await t.exportKey(e)}catch(n){if(n.name!=="NotFoundError")throw n;this.log.trace("generating private key"),this.privateKey=await Xl("ECDSA","P-256"),t!=null?(this.log.trace("storing private key"),await t.importKey(e,this.privateKey)):this.log("no keychain configured - not storing private key")}return this.privateKey}async loadOrCreateCertificate(e,t){if(this.certificate!=null&&t!==!0)return this.certificate;let n,o=new it(this.init.certificateDatastoreKey??JC),i=await J1(e);try{if(t===!0)throw this.log.trace("forcing renewal of TLS certificate"),new Ge;this.log.trace("checking for stored TLS certificate"),n=await this.loadCertificate(o,i)}catch(a){if(a.name!=="NotFoundError")throw a;this.log.trace("generating new TLS certificate"),n=await this.createCertificate(o,i)}let s=n.notAfter.getTime()-(this.init.certificateRenewalThreshold??c9)-Date.now();return s<0&&(s=100),this.log("will renew TLS certificate after %d ms",s),this.renewCertificateTask=setTimeout(()=>{this.log("renewing TLS certificate"),this.getCertificate(!0).then(a=>{this.certificate=a,this.emitter.safeDispatchEvent("certificate:renew",{detail:a})}).catch(a=>{this.log.error("could not renew certificate - %e",a)})},s),{pem:n.toString("pem"),certhash:xa.encode((await gt.digest(new Uint8Array(n.rawData))).bytes)}}async loadCertificate(e,t){let n=await this.components.datastore.get(e),o=new Sf(n),i=o.notAfter.getTime()-(this.init.certificateRenewalThreshold??c9);if(Date.now()>i)throw this.log("stored TLS certificate has expired"),new Ge;this.log("loaded certificate, expires in %d ms",i);let s=await o.publicKey.export(crypto),a=await crypto.subtle.exportKey("raw",s),c=await crypto.subtle.exportKey("raw",t.publicKey);if(!ge(new Uint8Array(a,0,a.byteLength),new Uint8Array(c,0,c.byteLength)))throw this.log("stored TLS certificate public key did not match public key from private key"),new Ge;return this.log("loaded certificate, expiry time is %o",i),o}async createCertificate(e,t){let n=new Date,o=new Date(Date.now()+(this.init.certificateLifespan??tk));n.setMilliseconds(0),o.setMilliseconds(0);let i=await Ny.createSelfSigned({serialNumber:(BigInt(Math.random().toString().replace(".",""))*100000n).toString(16),name:"CN=example.com, C=US, L=CA, O=example, ST=CA",notBefore:n,notAfter:o,keys:t,extensions:[new xf(!1,void 0,!0)]},crypto);return this.getKeychain()!=null?(this.log.trace("storing TLS certificate"),await this.components.datastore.put(e,H(i.toString("pem")))):this.log("no keychain is configured so not storing TLS certificate since the private key will not be reused"),i}getKeychain(){try{return this.components.keychain}catch{}}};function dq(r){return r==null?!1:typeof r.privateKey=="string"&&typeof r.pem=="string"&&typeof r.certhash=="string"}function tN(r){return e=>new Oy(e,r)}function rN(r){return e=>new k3(e,r)}var nN=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var oN=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await nN(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var cN=$t(sN(),1);function aN(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var lN=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new cN.EventIterator(({push:s,stop:a,fail:c})=>{let l=f=>{let h=null;typeof f.data=="string"&&(h=H(f.data)),aN(f.data)&&(h=new Uint8Array(f.data)),f.data instanceof Uint8Array&&(h=f.data),h!=null&&s(h)},u=f=>{c(f.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield aN(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var uN=(r,e)=>{e=e??{};let t=lN(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:oN(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var fN=WebSocket;var pq={"http:":"ws:","https:":"wss:"},dN="ws:",hN=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??dN}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??dN,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(pq))t.protocol===n&&(t.protocol=o);return t};function pN(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=hN(r,t),o=new fN(n.toString(),e.websocket);return uN(o,e)}function mN(r){return r.filter(e=>tc.exactMatch(e)||Mi.exactMatch(e))}function gN(){throw new Error("WebSocket Servers can not be created in the browser!")}function yN(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:f}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,f,Date.now()-c),this.abort(new ir("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var ib=class{log;init;logger;metrics;components;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[ss]=!0;[Symbol.toStringTag]="@libp2p/websockets";[ze]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=yN(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=fe(),i=pN(Lm(e),this.init);i.socket.addEventListener("error",()=>{let s=new yl(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new ae("websockets:open-connection")),await ut(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return gN({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):mN(e)}dialFilter(e){return this.listenFilter(e)}};function wN(r={}){return e=>new ib(e,r)}var sb=$t(Vm(),1);function bN(r,e){let t=e.map((n,o)=>({record:si(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===sn.ValidityType.EOL&&o.record.validityType===sn.ValidityType.EOL){let a=sb.default.fromString(n.record.validity).toDate(),c=sb.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 xN="5.3.0-cd1eb58",vN="helia";var EN={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function My(r={}){let e=`${vN}/${xN} ${S2()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[B7(),rN(),tN(),wN()],connectionEncrypters:[B2()],streamMuxers:[cT(),FC()],peerDiscovery:[_T(EN)],services:{autoNAT:pT(),dcutr:KT(),delegatedRouting:()=>hA("https://delegated-ipfs.dev",i8()),dht:NC({clientMode:!0,validators:{ipns:Xm},selectors:{ipns:bN}}),identify:XT(),identifyPush:YT(),keychain:T0(r.keychain),ping:HC()}}}async function SN(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await C8(r.datastore,r.keychain));let t=My(e);return t.datastore=t.datastore??r.datastore,await AI({...t,...e,start:!1})}async function ab(r={}){let e=r.datastore??new sc,t=r.blockstore??new Bd,n;return gq(r.libp2p)?n=r.libp2p:n=await SN({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e}),{...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[n8(),P5()],routers:r.routers??[g8(n),p8()],metrics:n.metrics,start:r.start??!0}}function gq(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}async function yq(r={}){let e=await ab(r),t=new om(e);return r.start!==!1&&await t.start(),t}return UN(wq);})();
76
83
  /*! Bundled license information:
77
84
 
78
85
  pvtsutils/build/index.js:
@@ -101,39 +108,52 @@ pvtsutils/build/index.js:
101
108
  *
102
109
  *)
103
110
 
111
+ reflect-metadata/Reflect.js:
112
+ (*! *****************************************************************************
113
+ Copyright (C) Microsoft. All rights reserved.
114
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
115
+ this file except in compliance with the License. You may obtain a copy of the
116
+ License at http://www.apache.org/licenses/LICENSE-2.0
117
+
118
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
119
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
120
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
121
+ MERCHANTABLITY OR NON-INFRINGEMENT.
122
+
123
+ See the Apache Version 2.0 License for specific language governing permissions
124
+ and limitations under the License.
125
+ ***************************************************************************** *)
126
+
127
+ tslib/tslib.js:
128
+ (*! *****************************************************************************
129
+ Copyright (c) Microsoft Corporation.
130
+
131
+ Permission to use, copy, modify, and/or distribute this software for any
132
+ purpose with or without fee is hereby granted.
133
+
134
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
135
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
136
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
137
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
138
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
139
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
140
+ PERFORMANCE OF THIS SOFTWARE.
141
+ ***************************************************************************** *)
142
+
104
143
  @noble/hashes/esm/utils.js:
105
144
  (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
106
145
 
107
146
  @noble/curves/esm/abstract/utils.js:
108
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
109
-
110
147
  @noble/curves/esm/abstract/modular.js:
111
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
112
-
113
148
  @noble/curves/esm/abstract/curve.js:
114
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
115
-
116
149
  @noble/curves/esm/abstract/edwards.js:
117
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
118
-
119
150
  @noble/curves/esm/abstract/montgomery.js:
120
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
121
-
122
151
  @noble/curves/esm/ed25519.js:
123
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
124
-
125
152
  @noble/curves/esm/abstract/weierstrass.js:
126
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
127
-
128
153
  @noble/curves/esm/_shortw_utils.js:
129
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
130
-
131
154
  @noble/curves/esm/secp256k1.js:
132
155
  (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
133
156
 
134
- @noble/ciphers/esm/utils.js:
135
- (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
136
-
137
157
  pvutils/build/utils.es.js:
138
158
  (*!
139
159
  Copyright (c) Peculiar Ventures, LLC
@@ -173,5 +193,35 @@ asn1js/build/index.es.js:
173
193
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
174
194
  *
175
195
  *)
196
+
197
+ @noble/ciphers/esm/utils.js:
198
+ (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
199
+
200
+ @peculiar/x509/build/x509.es.js:
201
+ (*!
202
+ * MIT License
203
+ *
204
+ * Copyright (c) Peculiar Ventures. All rights reserved.
205
+ *
206
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
207
+ * of this software and associated documentation files (the "Software"), to deal
208
+ * in the Software without restriction, including without limitation the rights
209
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
210
+ * copies of the Software, and to permit persons to whom the Software is
211
+ * furnished to do so, subject to the following conditions:
212
+ *
213
+ * The above copyright notice and this permission notice shall be included in all
214
+ * copies or substantial portions of the Software.
215
+ *
216
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
217
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
218
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
219
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
220
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
221
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
222
+ * SOFTWARE.
223
+ *
224
+ *)
176
225
  */
177
226
  return Helia}));
227
+ //# sourceMappingURL=index.min.js.map