@bsv/sdk 1.6.18 → 1.6.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/dist/cjs/package.json +5 -9
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +39 -39
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +69 -167
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +660 -436
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +285 -293
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/script/ScriptEvaluationError.js +27 -0
- package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -0
- package/dist/cjs/src/script/Spend.js +13 -7
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/index.js +3 -1
- package/dist/cjs/src/script/index.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +4 -4
- package/dist/cjs/src/transaction/Transaction.js +3 -3
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +39 -39
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +69 -167
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +672 -444
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +268 -293
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/script/ScriptEvaluationError.js +33 -0
- package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -0
- package/dist/esm/src/script/Spend.js +14 -8
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/index.js +1 -0
- package/dist/esm/src/script/index.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +4 -4
- package/dist/esm/src/transaction/Transaction.js +3 -3
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +12 -19
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +37 -5
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/script/ScriptEvaluationError.d.ts +24 -0
- package/dist/types/src/script/ScriptEvaluationError.d.ts.map +1 -0
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/index.d.ts +1 -0
- package/dist/types/src/script/index.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +20 -1
- package/dist/umd/bundle.js.map +1 -0
- package/package.json +5 -9
- package/src/auth/transports/SimplifiedFetchTransport.ts +64 -67
- package/src/primitives/ECDSA.ts +80 -222
- package/src/primitives/Hash.ts +752 -589
- package/src/primitives/Point.ts +277 -336
- package/src/script/ScriptEvaluationError.ts +44 -0
- package/src/script/Spend.ts +14 -12
- package/src/script/index.ts +1 -0
- package/src/transaction/Beef.ts +4 -4
- package/src/transaction/Transaction.ts +11 -3
package/dist/umd/bundle.js
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bsv=t():e.bsv=t()}(this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var i in r)e.o(r,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:r[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{ARC:()=>ar,ATOMIC_BEEF:()=>br,AuthFetch:()=>Ni,BEEF_V1:()=>fr,BEEF_V2:()=>pr,BSM:()=>o,Beef:()=>gr,BeefParty:()=>Ir,BeefTx:()=>ur,BigNumber:()=>h,BlockHeadersService:()=>Or,CachedKeyDeriver:()=>Yr,Certificate:()=>ii,CompletedProtoWallet:()=>wi,Curve:()=>rt,DEFAULT_IDENTITY_CLIENT_OPTIONS:()=>qi,DEFAULT_SLAP_TRACKERS:()=>_i,DEFAULT_TESTNET_SLAP_TRACKERS:()=>Ai,DRBG:()=>nt,ECDSA:()=>n,ECIES:()=>$r,EncryptedMessage:()=>a,FetchHttpClient:()=>ir,HD:()=>Br,HTTPSOverlayBroadcastFacilitator:()=>Fi,HTTPSOverlayLookupFacilitator:()=>xi,HTTPWalletJSON:()=>di,HTTPWalletWire:()=>oi,Hash:()=>r,IdentityClient:()=>$i,KNOWN_IDENTITY_TYPES:()=>Mi,KeyDeriver:()=>Gr,KeyShares:()=>pt,LocalKVStore:()=>ji,LockingScript:()=>qt,LookupResolver:()=>Ti,MasterCertificate:()=>pi,MerklePath:()=>dr,Mnemonic:()=>Kr,NodejsHttpClient:()=>rr,OP:()=>Lt,OverlayAdminTokenTemplate:()=>Oi,P2PKH:()=>Zt,Peer:()=>Si,Point:()=>Me,PointInFiniteField:()=>lt,Polynomial:()=>ft,PrivateKey:()=>bt,ProtoWallet:()=>Zr,PublicKey:()=>ct,PushDrop:()=>er,RPuzzle:()=>Jt,Random:()=>ut,ReactNativeWebView:()=>ui,RegistryClient:()=>zi,SHIPBroadcaster:()=>Ri,SHIPCast:()=>Ri,SatoshisPerKilobyte:()=>tr,Schnorr:()=>Ut,Script:()=>Ht,SecurityLevels:()=>Xr,SessionManager:()=>gi,Signature:()=>it,SignedMessage:()=>s,SimplifiedFetchTransport:()=>Pi,Spend:()=>Gt,StorageDownloader:()=>Li,StorageUploader:()=>Ki,StorageUtils:()=>c,SymmetricKey:()=>Dt,TOTP:()=>Wr,TX_DATA_FORMAT:()=>wr,Teranode:()=>Nr,TopicBroadcaster:()=>Ri,Transaction:()=>mr,TransactionSignature:()=>Bt,UnlockingScript:()=>Mt,Utils:()=>i,VerifiableCertificate:()=>bi,WERR_REVIEW_ACTIONS:()=>hi,WalletClient:()=>li,WalletError:()=>Qr,WalletErrors:()=>ti,WalletWireProcessor:()=>fi,WalletWireTransceiver:()=>ai,WhatsOnChain:()=>cr,WhatsOnChainBroadcaster:()=>kr,WindowCWISubstrate:()=>Jr,XDM:()=>ri,binaryHttpClient:()=>Pr,createNonce:()=>yi,defaultBroadcaster:()=>or,defaultChainTracker:()=>hr,defaultHttpClient:()=>nr,defaultIdentity:()=>Hi,deserializeWalletProtocol:()=>Wi,fromUtxo:()=>zr,getVerifiableCertificates:()=>vi,isBroadcastFailure:()=>vr,isBroadcastResponse:()=>yr,validateCertificates:()=>Ii,verifyNonce:()=>mi,walletErrors:()=>ei});var r={};e.r(r),e.d(r,{RIPEMD160:()=>Z,SHA1:()=>Q,SHA1HMAC:()=>pe,SHA256:()=>J,SHA256HMAC:()=>fe,SHA512:()=>ee,SHA512HMAC:()=>be,hash160:()=>Ie,hash256:()=>ve,pbkdf2:()=>Ee,ripemd160:()=>we,sha1:()=>ge,sha256:()=>me,sha256hmac:()=>ke,sha512:()=>ye,sha512hmac:()=>Se,toArray:()=>y});var i={};e.r(i),e.d(i,{Reader:()=>Ke,Writer:()=>Ue,encode:()=>Te,fromBase58:()=>Ce,fromBase58Check:()=>Be,minimallyEncode:()=>Le,toArray:()=>Oe,toBase58:()=>Ve,toBase58Check:()=>De,toBase64:()=>Fe,toHex:()=>Ne,toUTF8:()=>xe,zero2:()=>Pe});var n={};e.r(n),e.d(n,{sign:()=>at,verify:()=>ot});var s={};e.r(s),e.d(s,{sign:()=>Ar,verify:()=>xr});var a={};e.r(a),e.d(a,{decrypt:()=>Rr,encrypt:()=>Fr});var o={};e.r(o),e.d(o,{magicHash:()=>Cr,sign:()=>Vr,verify:()=>Dr});var c={};e.r(c),e.d(c,{getHashFromURL:()=>Bi,getURLForFile:()=>Di,getURLForHash:()=>Vi,isValidURL:()=>Ui,normalizeURL:()=>Ci});class h{static zeros=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"];static groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5];static groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];static wordSize=26;static WORD_SIZE_BIGINT=BigInt(h.wordSize);static WORD_MASK=(1n<<h.WORD_SIZE_BIGINT)-1n;static MAX_SAFE_INTEGER_BIGINT=BigInt(Number.MAX_SAFE_INTEGER);static MIN_SAFE_INTEGER_BIGINT=BigInt(Number.MIN_SAFE_INTEGER);static MAX_IMULN_ARG=67108863;static MAX_NUMBER_CONSTRUCTOR_MAG_BIGINT=(1n<<53n)-1n;_magnitude;_sign;_nominalWordLength;red;get negative(){return this._sign}set negative(e){this.assert(0===e||1===e,"Negative property must be 0 or 1");const t=1===e?1:0;0n===this._magnitude?this._sign=0:this._sign=t}get _computedWordsArray(){if(0n===this._magnitude)return[0];const e=[];let t=this._magnitude;for(;t>0n;)e.push(Number(t&h.WORD_MASK)),t>>=h.WORD_SIZE_BIGINT;return e.length>0?e:[0]}get words(){const e=this._computedWordsArray;if(this._nominalWordLength<=e.length)return e;const t=new Array(this._nominalWordLength).fill(0);for(let r=0;r<e.length;r++)t[r]=e[r];return t}set words(e){const t=this._sign;let r=0n;const i=e.length>0?e.length:1;for(let t=i-1;t>=0;t--){const i=void 0===e[t]?0:e[t];r=r<<h.WORD_SIZE_BIGINT|BigInt(i&Number(h.WORD_MASK))}this._magnitude=r,this._sign=t,this._nominalWordLength=i,this.normSign()}get length(){return Math.max(1,this._nominalWordLength)}static isBN(e){return e instanceof h||null!==e&&"object"==typeof e&&e.constructor?.wordSize===h.wordSize&&Array.isArray(e.words)}static max(e,t){return e.cmp(t)>0?e:t}static min(e,t){return e.cmp(t)<0?e:t}constructor(e=0,t=10,r="be"){if(this._magnitude=0n,this._sign=0,this._nominalWordLength=1,this.red=null,void 0===e&&(e=0),null===e)return void this._initializeState(0n,0);if("bigint"==typeof e)return this._initializeState(e<0n?-e:e,e<0n?1:0),void this.normSign();let i=t,n=r;if("le"!==t&&"be"!==t||(n=t,i=10),"number"!=typeof e)if(Array.isArray(e))this.initArray(e,n);else if("string"==typeof e){"hex"===i&&(i=16),this.assert("number"==typeof i&&i===(0|i)&&i>=2&&i<=36,"Base must be an integer between 2 and 36");const t=e.toString().replace(/\s+/g,"");let r=0,s=0;t.startsWith("-")?(r++,s=1):t.startsWith("+")&&r++;const a=t.substring(r);if(0===a.length)return this._initializeState(0n,1===s&&t.startsWith("-")?1:0),void this.normSign();if(16===i){let e;if("le"===n){const e=[];let t=a;t.length%2!=0&&(t="0"+t);for(let r=0;r<t.length;r+=2){const i=t.substring(r,r+2),n=parseInt(i,16);if(isNaN(n))throw new Error("Invalid character in "+t);e.push(n)}return this.initArray(e,"le"),this._sign=s,void this.normSign()}try{e=BigInt("0x"+a)}catch(e){throw new Error("Invalid character in "+a)}this._initializeState(e,s),this.normSign()}else try{if(this._parseBaseString(a,i),this._sign=s,this.normSign(),"le"===n){const e=this._sign;this.initArray(this.toArray("be"),"le"),this._sign=e,this.normSign()}}catch(e){const t=e;if(t.message.includes("Invalid character in string")||t.message.includes("Invalid digit for base")||t.message.startsWith("Invalid character:"))throw new Error("Invalid character");throw t}}else 0!==e?this.assert(!1,"Unsupported input type for BigNumber constructor"):this._initializeState(0n,0);else this.initNumber(e,n)}_bigIntToStringInBase(e,t){if(0n===e)return"0";if(t<2||t>36)throw new Error("Base must be between 2 and 36");let r="",i=e>0n?e:-e;const n=BigInt(t);for(;i>0n;)r="0123456789abcdefghijklmnopqrstuvwxyz"[Number(i%n)]+r,i/=n;return r}_parseBaseString(e,t){if(0===e.length)return this._magnitude=0n,void this._finishInitialization();this._magnitude=0n;const r=BigInt(t);let i=h.groupSizes[t],n=BigInt(h.groupBases[t]);0!==i&&0n!==n||(i=Math.floor(Math.log(67108863)/Math.log(t)),0===i&&(i=1),n=r**BigInt(i));let s=0;const a=e.length;let o=a%i;if(0===o&&a>0&&(o=i),o>0){const r=e.substring(s,s+o);this._magnitude=BigInt(this._parseBaseWord(r,t)),s+=o}for(;s<a;){const r=e.substring(s,s+i),a=BigInt(this._parseBaseWord(r,t));this._magnitude=this._magnitude*n+a,s+=i}this._finishInitialization()}_parseBaseWord(e,t){let r=0;for(let i=0;i<e.length;i++){const n=e.charCodeAt(i);let s;if(n>=48&&n<=57)s=n-48;else if(n>=65&&n<=90)s=n-65+10;else{if(!(n>=97&&n<=122))throw new Error("Invalid character: "+e[i]);s=n-97+10}if(s>=t)throw new Error("Invalid character");r=r*t+s}return r}_initializeState(e,t){this._magnitude=e,this._sign=0n===e?0:t,this._finishInitialization()}_finishInitialization(){if(0n===this._magnitude)this._nominalWordLength=1,this._sign=0;else{const e=this._magnitude.toString(2).length;this._nominalWordLength=Math.max(1,Math.ceil(e/h.wordSize))}}assert(e,t="Assertion failed"){if(!e)throw new Error(t)}initNumber(e,t="be"){if(this.assert(BigInt(Math.abs(e))<=h.MAX_NUMBER_CONSTRUCTOR_MAG_BIGINT,"The number is larger than 2 ^ 53 (unsafe)"),this.assert(e%1==0,"Number must be an integer for BigNumber conversion"),this._initializeState(BigInt(Math.abs(e)),e<0?1:0),"le"===t){const e=this._sign,t=this.toArray("be");this.initArray(t,"le"),this._sign=e,this.normSign()}return this}initArray(e,t){if(0===e.length)return this._initializeState(0n,0),this;let r=0n;if("be"===t)for(let t=0;t<e.length;t++)r=r<<8n|BigInt(255&e[t]);else for(let t=e.length-1;t>=0;t--)r=r<<8n|BigInt(255&e[t]);return this._initializeState(r,0),this}copy(e){e._magnitude=this._magnitude,e._sign=this._sign,e._nominalWordLength=this._nominalWordLength,e.red=this.red}static move(e,t){e._magnitude=t._magnitude,e._sign=t._sign,e._nominalWordLength=t._nominalWordLength,e.red=t.red}clone(){const e=new h(0n);return this.copy(e),e}expand(e){return this.assert(e>=0,"Expand size must be non-negative"),this._nominalWordLength=Math.max(this._nominalWordLength,e,1),this}strip(){return this._finishInitialization(),this.normSign()}normSign(){return 0n===this._magnitude&&(this._sign=0),this}inspect(){return(null!==this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}_getMinimalHex(){return 0n===this._magnitude?"0":this._magnitude.toString(16)}toString(e=10,t=1){if(16===e||"hex"===e){let e=this._getMinimalHex();if(t>1)for("0"!==e&&e.length%2!=0&&(e="0"+e);e.length%t!=0;)e="0"+e;return(this.isNeg()?"-":"")+e}if("number"!=typeof e||e<2||e>36||e%1!=0)throw new Error("Base should be an integer between 2 and 36");return this.toBaseString(e,t)}toBaseString(e,t){if(0n===this._magnitude){let e="0";if(t>1)for(;e.length<t;)e="0"+e;return e}let r=h.groupSizes[e],i=BigInt(h.groupBases[e]);0!==r&&0n!==i||(r=Math.floor(Math.log(Number.MAX_SAFE_INTEGER)/Math.log(e)),0===r&&(r=1),i=BigInt(e)**BigInt(r));let n="",s=this._magnitude;for(;s>0n;){const t=s%i;s/=i;const a=this._bigIntToStringInBase(t,e);if(s>0n){const e=r-a.length;n=e>0&&e<h.zeros.length?h.zeros[e]+a+n:e>0?"0".repeat(e)+a+n:a+n}else n=a+n}if(t>0)for(;n.length<t;)n="0"+n;return(1===this._sign?"-":"")+n}toNumber(){const e=this._getSignedValue();if(e>h.MAX_SAFE_INTEGER_BIGINT||e<h.MIN_SAFE_INTEGER_BIGINT)throw new Error("Number can only safely store up to 53 bits");return Number(e)}toJSON(){const e=this._getMinimalHex();return(this.isNeg()?"-":"")+e}toArrayLikeGeneric(e,t){let r=this._magnitude,i=t?0:e.length-1;const n=t?1:-1;for(let t=0;t<e.length;++t){if(0n===r&&i>=0&&i<e.length)e[i]=0;else{if(!(i>=0&&i<e.length))break;e[i]=Number(0xffn&r)}r>>=8n,i+=n}}toArray(e="be",t){this.strip();const r=this.byteLength(),i=t??Math.max(1,r);this.assert(r<=i,"byte array longer than desired length"),this.assert(i>0,"Requested array length <= 0");const n=new Array(i).fill(0);return 0n===this._magnitude&&i>0?n:0n===this._magnitude&&0===i?[]:(this.toArrayLikeGeneric(n,"le"===e),n)}bitLength(){return 0n===this._magnitude?0:this._magnitude.toString(2).length}static toBitArray(e){const t=e.bitLength();if(0===t)return[];const r=new Array(t),i=e._magnitude;for(let e=0;e<t;e++)r[e]=0n!==(i>>BigInt(e)&1n)?1:0;return r}toBitArray(){return h.toBitArray(this)}zeroBits(){if(0n===this._magnitude)return 0;let e=0,t=this._magnitude;for(;0n===(1n&t)&&0n!==t;)e++,t>>=1n;return e}byteLength(){return 0n===this._magnitude?0:Math.ceil(this.bitLength()/8)}_getSignedValue(){return 1===this._sign?-this._magnitude:this._magnitude}_setValueFromSigned(e){e<0n?(this._magnitude=-e,this._sign=1):(this._magnitude=e,this._sign=0),this._finishInitialization(),this.normSign()}toTwos(e){this.assert(e>=0);const t=BigInt(e);let r=this._getSignedValue();1===this._sign&&0n!==this._magnitude&&(r=(1n<<t)+r),r&=(1n<<t)-1n;const i=new h(0n);return i._initializeState(r,0),i}fromTwos(e){this.assert(e>=0);const t=BigInt(e),r=this._magnitude;if(e>0&&0n!==(r>>t-1n&1n)&&0===this._sign){const e=r-(1n<<t),i=new h(0n);return i._setValueFromSigned(e),i}return this.clone()}isNeg(){return 1===this._sign&&0n!==this._magnitude}neg(){return this.clone().ineg()}ineg(){return 0n!==this._magnitude&&(this._sign=1===this._sign?0:1),this}_iuop(e,t){const r=t(this._magnitude,e._magnitude),i=t===((e,t)=>e^t);let n=this._nominalWordLength;return i&&(n=Math.max(this.length,e.length)),this._magnitude=r,this._finishInitialization(),i&&(this._nominalWordLength=Math.max(this._nominalWordLength,n)),this.strip()}iuor(e){return this._iuop(e,((e,t)=>e|t))}iuand(e){return this._iuop(e,((e,t)=>e&t))}iuxor(e){return this._iuop(e,((e,t)=>e^t))}_iop(e,t){return this.assert(0===this._sign&&0===e._sign),this._iuop(e,t)}ior(e){return this._iop(e,((e,t)=>e|t))}iand(e){return this._iop(e,((e,t)=>e&t))}ixor(e){return this._iop(e,((e,t)=>e^t))}_uop_new(e,t){return this.length>=e.length?this.clone()[t](e):e.clone()[t](this)}or(e){return this.assert(0===this._sign&&0===e._sign),this._uop_new(e,"iuor")}uor(e){return this._uop_new(e,"iuor")}and(e){return this.assert(0===this._sign&&0===e._sign),this._uop_new(e,"iuand")}uand(e){return this._uop_new(e,"iuand")}xor(e){return this.assert(0===this._sign&&0===e._sign),this._uop_new(e,"iuxor")}uxor(e){return this._uop_new(e,"iuxor")}inotn(e){this.assert("number"==typeof e&&e>=0);const t=(1n<<BigInt(e))-1n;this._magnitude=~this._magnitude&t;const r=0===e?1:Math.ceil(e/h.wordSize);return this._nominalWordLength=Math.max(1,r),this.strip(),this._nominalWordLength=Math.max(this._nominalWordLength,Math.max(1,r)),this}notn(e){return this.clone().inotn(e)}setn(e,t){this.assert("number"==typeof e&&e>=0);const r=BigInt(e);1===t||!0===t?this._magnitude|=1n<<r:this._magnitude&=~(1n<<r);const i=Math.floor(e/h.wordSize)+1;return this._nominalWordLength=Math.max(this._nominalWordLength,i),this._finishInitialization(),this.strip()}iadd(e){return this._setValueFromSigned(this._getSignedValue()+e._getSignedValue()),this}add(e){const t=new h(0n);return t._setValueFromSigned(this._getSignedValue()+e._getSignedValue()),t}isub(e){return this._setValueFromSigned(this._getSignedValue()-e._getSignedValue()),this}sub(e){const t=new h(0n);return t._setValueFromSigned(this._getSignedValue()-e._getSignedValue()),t}mul(e){const t=new h(0n);return t._magnitude=this._magnitude*e._magnitude,t._sign=0n===t._magnitude?0:this._sign^e._sign,t._nominalWordLength=this.length+e.length,t.red=null,t.normSign()}imul(e){return this._magnitude*=e._magnitude,this._sign=0n===this._magnitude?0:this._sign^e._sign,this._nominalWordLength=this.length+e.length,this.red=null,this.normSign()}imuln(e){return this.assert("number"==typeof e,"Assertion failed"),this.assert(Math.abs(e)<=h.MAX_IMULN_ARG,"Assertion failed"),this._setValueFromSigned(this._getSignedValue()*BigInt(e)),this}muln(e){return this.clone().imuln(e)}sqr(){const e=new h(0n);return e._magnitude=this._magnitude*this._magnitude,e._sign=0,e._nominalWordLength=2*this.length,e.red=null,e}isqr(){return this._magnitude*=this._magnitude,this._sign=0,this._nominalWordLength=2*this.length,this.red=null,this}pow(e){if(this.assert(0===e._sign,"Exponent for pow must be non-negative"),e.isZero())return new h(1n);const t=new h(1n),r=this.clone(),i=e.clone(),n=r.isNeg(),s=i.isOdd();for(n&&r.ineg();!i.isZero();)i.isOdd()&&t.imul(r),r.isqr(),i.iushrn(1);return n&&s&&t.ineg(),t}iushln(e){return this.assert("number"==typeof e&&e>=0),0===e?this:(this._magnitude<<=BigInt(e),this._finishInitialization(),this.strip())}ishln(e){return this.assert(0===this._sign,"ishln requires positive number"),this.iushln(e)}iushrn(e,t,r){if(this.assert("number"==typeof e&&e>=0),0===e)return null!=r&&r._initializeState(0n,0),this;if(null!=r){const t=(1n<<BigInt(e))-1n,i=this._magnitude&t;r._initializeState(i,0)}return this._magnitude>>=BigInt(e),this._finishInitialization(),this.strip()}ishrn(e,t,r){return this.assert(0===this._sign,"ishrn requires positive number"),this.iushrn(e,t,r)}shln(e){return this.clone().ishln(e)}ushln(e){return this.clone().iushln(e)}shrn(e){return this.clone().ishrn(e)}ushrn(e){return this.clone().iushrn(e)}testn(e){return this.assert("number"==typeof e&&e>=0),0n!==(this._magnitude>>BigInt(e)&1n)}imaskn(e){this.assert("number"==typeof e&&e>=0),this.assert(0===this._sign,"imaskn works only with positive numbers");const t=BigInt(e),r=0n===t?0n:(1n<<t)-1n;this._magnitude&=r;const i=0===e?1:Math.max(1,Math.ceil(e/h.wordSize));return this._nominalWordLength=i,this._finishInitialization(),this._nominalWordLength=Math.max(this._nominalWordLength,i),this.strip()}maskn(e){return this.clone().imaskn(e)}iaddn(e){return this.assert("number"==typeof e),this.assert(Math.abs(e)<=h.MAX_IMULN_ARG,"num is too large"),this._setValueFromSigned(this._getSignedValue()+BigInt(e)),this}_iaddn(e){return this.iaddn(e)}isubn(e){return this.assert("number"==typeof e),this.assert(Math.abs(e)<=h.MAX_IMULN_ARG,"Assertion failed"),this._setValueFromSigned(this._getSignedValue()-BigInt(e)),this}addn(e){return this.clone().iaddn(e)}subn(e){return this.clone().isubn(e)}iabs(){return this._sign=0,this}abs(){return this.clone().iabs()}divmod(e,t,r){if(this.assert(!e.isZero(),"Division by zero"),this.isZero()){const e=new h(0n);return{div:"mod"!==t?e:null,mod:"div"!==t?e:null}}const i=this._getSignedValue(),n=e._getSignedValue();let s=null,a=null;"mod"!==t&&(s=i/n),"div"!==t&&(a=i%n,!0===r&&a<0n&&(a+=n<0n?-n:n));const o=null!==s?new h(0n):null;null!==o&&null!==s&&o._setValueFromSigned(s);const c=null!==a?new h(0n):null;return null!==c&&null!==a&&c._setValueFromSigned(a),{div:o,mod:c}}div(e){return this.divmod(e,"div",!1).div}mod(e){return this.divmod(e,"mod",!1).mod}umod(e){return this.divmod(e,"mod",!0).mod}divRound(e){this.assert(!e.isZero());const t=this._getSignedValue(),r=e._getSignedValue();let i=t/r;const n=t%r;if(0n===n){const e=new h(0n);return e._setValueFromSigned(i),e}2n*(n<0n?-n:n)>=(r<0n?-r:r)&&(t>0n&&r>0n||t<0n&&r<0n?i+=1n:i-=1n);const s=new h(0n);return s._setValueFromSigned(i),s}modrn(e){this.assert(0!==e,"Division by zero in modrn");const t=BigInt(Math.abs(e));if(0n===t)throw new Error("Division by zero in modrn");const r=this._magnitude%t;return Number(e<0?-r:r)}idivn(e){return this.assert(0!==e),this.assert(Math.abs(e)<=h.MAX_IMULN_ARG,"num is too large"),this._setValueFromSigned(this._getSignedValue()/BigInt(e)),this}divn(e){return this.clone().idivn(e)}egcd(e){this.assert(0===e._sign,"p must not be negative"),this.assert(!e.isZero(),"p must not be zero");let t=this._getSignedValue(),r=e._magnitude,i=1n,n=0n,s=0n,a=1n;for(;0n!==r;){const e=t/r;let o=r;r=t%r,t=o,o=n,n=i-e*n,i=o,o=a,a=s-e*a,s=o}const o=new h(0n);o._setValueFromSigned(i);const c=new h(0n);c._setValueFromSigned(s);const d=new h(0n);return d._initializeState(t<0n?-t:t,0),{a:o,b:c,gcd:d}}gcd(e){let t=this._magnitude,r=e._magnitude;if(0n===t){const e=new h(0n);return e._setValueFromSigned(r),e.iabs()}if(0n===r){const e=new h(0n);return e._setValueFromSigned(t),e.iabs()}for(;0n!==r;){const e=t%r;t=r,r=e}const i=new h(0n);return i._initializeState(t,0),i}invm(e){this.assert(!e.isZero()&&0===e._sign,"Modulus for invm must be positive and non-zero");const t=this.egcd(e);if(!t.gcd.eqn(1))throw new Error("Inverse does not exist (numbers are not coprime).");return t.a.umod(e)}isEven(){return this._magnitude%2n===0n}isOdd(){return this._magnitude%2n===1n}andln(e){return this.assert(e>=0),Number(this._magnitude&BigInt(e))}bincn(e){this.assert("number"==typeof e&&e>=0);const t=1n<<BigInt(e);return this._setValueFromSigned(this._getSignedValue()+t),this}isZero(){return 0n===this._magnitude}cmpn(e){this.assert(Math.abs(e)<=h.MAX_IMULN_ARG,"Number is too big");const t=this._getSignedValue(),r=BigInt(e);return t<r?-1:t>r?1:0}cmp(e){const t=this._getSignedValue(),r=e._getSignedValue();return t<r?-1:t>r?1:0}ucmp(e){return this._magnitude<e._magnitude?-1:this._magnitude>e._magnitude?1:0}gtn(e){return 1===this.cmpn(e)}gt(e){return 1===this.cmp(e)}gten(e){return this.cmpn(e)>=0}gte(e){return this.cmp(e)>=0}ltn(e){return-1===this.cmpn(e)}lt(e){return-1===this.cmp(e)}lten(e){return this.cmpn(e)<=0}lte(e){return this.cmp(e)<=0}eqn(e){return 0===this.cmpn(e)}eq(e){return 0===this.cmp(e)}toRed(e){return this.assert(null==this.red,"Already a number in reduction context"),this.assert(0===this._sign,"toRed works only with positives"),e.convertTo(this).forceRed(e)}fromRed(){return this.assert(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)}forceRed(e){return this.red=e,this}redAdd(e){return this.assert(this.red,"redAdd works only with red numbers"),this.red.add(this,e)}redIAdd(e){return this.assert(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)}redSub(e){return this.assert(this.red,"redSub works only with red numbers"),this.red.sub(this,e)}redISub(e){return this.assert(this.red,"redISub works only with red numbers"),this.red.isub(this,e)}redShl(e){return this.assert(this.red,"redShl works only with red numbers"),this.red.shl(this,e)}redMul(e){return this.assert(this.red,"redMul works only with red numbers"),this.red.verify2(this,e),this.red.mul(this,e)}redIMul(e){return this.assert(this.red,"redIMul works only with red numbers"),this.red.verify2(this,e),this.red.imul(this,e)}redSqr(){return this.assert(this.red,"redSqr works only with red numbers"),this.red.verify1(this),this.red.sqr(this)}redISqr(){return this.assert(this.red,"redISqr works only with red numbers"),this.red.verify1(this),this.red.isqr(this)}redSqrt(){return this.assert(this.red,"redSqrt works only with red numbers"),this.red.verify1(this),this.red.sqrt(this)}redInvm(){return this.assert(this.red,"redInvm works only with red numbers"),this.red.verify1(this),this.red.invm(this)}redNeg(){return this.assert(this.red,"redNeg works only with red numbers"),this.red.verify1(this),this.red.neg(this)}redPow(e){return this.assert(null!=this.red&&null==e.red,"redPow(normalNum)"),this.red.verify1(this),this.red.pow(this,e)}static fromHex(e,t){let r="be";return"little"!==t&&"le"!==t||(r="le"),new h(e,16,r)}toHex(e=0){if(this.isZero()&&0===e)return"";let t=this._getMinimalHex();"0"!==t&&t.length%2!=0&&(t="0"+t);const r=2*e;for(;t.length<r;)t="0"+t;return(this.isNeg()?"-":"")+t}static fromJSON(e){return new h(e,16)}static fromNumber(e){return new h(e)}static fromString(e,t){return new h(e,t)}static fromSm(e,t="big"){if(0===e.length)return new h(0n);let r=0,i="";if("little"===t){const t=e.length-1;let n=e[t];128&n&&(r=1,n&=127),i+=(n<16?"0":"")+n.toString(16);for(let r=t-1;r>=0;r--){const t=e[r];i+=(t<16?"0":"")+t.toString(16)}}else{let t=e[0];128&t&&(r=1,t&=127),i+=(t<16?"0":"")+t.toString(16);for(let t=1;t<e.length;t++){const r=e[t];i+=(r<16?"0":"")+r.toString(16)}}const n=""===i?0n:BigInt("0x"+i),s=new h(0n);return s._initializeState(n,r),s}toSm(e="big"){if(0n===this._magnitude)return 1===this._sign?[128]:[];let t=this._getMinimalHex();t.length%2!=0&&(t="0"+t);const r=t.length/2,i=new Array(r);for(let e=0,r=0;e<t.length;e+=2)i[r++]=parseInt(t.slice(e,e+2),16);return 1===this._sign?128&i[0]?i.unshift(128):i[0]|=128:128&i[0]&&i.unshift(0),"little"===e?i.reverse():i}static fromBits(e,t=!1){const r=e>>>24,i=8388607&e,n=!!(8388608&e);if(t&&n)throw new Error("negative bit set");if(0===r&&0===i){if(n&&t)throw new Error("negative bit set for zero value");return new h(0n)}const s=new h(i);return r<=3?s.iushrn(8*(3-r)):s.iushln(8*(r-3)),n&&s.ineg(),s}toBits(){if(this.strip(),this.isZero()&&!this.isNeg())return 0;const e=this.isNeg(),t=this.abs();let r=t.toArray("be"),i=0;for(;i<r.length-1&&0===r[i];)i++;r=r.slice(i);let n,s=r.length;if(0!==s||t.isZero()||(r=[0],s=1),t.isZero()&&(s=0,r=[]),0===s)n=0;else if(s<=3){n=0;for(let e=0;e<s;e++)n=n<<8|r[e]}else n=r[0]<<16|r[1]<<8|r[2];8388608&n&&s<=255&&(n>>>=8,s++);let a=s<<24|n;return e&&(a|=8388608),a>>>0}static fromScriptNum(e,t=!1,r){if(void 0!==r&&e.length>r)throw new Error("script number overflow");if(0===e.length)return new h(0n);if(t&&!(127&e[e.length-1]||!(e.length<=1)&&128&e[e.length-2]))throw new Error("non-minimally encoded script number");return h.fromSm(e,"little")}toScriptNum(){return this.toSm("little")}_invmp(e){this.assert(0===e._sign,"p must not be negative for _invmp"),this.assert(!e.isZero(),"p must not be zero for _invmp");let t=this.umod(e)._magnitude,r=e._magnitude,i=1n,n=0n;const s=e._magnitude;for(;t>1n&&r>1n;){let e=0;for(;0n===(t>>BigInt(e)&1n);)e++;if(e>0){t>>=BigInt(e);for(let t=0;t<e;++t)0n!==(1n&i)&&(i+=s),i>>=1n}let a=0;for(;0n===(r>>BigInt(a)&1n);)a++;if(a>0){r>>=BigInt(a);for(let e=0;e<a;++e)0n!==(1n&n)&&(n+=s),n>>=1n}t>=r?(t-=r,i-=n):(r-=t,n-=i)}let a;if(1n===t)a=i;else if(1n===r)a=n;else if(0n===t&&1n===r)a=n;else{if(0n!==r||1n!==t)throw new Error("_invmp: GCD is not 1, inverse does not exist. aVal="+t+", bVal="+r);a=i}a%=s,a<0n&&(a+=s);const o=new h(0n);return o._initializeState(a,0),o}mulTo(e,t){return t._magnitude=this._magnitude*e._magnitude,t._sign=0n===t._magnitude?0:this._sign^e._sign,t._nominalWordLength=this.length+e.length,t.red=null,t.normSign(),t}}class d{name;p;k;n;tmp;constructor(e,t){this.name=e,this.p=new h(t,16),this.n=this.p.bitLength(),this.k=new h(BigInt(1)).iushln(this.n).isub(this.p),this.tmp=this._tmp()}_tmp(){const e=new h(BigInt(0)),t=Math.ceil(this.n/h.wordSize);return e.expand(Math.max(1,t)),e}ireduce(e){const t=e;let r;do{this.split(t,this.tmp),this.imulK(t),t.iadd(this.tmp),r=t.bitLength()}while(r>this.n);const i=r<this.n?-1:t.ucmp(this.p);return 0===i?t.words=[0]:i>0&&t.isub(this.p),t.strip(),t}split(e,t){e.iushrn(this.n,0,t)}imulK(e){return e.imul(this.k)}}class u extends d{constructor(){super("k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}split(e,t){const r=4194303,i=e.words,n=e.length,s=Math.min(n,9),a=new Array(s+(n>9?1:0)).fill(0);for(let e=0;e<s;e++)a[e]=i[e];let o=s;if(n<=9){const r=new Array(o);for(let e=0;e<o;++e)r[e]=a[e];return t.words=r,void(e.words=[0])}let c=i[9];a[o++]=c&r;const h=new Array(o);for(let e=0;e<o;++e)h[e]=a[e];t.words=h;const d=new Array(Math.max(1,n-9)).fill(0);let u=0;for(let e=10;e<n;e++){const t=0|i[e];u<d.length&&(d[u++]=(t&r)<<4|c>>>22),c=t}c>>>=22,u<d.length?d[u++]=c:0!==c&&d.length;const l=new Array(u);for(let e=0;e<u;++e)l[e]=d[e];e.words=l}imulK(e){const t=e.words,r=e.length,i=r+2,n=new Array(i).fill(0);for(let e=0;e<r;e++)n[e]=t[e];let s=0;for(let e=0;e<i;e++){const t=0|n[e];s+=977*t,n[e]=67108863&s,s=64*t+(s/67108864|0)}return e.words=n,e}}class l{prime;m;constructor(e){if("k256"===e){const e=new u;this.m=e.p,this.prime=e}else this.assert(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}assert(e,t="Assertion failed"){if(!e)throw new Error(t)}verify1(e){this.assert(0===e.negative,"red works only with positives"),this.assert(e.red,"red works only with red numbers")}verify2(e,t){this.assert(!(e.negative|t.negative),"red works only with positives"),this.assert(null!=e.red&&e.red===t.red,"red works only with red numbers")}imod(e){return null!=this.prime?this.prime.ireduce(e).forceRed(this):(h.move(e,e.umod(this.m).forceRed(this)),e)}neg(e){return e.isZero()?e.clone():this.m.sub(e).forceRed(this)}add(e,t){this.verify2(e,t);const r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r.forceRed(this)}iadd(e,t){this.verify2(e,t);const r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r}sub(e,t){this.verify2(e,t);const r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r.forceRed(this)}isub(e,t){this.verify2(e,t);const r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r}shl(e,t){return this.verify1(e),this.imod(e.ushln(t))}imul(e,t){return this.verify2(e,t),this.imod(e.imul(t))}mul(e,t){return this.verify2(e,t),this.imod(e.mul(t))}isqr(e){return this.imul(e,e.clone())}sqr(e){return this.mul(e,e)}sqrt(e){if(e.isZero())return e.clone();const t=this.m.andln(3);if(this.assert(t%2==1),3===t){const t=this.m.add(new h(1)).iushrn(2);return this.pow(e,t)}const r=this.m.subn(1);let i=0;for(;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);this.assert(!r.isZero());const n=new h(1).toRed(this),s=n.redNeg(),a=this.m.subn(1).iushrn(1),o=this.m.bitLength(),c=new h(2*o*o).toRed(this);for(;0!==this.pow(c,a).cmp(s);)c.redIAdd(s);let d=this.pow(c,r),u=this.pow(e,r.addn(1).iushrn(1)),l=this.pow(e,r),f=i;for(;0!==l.cmp(n);){let e=l,t=0;for(;0!==e.cmp(n);t++)e=e.redSqr();this.assert(t<f);const r=this.pow(d,new h(1).iushln(f-t-1));u=u.redMul(r),d=r.redSqr(),l=l.redMul(d),f=t}return u}invm(e){const t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)}pow(e,t){if(t.isZero())return new h(1).toRed(this);if(0===t.cmpn(1))return e.clone();const r=new Array(16);r[0]=new h(1).toRed(this),r[1]=e;let i=2;for(;i<r.length;i++)r[i]=this.mul(r[i-1],e);let n=r[0],s=0,a=0,o=t.bitLength()%26;for(0===o&&(o=26),i=t.length-1;i>=0;i--){const e=t.words[i];for(let t=o-1;t>=0;t--){const o=e>>t&1;n!==r[0]&&(n=this.sqr(n)),0!==o||0!==s?(s<<=1,s|=o,a++,(4===a||0===i&&0===t)&&(n=this.mul(n,r[s]),a=0,s=0)):a=0}o=26}return n}convertTo(e){const t=e.umod(this.m);return t===e?t.clone():t}convertFrom(e){const t=e.clone();return t.red=null,t}}class f extends l{shift;r;r2;rinv;minv;constructor(e){super(e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new h(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}convertTo(e){return this.imod(e.ushln(this.shift))}convertFrom(e){const t=this.imod(e.mul(this.rinv));return t.red=null,t}imul(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;const r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift);let s=n;return n.cmp(this.m)>=0?s=n.isub(this.m):n.cmpn(0)<0&&(s=n.iadd(this.m)),s.forceRed(this)}mul(e,t){if(e.isZero()||t.isZero())return new h(0).forceRed(this);const r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift);let s=n;return n.cmp(this.m)>=0?s=n.isub(this.m):n.cmpn(0)<0&&(s=n.iadd(this.m)),s.forceRed(this)}invm(e){return this.imod(e._invmp(this.m).mul(this.r2)).forceRed(this)}}class p{curve;type;precomputed;constructor(e){this.curve=new rt,this.type=e,this.precomputed=null}}class b extends p{x;y;z;zOne;constructor(e,t,r){super("jacobian"),null===e&&null===t&&null===r?(this.x=this.curve.one,this.y=this.curve.one,this.z=new h(0)):(h.isBN(e)||(e=new h(e,16)),this.x=e,h.isBN(t)||(t=new h(t,16)),this.y=t,h.isBN(r)||(r=new h(r,16)),this.z=r),null==this.x.red&&(this.x=this.x.toRed(this.curve.red)),null==this.y.red&&(this.y=this.y.toRed(this.curve.red)),null==this.z.red&&(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}toP(){if(this.isInfinity())return new Me(null,null);const e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),i=this.y.redMul(t).redMul(e);return new Me(r,i)}neg(){return new b(this.x,this.y.redNeg(),this.z)}add(e){if(this.isInfinity())return e;if(e.isInfinity())return this;const t=e.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(t),n=e.x.redMul(r),s=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),o=i.redSub(n),c=s.redSub(a);if(0===o.cmpn(0))return 0!==c.cmpn(0)?new b(null,null,null):this.dbl();const h=o.redSqr(),d=h.redMul(o),u=i.redMul(h),l=c.redSqr().redIAdd(d).redISub(u).redISub(u),f=c.redMul(u.redISub(l)).redISub(s.redMul(d)),p=this.z.redMul(e.z).redMul(o);return new b(l,f,p)}mixedAdd(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;if(null===e.x||null===e.y)throw new Error("Point coordinates cannot be null");const t=this.z.redSqr(),r=this.x,i=e.x.redMul(t),n=this.y,s=e.y.redMul(t).redMul(this.z),a=r.redSub(i),o=n.redSub(s);if(0===a.cmpn(0))return 0!==o.cmpn(0)?new b(null,null,null):this.dbl();const c=a.redSqr(),h=c.redMul(a),d=r.redMul(c),u=o.redSqr().redIAdd(h).redISub(d).redISub(d),l=o.redMul(d.redISub(u)).redISub(n.redMul(h)),f=this.z.redMul(a);return new b(u,l,f)}dblp(e){if(0===e)return this;if(this.isInfinity())return this;if(void 0===e)return this.dbl();let t=this;for(let r=0;r<e;r++)t=t.dbl();return t}dbl(){if(this.isInfinity())return this;let e,t,r;if(this.zOne){const i=this.x.redSqr(),n=this.y.redSqr(),s=n.redSqr();let a=this.x.redAdd(n).redSqr().redISub(i).redISub(s);a=a.redIAdd(a);const o=i.redAdd(i).redIAdd(i),c=o.redSqr().redISub(a).redISub(a);let h=s.redIAdd(s);h=h.redIAdd(h),h=h.redIAdd(h),e=c,t=o.redMul(a.redISub(c)).redISub(h),r=this.y.redAdd(this.y)}else{const i=this.x.redSqr(),n=this.y.redSqr(),s=n.redSqr();let a=this.x.redAdd(n).redSqr().redISub(i).redISub(s);a=a.redIAdd(a);const o=i.redAdd(i).redIAdd(i),c=o.redSqr();let h=s.redIAdd(s);h=h.redIAdd(h),h=h.redIAdd(h),e=c.redISub(a).redISub(a),t=o.redMul(a.redISub(e)).redISub(h),r=this.y.redMul(this.z),r=r.redIAdd(r)}return new b(e,t,r)}eq(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;const t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;const i=t.redMul(this.z),n=r.redMul(e.z);return 0===this.y.redMul(n).redISub(e.y.redMul(i)).cmpn(0)}eqXToP(e){const t=this.z.redSqr(),r=e.toRed(this.curve?.red).redMul(t);if(0===this.x.cmp(r))return!0;const i=e.clone();if(null===this.curve||null==this.curve.redN)throw new Error("Curve or redN is not initialized.");const n=this.curve.redN.redMul(t);for(;i.cmp(this.curve.p)<0;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}return!1}inspect(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"}isInfinity(){return 0===this.z.cmpn(0)}}const w=(e,t="Hash assertion failed")=>{if(!e)throw new Error(t)};class g{pending;pendingTotal;blockSize;outSize;endian;_delta8;_delta32;padLength;hmacStrength;constructor(e,t,r,i){this.pending=null,this.pendingTotal=0,this.blockSize=e,this.outSize=t,this.hmacStrength=r,this.padLength=i/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}_update(e,t){throw new Error("Not implemented")}_digest(){throw new Error("Not implemented")}_digestHex(){throw new Error("Not implemented")}update(e,t){if(e=y(e,t),null==this.pending?this.pending=e:this.pending=this.pending.concat(e),this.pendingTotal+=e.length,this.pending.length>=this._delta8){const t=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-t,e.length),0===this.pending.length&&(this.pending=null),e=function(e,t,r,i){const n=r-0;w(n%4==0);const s=new Array(n/4);for(let t=0,r=0;t<s.length;t++,r+=4){let n;n="big"===i?e[r]<<24|e[r+1]<<16|e[r+2]<<8|e[r+3]:e[r+3]<<24|e[r+2]<<16|e[r+1]<<8|e[r],s[t]=n>>>0}return s}(e,0,e.length-t,this.endian);for(let t=0;t<e.length;t+=this._delta32)this._update(e,t)}return this}digest(){return this.update(this._pad()),w(null===this.pending),this._digest()}digestHex(){return this.update(this._pad()),w(null===this.pending),this._digestHex()}_pad(){let e=this.pendingTotal;const t=this._delta8,r=t-(e+this.padLength)%t,i=new Array(r+this.padLength);let n,s;for(i[0]=128,n=1;n<r;n++)i[n]=0;if(e<<=3,"big"===this.endian){for(s=8;s<this.padLength;s++)i[n++]=0;i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=e>>>24&255,i[n++]=e>>>16&255,i[n++]=e>>>8&255,i[n++]=255&e}else for(i[n++]=255&e,i[n++]=e>>>8&255,i[n++]=e>>>16&255,i[n++]=e>>>24&255,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,s=8;s<this.padLength;s++)i[n++]=0;return i}}function m(e,t){return 55296==(64512&e.charCodeAt(t))&&!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1))}function y(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];const r=[];if("string"==typeof e)if("hex"!==t){let t=0;for(let i=0;i<e.length;i++){let n=e.charCodeAt(i);n<128?r[t++]=n:n<2048?(r[t++]=n>>6|192,r[t++]=63&n|128):m(e,i)?(n=65536+((1023&n)<<10)+(1023&e.charCodeAt(++i)),r[t++]=n>>18|240,r[t++]=n>>12&63|128,r[t++]=n>>6&63|128,r[t++]=63&n|128):(r[t++]=n>>12|224,r[t++]=n>>6&63|128,r[t++]=63&n|128)}}else{(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);for(let t=0;t<e.length;t+=2)r.push(parseInt(e[t]+e[t+1],16))}else for(let t=0;t<e.length;t++)r[t]=0|e[t];return r}function v(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function I(e,t){let r="";for(let n=0;n<e.length;n++){let s=e[n];"little"===t&&(s=v(s)),r+=7===(i=s.toString(16)).length?"0"+i:6===i.length?"00"+i:5===i.length?"000"+i:4===i.length?"0000"+i:3===i.length?"00000"+i:2===i.length?"000000"+i:1===i.length?"0000000"+i:i}var i;return r}function k(e,t){const r=new Array(4*e.length);for(let i=0,n=0;i<e.length;i++,n+=4){const s=e[i];"big"===t?(r[n]=s>>>24,r[n+1]=s>>>16&255,r[n+2]=s>>>8&255,r[n+3]=255&s):(r[n+3]=s>>>24,r[n+2]=s>>>16&255,r[n+1]=s>>>8&255,r[n]=255&s)}return r}function S(e,t){return e>>>t|e<<32-t}function E(e,t){return e<<t|e>>>32-t}function P(e,t){return e+t>>>0}function N(e,t,r){return e+t+r>>>0}function O(e,t,r,i){return e+t+r+i>>>0}function _(e,t,r,i,n){return e+t+r+i+n>>>0}function A(e,t,r,i){return 0===e?x(t,r,i):1===e||3===e?function(e,t,r){return e^t^r}(t,r,i):2===e?T(t,r,i):void 0}function x(e,t,r){return e&t^~e&r}function T(e,t,r){return e&t^e&r^t&r}function F(e){return S(e,2)^S(e,13)^S(e,22)}function R(e){return S(e,6)^S(e,11)^S(e,25)}function C(e){return S(e,7)^S(e,18)^e>>>3}const V=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],D=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],B=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],U=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];function K(e,t,r,i){return e<=15?t^r^i:e<=31?t&r|~t&i:e<=47?(t|~r)^i:e<=63?t&i|r&~i:t^(r|~i)}function L(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function H(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}function q(e,t,r,i){const n=e[t],s=i+e[t+1]>>>0,a=(s<i?1:0)+r+n;e[t]=a>>>0,e[t+1]=s}function M(e,t,r,i){return(t+i>>>0<t?1:0)+e+r>>>0}function $(e,t,r,i){return t+i>>>0}function z(e,t,r,i,n,s,a,o){let c=0,h=t;return h=h+i>>>0,c+=h<t?1:0,h=h+s>>>0,c+=h<s?1:0,h=h+o>>>0,c+=h<o?1:0,e+r+n+a+c>>>0}function W(e,t,r,i,n,s,a,o,c,h){let d=0,u=t;return u=u+i>>>0,d+=u<t?1:0,u=u+s>>>0,d+=u<s?1:0,u=u+o>>>0,d+=u<o?1:0,u=u+h>>>0,d+=u<h?1:0,e+r+n+a+c+d>>>0}function j(e,t,r){return(t<<32-r|e>>>r)>>>0}function X(e,t,r){return(e<<32-r|t>>>r)>>>0}function G(e,t,r){return e>>>r}function Y(e,t,r){return(e<<32-r|t>>>r)>>>0}class Z extends g{h;constructor(){super(512,160,192,64),this.endian="little",this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}_update(e,t){let r,i=this.h[0],n=this.h[1],s=this.h[2],a=this.h[3],o=this.h[4],c=i,h=n,d=s,u=a,l=o;for(let f=0;f<80;f++)r=P(E(O(i,K(f,n,s,a),e[V[f]+t],L(f)),B[f]),o),i=o,o=a,a=E(s,10),s=n,n=r,r=P(E(O(c,K(79-f,h,d,u),e[D[f]+t],H(f)),U[f]),l),c=l,l=u,u=E(d,10),d=h,h=r;r=N(this.h[1],s,u),this.h[1]=N(this.h[2],a,l),this.h[2]=N(this.h[3],o,c),this.h[3]=N(this.h[4],i,h),this.h[4]=N(this.h[0],n,d),this.h[0]=r}_digest(){return k(this.h,"little")}_digestHex(){return I(this.h,"little")}}class J extends g{h;W;k;constructor(){super(512,256,192,64),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=[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],this.W=new Array(64)}_update(e,t){const r=this.W;let i;for(void 0===t&&(t=0),i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=O(S(n=r[i-2],17)^S(n,19)^n>>>10,r[i-7],C(r[i-15]),r[i-16]);var n;let s=this.h[0],a=this.h[1],o=this.h[2],c=this.h[3],h=this.h[4],d=this.h[5],u=this.h[6],l=this.h[7];for(w(this.k.length===r.length),i=0;i<r.length;i++){const e=_(l,R(h),x(h,d,u),this.k[i],r[i]),t=P(F(s),T(s,a,o));l=u,u=d,d=h,h=P(c,e),c=o,o=a,a=s,s=P(e,t)}this.h[0]=P(this.h[0],s),this.h[1]=P(this.h[1],a),this.h[2]=P(this.h[2],o),this.h[3]=P(this.h[3],c),this.h[4]=P(this.h[4],h),this.h[5]=P(this.h[5],d),this.h[6]=P(this.h[6],u),this.h[7]=P(this.h[7],l)}_digest(){return k(this.h,"big")}_digestHex(){return I(this.h,"big")}}class Q extends g{h;W;k;constructor(){super(512,160,80,64),this.k=[1518500249,1859775393,2400959708,3395469782],this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}_update(e,t){const r=this.W;let i;for(void 0===t&&(t=0),i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=E(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);let n=this.h[0],s=this.h[1],a=this.h[2],o=this.h[3],c=this.h[4];for(i=0;i<r.length;i++){const e=~~(i/20),t=_(E(n,5),A(e,s,a,o),c,r[i],this.k[e]);c=o,o=a,a=E(s,30),s=n,n=t}this.h[0]=P(this.h[0],n),this.h[1]=P(this.h[1],s),this.h[2]=P(this.h[2],a),this.h[3]=P(this.h[3],o),this.h[4]=P(this.h[4],c)}_digest(){return k(this.h,"big")}_digestHex(){return I(this.h,"big")}}class ee extends g{h;W;k;constructor(){super(1024,512,192,128),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],this.W=new Array(160)}_prepareBlock(e,t){const r=this.W;let i;for(i=0;i<32;i++)r[i]=e[t+i];for(;i<r.length;i+=2){const e=ue(r[i-4],r[i-3]),t=le(r[i-4],r[i-3]),n=r[i-14],s=r[i-13],a=he(r[i-30],r[i-29]),o=de(r[i-30],r[i-29]),c=r[i-32],h=r[i-31];r[i]=z(e,t,n,s,a,o,c,h),r[i+1]=t+s+o+h>>>0}}_update(e,t){this._prepareBlock(e,t);const r=this.W;let i=this.h[0],n=this.h[1],s=this.h[2],a=this.h[3],o=this.h[4],c=this.h[5],h=this.h[6],d=this.h[7],u=this.h[8],l=this.h[9],f=this.h[10],p=this.h[11],b=this.h[12],g=this.h[13],m=this.h[14],y=this.h[15];w(this.k.length===r.length);for(let e=0;e<r.length;e+=2){let t=m,w=y,v=oe(u,l),I=ce(u,l);const k=te(u,0,f,0,b),S=re(0,l,0,p,0,g),E=this.k[e],P=this.k[e+1],N=r[e],O=r[e+1],_=W(t,w,v,I,k,S,E,P,N,O),A=w+I+S+P+O>>>0;t=se(i,n),w=ae(i,n),v=ie(i,0,s,0,o),I=ne(0,n,0,a,0,c);const x=M(t,w,v,I),T=$(0,w,0,I);m=b,y=g,b=f,g=p,f=u,p=l,u=M(h,d,_,A),l=$(0,d,0,A),h=o,d=c,o=s,c=a,s=i,a=n,i=M(_,A,x,T),n=$(0,A,0,T)}q(this.h,0,i,n),q(this.h,2,s,a),q(this.h,4,o,c),q(this.h,6,h,d),q(this.h,8,u,l),q(this.h,10,f,p),q(this.h,12,b,g),q(this.h,14,m,y)}_digest(){return k(this.h,"big")}_digestHex(){return I(this.h,"big")}}function te(e,t,r,i,n,s){let a=e&r^~e&n;return a<0&&(a+=4294967296),a}function re(e,t,r,i,n,s){let a=t&i^~t&s;return a<0&&(a+=4294967296),a}function ie(e,t,r,i,n,s){let a=e&r^e&n^r&n;return a<0&&(a+=4294967296),a}function ne(e,t,r,i,n,s){let a=t&i^t&s^i&s;return a<0&&(a+=4294967296),a}function se(e,t){let r=j(e,t,28)^j(t,e,2)^j(t,e,7);return r<0&&(r+=4294967296),r}function ae(e,t){let r=X(e,t,28)^X(t,e,2)^X(t,e,7);return r<0&&(r+=4294967296),r}function oe(e,t){let r=j(e,t,14)^j(e,t,18)^j(t,e,9);return r<0&&(r+=4294967296),r}function ce(e,t){let r=X(e,t,14)^X(e,t,18)^X(t,e,9);return r<0&&(r+=4294967296),r}function he(e,t){let r=j(e,t,1)^j(e,t,8)^G(e,0,7);return r<0&&(r+=4294967296),r}function de(e,t){let r=X(e,t,1)^X(e,t,8)^Y(e,t,7);return r<0&&(r+=4294967296),r}function ue(e,t){let r=j(e,t,19)^j(t,e,29)^G(e,0,6);return r<0&&(r+=4294967296),r}function le(e,t){let r=X(e,t,19)^X(t,e,29)^Y(e,t,6);return r<0&&(r+=4294967296),r}class fe{inner;outer;blockSize=64;outSize=32;constructor(e){let t;for((e=y(e,"hex")).length>this.blockSize&&(e=(new J).update(e).digest()),w(e.length<=this.blockSize),t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new J).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new J).update(e)}update(e,t){return this.inner.update(e,t),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class pe{inner;outer;blockSize=64;constructor(e){let t;for((e=y(e,"hex")).length>this.blockSize&&(e=(new Q).update(e).digest()),t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new Q).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new Q).update(e)}update(e,t){return this.inner.update(e,t),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class be{inner;outer;blockSize=128;outSize=32;constructor(e){let t;for((e=y(e,"hex")).length>this.blockSize&&(e=(new ee).update(e).digest()),w(e.length<=this.blockSize),t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new ee).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new ee).update(e)}update(e,t){return this.inner.update(e,t),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}const we=(e,t)=>(new Z).update(e,t).digest(),ge=(e,t)=>(new Q).update(e,t).digest(),me=(e,t)=>(new J).update(e,t).digest(),ye=(e,t)=>(new ee).update(e,t).digest(),ve=(e,t)=>{const r=(new J).update(e,t).digest();return(new J).update(r).digest()},Ie=(e,t)=>{const r=(new J).update(e,t).digest();return(new Z).update(r).digest()},ke=(e,t,r)=>new fe(e).update(t,r).digest(),Se=(e,t,r)=>new be(e).update(t,r).digest();function Ee(e,t,r,i,n="sha512"){if("sha512"!==n)throw new Error("Only sha512 is supported in this PBKDF2 implementation");const s=new Array(i),a=[...t,0,0,0,0];let o=0;const c=Math.ceil(i/64);for(let i=1;i<=c;i++){a[t.length]=i>>24&255,a[t.length+1]=i>>16&255,a[t.length+2]=i>>8&255,a[t.length+3]=255&i;const n=Se(e,a);let c=n;for(let t=1;t<r;t++){c=Se(e,c);for(let e=0;e<64;e++)n[e]^=c[e]}for(let e=0;e<n.length;e++)s[o+e]=n[e];o+=64}return s.slice(0,i)}const Pe=e=>e.length%2==1?"0"+e:e,Ne=e=>{let t="";for(const r of e)t+=Pe(r.toString(16));return t},Oe=(e,t)=>{if(Array.isArray(e))return e.slice();if(void 0===e)return[];if("string"!=typeof e)return Array.from(e,(e=>0|e));switch(t){case"hex":return _e(e);case"base64":return Ae(e);default:return function(e){const t=[];for(let r=0;r<e.length;r++){const i=e.codePointAt(r);if(void 0===i)throw new Error(`Index out of range: ${r}`);let n=i;n>65535?r++:n>=55296&&n<=57343&&(n=65533),n<=127?t.push(n):n<=2047?t.push(192|n>>6,128|63&n):n<=65535?t.push(224|n>>12,128|n>>6&63,128|63&n):t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n)}return t}(e)}},_e=e=>{(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);const t=[];for(let r=0;r<e.length;r+=2)t.push(parseInt(e[r]+e[r+1],16));return t},Ae=e=>{const t=[];let r=0,i=0;for(const n of e.replace(/=+$/,""))r=r<<6|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(n),i+=6,i>=8&&(i-=8,t.push(r>>i&255),r&=(1<<i)-1);return t},xe=e=>{let t="",r=0;for(let i=0;i<e.length;i++){const n=e[i];if(r>0)r--;else if(n<=127)t+=String.fromCharCode(n);else if(n>=192&&n<=223){r=1;const s=(31&n)<<6|63&e[i+1];t+=String.fromCharCode(s)}else if(n>=224&&n<=239){r=2;const s=(15&n)<<12|(63&e[i+1])<<6|63&e[i+2];t+=String.fromCharCode(s)}else if(n>=240&&n<=247){r=3;const s=(7&n)<<18|(63&e[i+1])<<12|(63&e[i+2])<<6|63&e[i+3],a=55296+(s-65536>>10),o=56320+(s-65536&1023);t+=String.fromCharCode(a,o)}}return t},Te=(e,t)=>{switch(t){case"hex":return Ne(e);case"utf8":return xe(e);default:return e}};function Fe(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let r,i="";for(r=0;r<e.length;r+=3){const n=e[r],s=r+1<e.length?e[r+1]:0,a=r+2<e.length?e[r+2]:0,o=(3&n)<<4|s>>4,c=(15&s)<<2|a>>6,h=63&a;i+=t.charAt(n>>2)+t.charAt(o),i+=r+1<e.length?t.charAt(c):"=",i+=r+2<e.length?t.charAt(h):"="}return i}const Re="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",Ce=e=>{if(""===e||"string"!=typeof e)throw new Error(`Expected base58 string but got “${e}”`);const t=e.match(/[IOl0]/gmu);if(null!==t)throw new Error(`Invalid base58 character “${t.join("")}”`);const r=e.match(/^1+/gmu),i=null!==r?r[0].length:0,n=(e.length-i)*(Math.log(58)/Math.log(256))+1>>>0;var s;return[...new Uint8Array([...new Uint8Array(i),...(e.match(/./gmu)??[]).map((e=>Re.indexOf(e))).reduce(((e,t)=>e.map((e=>{const r=58*e+t;return t=r>>8,r}))),new Uint8Array(n)).reverse().filter((s=!1,e=>s=s||e))])]},Ve=e=>{const t=Array(256).fill(-1);for(let e=0;e<58;++e)t[Re.charCodeAt(e)]=e;const r=[];for(const i of e){let e=i;for(let i=0;i<r.length;++i){const n=(t[r[i]]<<8)+e;r[i]=Re.charCodeAt(n%58),e=n/58|0}for(;0!==e;)r.push(Re.charCodeAt(e%58)),e=e/58|0}for(const t of e){if(0!==t)break;r.push("1".charCodeAt(0))}return r.reverse(),String.fromCharCode(...r)},De=(e,t=[0])=>{let r=ve([...t,...e]);return r=[...t,...e,...r.slice(0,4)],Ve(r)},Be=(e,t,r=1)=>{const i=Ce(e);let n=i.slice(0,r),s=i.slice(r,-4),a=[...n,...s];return a=ve(a),i.slice(-4).forEach(((e,t)=>{if(e!==a[t])throw new Error("Invalid checksum")})),"hex"===t&&(n=Ne(n),s=Ne(s)),{prefix:n,data:s}};class Ue{bufs;length;constructor(e){this.bufs=void 0!==e?e:[],this.length=0;for(const e of this.bufs)this.length+=e.length}getLength(){return this.length}toArray(){const e=this.length,t=new Array(e);let r=0;for(const e of this.bufs)for(const i of e)t[r++]=i;return t}write(e){return this.bufs.push(e),this.length+=e.length,this}writeReverse(e){const t=new Array(e.length);for(let r=0;r<t.length;r++)t[r]=e[e.length-1-r];return this.bufs.push(t),this.length+=t.length,this}writeUInt8(e){const t=new Array(1);return t[0]=e,this.write(t),this}writeInt8(e){const t=new Array(1);return t[0]=255&e,this.write(t),this}writeUInt16BE(e){const t=[e>>8&255,255&e];return this.bufs.push(t),this.length+=2,this}writeInt16BE(e){return this.writeUInt16BE(65535&e)}writeUInt16LE(e){const t=[255&e,e>>8&255];return this.bufs.push(t),this.length+=2,this}writeInt16LE(e){return this.writeUInt16LE(65535&e)}writeUInt32BE(e){const t=[e>>24&255,e>>16&255,e>>8&255,255&e];return this.bufs.push(t),this.length+=4,this}writeInt32BE(e){return this.writeUInt32BE(e>>>0)}writeUInt32LE(e){const t=[255&e,e>>8&255,e>>16&255,e>>24&255];return this.bufs.push(t),this.length+=4,this}writeInt32LE(e){return this.writeUInt32LE(e>>>0)}writeUInt64BEBn(e){const t=e.toArray("be",8);return this.write(t),this}writeUInt64LEBn(e){const t=e.toArray("be",8);return this.writeReverse(t),this}writeUInt64LE(e){const t=new h(e).toArray("be",8);return this.writeReverse(t),this}writeVarIntNum(e){const t=Ue.varIntNum(e);return this.write(t),this}writeVarIntBn(e){const t=Ue.varIntBn(e);return this.write(t),this}static varIntNum(e){let t;if(e<0)return this.varIntBn(new h(e));if(e<253)t=[e];else if(e<65536)t=[253,255&e,e>>8&255];else if(e<4294967296)t=[254,255&e,e>>8&255,e>>16&255,e>>24&255];else{const r=4294967295&e,i=4294967295&Math.floor(e/4294967296);t=[255,255&r,r>>8&255,r>>16&255,r>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]}return t}static varIntBn(e){let t;if(e.isNeg()&&(e=e.add(qe)),e.ltn(253))t=[e.toNumber()];else if(e.ltn(65536)){const r=e.toNumber();t=[253,255&r,r>>8&255]}else if(e.lt(new h(4294967296))){const r=e.toNumber();t=[254,255&r,r>>8&255,r>>16&255,r>>24&255]}else{const r=new Ue;r.writeUInt8(255),r.writeUInt64LEBn(e),t=r.toArray()}return t}}class Ke{bin;pos;length;constructor(e=[],t=0){this.bin=e,this.pos=t,this.length=e.length}eof(){return this.pos>=this.length}read(e=this.length){const t=this.pos,r=this.pos+e;return this.pos=r,this.bin.slice(t,r)}readReverse(e=this.length){const t=new Array(e);for(let r=0;r<e;r++)t[r]=this.bin[this.pos+e-1-r];return this.pos+=e,t}readUInt8(){const e=this.bin[this.pos];return this.pos+=1,e}readInt8(){const e=this.bin[this.pos];return this.pos+=1,128&e?e-256:e}readUInt16BE(){const e=this.bin[this.pos]<<8|this.bin[this.pos+1];return this.pos+=2,e}readInt16BE(){const e=this.readUInt16BE();return 32768&e?e-65536:e}readUInt16LE(){const e=this.bin[this.pos]|this.bin[this.pos+1]<<8;return this.pos+=2,e}readInt16LE(){const e=this.readUInt16LE();return 32768&e?e-65536:e}readUInt32BE(){const e=16777216*this.bin[this.pos]+(this.bin[this.pos+1]<<16|this.bin[this.pos+2]<<8|this.bin[this.pos+3]);return this.pos+=4,e}readInt32BE(){const e=this.readUInt32BE();return 2147483648&e?e-4294967296:e}readUInt32LE(){const e=(this.bin[this.pos]|this.bin[this.pos+1]<<8|this.bin[this.pos+2]<<16|this.bin[this.pos+3]<<24)>>>0;return this.pos+=4,e}readInt32LE(){const e=this.readUInt32LE();return 2147483648&e?e-4294967296:e}readUInt64BEBn(){const e=this.bin.slice(this.pos,this.pos+8),t=new h(e);return this.pos=this.pos+8,t}readUInt64LEBn(){const e=this.readReverse(8);return new h(e)}readInt64LEBn(){const e=this.readReverse(8);let t=new h(e);return t.gte(He)&&(t=t.sub(qe)),t}readVarIntNum(e=!0){const t=this.readUInt8();let r;switch(t){case 253:return this.readUInt16LE();case 254:return this.readUInt32LE();case 255:if(r=e?this.readInt64LEBn():this.readUInt64LEBn(),r.lte(new h(2).pow(new h(53))))return r.toNumber();throw new Error("number too large to retain precision - use readVarIntBn");default:return t}}readVarInt(){switch(this.bin[this.pos]){case 253:return this.read(3);case 254:return this.read(5);case 255:return this.read(9);default:return this.read(1)}}readVarIntBn(){const e=this.readUInt8();switch(e){case 253:return new h(this.readUInt16LE());case 254:return new h(this.readUInt32LE());case 255:return this.readUInt64LEBn();default:return new h(e)}}}const Le=e=>{if(0===e.length)return e;const t=e[e.length-1];if(127&t)return e;if(1===e.length)return[];if(128&e[e.length-2])return e;for(let r=e.length-1;r>0;r--)if(0!==e[r-1])return 128&e[r-1]?(e[r]=t,e.slice(0,r+1)):(e[r-1]|=t,e.slice(0,r));return[]},He=new h(2).pow(new h(63)),qe=new h(2).pow(new h(64));class Me extends p{static red=new l("k256");static a=new h(0).toRed(Me.red);static b=new h(7).toRed(Me.red);static zero=new h(0).toRed(Me.red);x;y;inf;static fromDER(e){if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==64){if(6===e[0]){if(e[e.length-1]%2!=0)throw new Error("Point string value is wrong length")}else if(7===e[0]&&e[e.length-1]%2!=1)throw new Error("Point string value is wrong length");return new Me(e.slice(1,33),e.slice(33,65))}if((2===e[0]||3===e[0])&&e.length-1==32)return Me.fromX(e.slice(1,33),3===e[0]);throw new Error("Unknown point format")}static fromString(e){const t=Oe(e,"hex");return Me.fromDER(t)}static redSqrtOptimized(e){const t=Me.red.m.addn(1).iushrn(2);return e.redPow(t)}static fromX(e,t){function r(e,t){return(e%t+t)%t}function i(e,t,i){let n=BigInt(1);for(e=r(e,i);t>BigInt(0);)(t&BigInt(1))===BigInt(1)&&(n=r(n*e,i)),t>>=BigInt(1),e=r(e*e,i);return n}const n=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),s=BigInt(7);let a;if(e instanceof h)a=BigInt("0x"+e.toString(16));else if("string"==typeof e)a=BigInt("0x"+e);else if(Array.isArray(e))a=BigInt("0x"+Ne(e).padStart(64,"0"));else{if("number"!=typeof e)throw new Error("Invalid x-coordinate type");a=BigInt(e)}a=r(a,n);let o=function(e,t){const n=i(e,t+BigInt(1)>>BigInt(2),t);return r(n*n,t)===r(e,t)?n:null}(r(i(a,BigInt(3),n)+s,n),n);if(null===o)throw new Error("Invalid point");const c=o%BigInt(2)===BigInt(1);(t&&!c||!t&&c)&&(o=n-o);const d=new h(a.toString(16),16),u=new h(o.toString(16),16);return new Me(d,u)}static fromJSON(e,t){"string"==typeof e&&(e=JSON.parse(e));const r=new Me(e[0],e[1],t);if("object"!=typeof e[2])return r;const i=e=>new Me(e[0],e[1],t),n=e[2];return r.precomputed={beta:null,doubles:"object"==typeof n.doubles&&null!==n.doubles?{step:n.doubles.step,points:[r].concat(n.doubles.points.map(i))}:void 0,naf:"object"==typeof n.naf&&null!==n.naf?{wnd:n.naf.wnd,points:[r].concat(n.naf.points.map(i))}:void 0},r}constructor(e,t,r=!0){super("affine"),this.precomputed=null,null===e&&null===t?(this.x=null,this.y=null,this.inf=!0):(h.isBN(e)||(e=new h(e,16)),this.x=e,h.isBN(t)||(t=new h(t,16)),this.y=t,r&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),null===this.x.red&&(this.x=this.x.toRed(this.curve.red)),null===this.y.red&&(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}validate(){return this.curve.validate(this)}encode(e=!0,t){const r=this.curve.p.byteLength(),i=this.getX().toArray("be",r);let n;return n=e?[this.getY().isEven()?2:3].concat(i):[4].concat(i,this.getY().toArray("be",r)),"hex"!==t?n:Ne(n)}toString(){return this.encode(!0,"hex")}toJSON(){return null==this.precomputed?[this.x,this.y]:[this.x,this.y,"object"==typeof this.precomputed&&null!==this.precomputed?{doubles:null!=this.precomputed.doubles?{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)}:void 0,naf:null!=this.precomputed.naf?{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}:void 0}:void 0]}inspect(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+(this.x?.fromRed()?.toString(16,2)??"undefined")+" y: "+(this.y?.fromRed()?.toString(16,2)??"undefined")+">"}isInfinity(){return this.inf}add(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return new Me(new h(0),new h(0));if(0===this.x?.cmp(e.x??new h(0)))return new Me(new h(0),new h(0));let t=this.y?.redSub(e.y??new h(0))??new h(0);0!==t.cmpn(0)&&(t=t.redMul(this.x?.redSub(e.x??new h(0)).redInvm()??new h(1)));const r=t?.redSqr().redISub(this.x??new h(0)).redISub(e.x??new h(0)),i=(t??new h(1)).redMul((this.x??new h(0)).redSub(r??new h(0))).redISub(this.y??new h(0));return new Me(r??new h(0),i??new h(0))}dbl(){if(this.inf)return this;const e=(this.y??new h(0)).redAdd(this.y??new h(0));if(0===e.cmpn(0))return new Me(new h(0),new h(0));const t=this.curve.a,r=(this.x??new h(0)).redSqr(),i=e.redInvm(),n=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(i),s=n.redSqr().redISub((this.x??new h(0)).redAdd(this.x??new h(0))),a=n.redMul((this.x??new h(0)).redSub(s)).redISub(this.y??new h(0));return new Me(s,a)}getX(){return(this.x??new h(0)).fromRed()}getY(){return(this.y??new h(0)).fromRed()}mul(e){if(h.isBN(e)||(e=new h(e,16)),"function"==typeof BigInt){if(this.inf)return this;const t=0n,r=1n,i=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),n=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141");let s=BigInt("0x"+e.toString(16));const a=s<t;if(a&&(s=-s),s=(s%n+n)%n,s===t)return new Me(null,null);if(null===this.x||null===this.y)throw new Error("Point coordinates cannot be null");let o,c;this===this.curve.g?(o=Xe,c=Ge):(o=BigInt("0x"+this.x.fromRed().toString(16)),c=BigInt("0x"+this.y.fromRed().toString(16)));const d=(e,t)=>(e%t+t)%t,u=(e,t,r)=>d(e*t,r),l=(e,i)=>{let n=r,s=t,a=d(e,i),o=i;for(;a>r;){const e=o/a,t=s-n*e,r=o-a*e;s=n,n=t,o=a,a=r}return d(n,i)},f=et(s,{x:o,y:c});if(f.Z===t)return new Me(null,null);const p=l(f.Z,i),b=u(p,p,i),w=u(f.X,b,i),g=u(f.Y,u(b,p,i),i),m=new h(w.toString(16),16),y=new h(g.toString(16),16),v=new Me(m,y);return a?v.neg():v}return this.isInfinity()?this:this._hasDoubles(e)?this._fixedNafMul(e):this._endoWnafMulAdd([this],[e])}mulAdd(e,t,r){const i=[this,t],n=[e,r];return this._endoWnafMulAdd(i,n)}jmulAdd(e,t,r){const i=[this,t],n=[e,r];return this._endoWnafMulAdd(i,n,!0)}eq(e){return this===e||this.inf===e.inf&&(this.inf||0===(this.x??new h(0)).cmp(e.x??new h(0))&&0===(this.y??new h(0)).cmp(e.y??new h(0)))}neg(e){if(this.inf)return this;const t=new Me(this.x,(this.y??new h(0)).redNeg());if(!0===e&&null!=this.precomputed){const e=this.precomputed,r=e=>e.neg();t.precomputed={naf:null!=e.naf?{wnd:e.naf.wnd,points:e.naf.points.map(r)}:void 0,doubles:null!=e.doubles?{step:e.doubles.step,points:e.doubles.points.map((e=>e.neg()))}:void 0,beta:void 0}}return t}dblp(e){let t=this;for(let r=0;r<e;r++)t=t.dbl();return t}toJ(){return this.inf?new b(null,null,null):new b(this.x,this.y,this.curve.one)}_getBeta(){if("object"!=typeof this.curve.endo)return;const e=this.precomputed;if("object"==typeof e&&null!==e&&"object"==typeof e.beta&&null!==e.beta)return e.beta;const t=new Me((this.x??new h(0)).redMul(this.curve.endo.beta),this.y);if(null!=e){const r=this.curve,i=e=>{if(null===e.x)throw new Error("p.x is null");if(void 0===r.endo||null===r.endo)throw new Error("curve.endo is undefined");return new Me(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:null!=e.naf?{wnd:e.naf.wnd,points:e.naf.points.map(i)}:void 0,doubles:null!=e.doubles?{step:e.doubles.step,points:e.doubles.points.map(i)}:void 0}}return t}_fixedNafMul(e){if("object"!=typeof this.precomputed||null===this.precomputed)throw new Error("_fixedNafMul requires precomputed values for the point");const t=this._getDoubles(),r=this.curve.getNAF(e,1,this.curve._bitLength);let i=(1<<t.step+1)-(t.step%2==0?2:1);i/=3;const n=[];for(let e=0;e<r.length;e+=t.step){let i=0;for(let n=e+t.step-1;n>=e;n--)i=(i<<1)+r[n];n.push(i)}let s=new b(null,null,null),a=new b(null,null,null);for(let e=i;e>0;e--){for(let r=0;r<n.length;r++){const i=n[r];i===e?a=a.mixedAdd(t.points[r]):i===-e&&(a=a.mixedAdd(t.points[r].neg()))}s=s.add(a)}return s.toP()}_wnafMulAdd(e,t,r,i,n){const s=this.curve._wnafT1.map((e=>e.toNumber())),a=this.curve._wnafT2.map((()=>[])),o=this.curve._wnafT3.map((()=>[]));let c=0;for(let r=0;r<i;r++){const i=t[r]._getNAFPoints(e);s[r]=i.wnd,a[r]=i.points}for(let e=i-1;e>=1;e-=2){const i=e-1,n=e;if(1!==s[i]||1!==s[n]){o[i]=this.curve.getNAF(r[i],s[i],this.curve._bitLength),o[n]=this.curve.getNAF(r[n],s[n],this.curve._bitLength),c=Math.max(o[i].length,c),c=Math.max(o[n].length,c);continue}const d=[t[i],null,null,t[n]];0===(t[i].y??new h(0)).cmp(t[n].y??new h(0))?(d[1]=t[i].add(t[n]),d[2]=t[i].toJ().mixedAdd(t[n].neg())):0===(t[i].y??new h(0)).cmp((t[n].y??new h(0)).redNeg())?(d[1]=t[i].toJ().mixedAdd(t[n]),d[2]=t[i].add(t[n].neg())):(d[1]=t[i].toJ().mixedAdd(t[n]),d[2]=t[i].toJ().mixedAdd(t[n].neg()));const u=[-3,-1,-5,-7,0,7,5,1,3],l=this.curve.getJSF(r[i],r[n]);c=Math.max(l[0].length,c),o[i]=new Array(c),o[n]=new Array(c);for(let e=0;e<c;e++){const t=0|l[0][e],r=0|l[1][e];o[i][e]=u[3*(t+1)+(r+1)],o[n][e]=0,a[i]=d}}let d=new b(null,null,null);const u=this.curve._wnafT4;for(let e=c;e>=0;e--){let t=0;for(;e>=0;){let r=!0;for(let t=0;t<i;t++)u[t]=new h("number"==typeof o[t][e]?o[t][e]:0),u[t].isZero()||(r=!1);if(!r)break;t++,e--}if(e>=0&&t++,d=d.dblp(t),e<0)break;const r=new h(1),n=new h(2);for(let e=0;e<i;e++){const t=u[e];let i;0!==t.cmpn(0)&&(i=t.isNeg()?a[e][t.neg().sub(r).div(n).toNumber()].neg():a[e][t.sub(r).div(n).toNumber()],d="affine"===i.type?d.mixedAdd(i):d.add(i))}}for(let e=0;e<i;e++)a[e]=[];return!0===n?d:d.toP()}_endoWnafMulAdd(e,t,r){const i=new Array(2*e.length),n=new Array(2*e.length);let s;for(s=0;s<e.length;s++){const r=this.curve._endoSplit(t[s]);let a=e[s],o=a._getBeta()??new Me(new h(0),new h(0));0!==r.k1.negative&&(r.k1.ineg(),a=a.neg(!0)),0!==r.k2.negative&&(r.k2.ineg(),o=o.neg(!0)),i[2*s]=a,i[2*s+1]=o,n[2*s]=r.k1,n[2*s+1]=r.k2}const a=this._wnafMulAdd(1,i,n,2*s,r);for(let e=0;e<2*s;e++)i[e]=null,n[e]=null;return a}_hasDoubles(e){if(null==this.precomputed)return!1;const t=this.precomputed.doubles;return"object"==typeof t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)}_getDoubles(e,t){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.doubles&&null!==this.precomputed.doubles)return this.precomputed.doubles;const r=[this];let i=this;for(let n=0;n<(t??0);n+=e??1){for(let t=0;t<(e??1);t++)i=i.dbl();r.push(i)}return{step:e??1,points:r}}_getNAFPoints(e){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.naf&&null!==this.precomputed.naf)return this.precomputed.naf;const t=[this],r=(1<<e)-1,i=1===r?null:this.dbl();for(let e=1;e<r;e++)null!==i&&(t[e]=t[e-1].add(i));return{wnd:e,points:t}}}const $e=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,ze=(1n<<256n)-1n,We=(e,t)=>e>=t?e-t:$e-(t-e),je=(e,t)=>function(e){let t=e>>256n;return t=(e=(e&ze)+(t<<32n)+977n*t)>>256n,(e=(e&ze)+(t<<32n)+977n*t)>=$e&&(e-=$e),e}(e*t),Xe=BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Ge=BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"),Ye=new Map,Ze=e=>{const{X:t,Y:r,Z:i}=e;if(0n===r)return{X:0n,Y:1n,Z:0n};const n=je(r,r),s=je(4n,je(t,n)),a=je(3n,je(t,t)),o=We(je(a,a),je(2n,s));return{X:o,Y:We(je(a,We(s,o)),je(8n,je(n,n))),Z:je(2n,je(r,i))}},Je=(e,t)=>{if(0n===e.Z)return t;if(0n===t.Z)return e;const r=je(e.Z,e.Z),i=je(t.Z,t.Z),n=je(e.X,i),s=je(t.X,r),a=je(e.Y,je(i,t.Z)),o=je(t.Y,je(r,e.Z)),c=We(s,n),h=We(o,a);if(0n===c)return 0n===h?Ze(e):{X:0n,Y:1n,Z:0n};const d=je(c,c),u=je(c,d),l=je(n,d),f=We(We(je(h,h),u),je(2n,l));return{X:f,Y:We(je(h,We(l,f)),je(a,u)),Z:je(c,je(e.Z,t.Z))}},Qe=e=>0n===e.Z?e:{X:e.X,Y:$e-e.Y,Z:e.Z},et=(e,t,r=5)=>{const i=`${r}:${t.x.toString(16)}:${t.y.toString(16)}`;let n,s=Ye.get(i);if(void 0===s){const e=1<<r-1;s=new Array(e),n={X:t.x,Y:t.y,Z:1n},s[0]=n;const a=Ze(n);for(let t=1;t<e;t++)s[t]=Je(s[t-1],a);Ye.set(i,s)}else n=s[0];const a=[],o=1n<<BigInt(r),c=o>>1n;let h=e;for(;h>0n;)if(0n===(1n&h))a.push(0),h>>=1n;else{let e=h&o-1n;e>c&&(e-=o),a.push(Number(e)),h-=e,h>>=1n}let d={X:0n,Y:1n,Z:0n};for(let e=a.length-1;e>=0;e--){d=Ze(d);const t=a[e];if(0!==t){const e=Math.abs(t)>>1,r=t>0?s[e]:Qe(s[e]);d=Je(d,r)}}return d};let tt;class rt{p;red;redN;zero;one;two;g;n;a;b;tinv;zeroA;threeA;endo;_endoWnafT1;_endoWnafT2;_wnafT1;_wnafT2;_wnafT3;_wnafT4;_bitLength;static assert(e,t="Elliptic curve assertion failed"){if(!e)throw new Error(t)}getNAF(e,t,r){const i=new Array(Math.max(e.bitLength(),r)+1);i.fill(0);const n=1<<t+1,s=e.clone();for(let e=0;e<i.length;e++){let t;const r=s.andln(n-1);s.isOdd()?(t=r>(n>>1)-1?(n>>1)-r:r,s.isubn(t)):t=0,i[e]=t,s.iushrn(1)}return i}getJSF(e,t){const r=[[],[]];e=e.clone(),t=t.clone();let i=0,n=0;for(;e.cmpn(-i)>0||t.cmpn(-n)>0;){let s,a,o=e.andln(3)+i&3,c=t.andln(3)+n&3;if(3===o&&(o=-1),3===c&&(c=-1),1&o){const t=e.andln(7)+i&7;s=3!==t&&5!==t||2!==c?o:-o}else s=0;if(r[0].push(s),1&c){const e=t.andln(7)+n&7;a=3!==e&&5!==e||2!==o?c:-c}else a=0;r[1].push(a),2*i===s+1&&(i=1-i),2*n===a+1&&(n=1-n),e.iushrn(1),t.iushrn(1)}return r}static cachedProperty(e,t,r){const i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}}static parseBytes(e){return"string"==typeof e?Oe(e,"hex"):e}static intFromLE(e){return new h(e,"hex","le")}constructor(){if(void 0!==tt)return tt;tt=this;const e={prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",{doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}]};this.p=new h(e.p,16),this.red=new l(e.prime),this.zero=new h(0).toRed(this.red),this.one=new h(1).toRed(this.red),this.two=new h(2).toRed(this.red),this.n=new h(e.n,16),this.g=Me.fromJSON(e.g,e.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n.bitLength(),this.redN=this.n.toRed(this.red),this.a=new h(e.a,16).toRed(this.red),this.b=new h(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}_getEndomorphism(e){if(!this.zeroA||1!==this.p.modrn(3))return;let t,r,i;if(void 0!==e.beta)t=new h(e.beta,16).toRed(this.red);else{const e=this._getEndoRoots(this.p);if(null===e)throw new Error("Failed to get endomorphism roots for beta.");t=e[0].cmp(e[1])<0?e[0]:e[1],t=t.toRed(this.red)}if(void 0!==e.lambda)r=new h(e.lambda,16);else{const e=this._getEndoRoots(this.n);if(null===e)throw new Error("Failed to get endomorphism roots for lambda.");if(null==this.g)throw new Error("Curve generator point (g) is not defined.");const i=this.g.mul(e[0])?.x,n=null!=this.g.x?this.g.x.redMul(t):void 0;if(null!=i&&null!=n&&0===i.cmp(n))r=e[0];else{if(r=e[1],null==this.g)throw new Error("Curve generator point (g) is not defined.");const i=this.g.mul(r)?.x,n=null!=this.g.x?this.g.x.redMul(t):void 0;if(null==i||null==n)throw new Error("Lambda computation failed: g.mul(lambda).x or g.x.redMul(beta) is undefined.");rt.assert(0===i.cmp(n),"Lambda selection does not match computed beta.")}}return i="object"==typeof e.basis&&null!==e.basis?e.basis.map((function(e){return{a:new h(e.a,16),b:new h(e.b,16)}})):this._getEndoBasis(r),{beta:t,lambda:r,basis:i}}_getEndoRoots(e){const t=e===this.p?this.red:new f(e),r=new h(2).toRed(t).redInvm(),i=r.redNeg(),n=new h(3).toRed(t).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]}_getEndoBasis(e){const t=this.n.ushrn(Math.floor(this.n.bitLength()/2));let r,i,n,s,a,o,c=e,d=this.n.clone(),u=new h(1),l=new h(0),f=new h(0),p=new h(1),b=new h(0),w=0,g=new h(0),m=new h(0);for(;0!==c.cmpn(0);){const e=d.div(c);g=d.sub(e.mul(c)),m=f.sub(e.mul(u));const a=p.sub(e.mul(l));if(void 0===n&&g.cmp(t)<0)r=b.neg(),i=u,n=g.neg(),s=m;else if(void 0!==n&&2==++w)break;b=g,d=c,c=g,f=u,u=m,p=l,l=a}if(void 0===r||void 0===i||void 0===n||void 0===s)throw new Error("Failed to compute Endo Basis values");a=g.neg(),o=m;const y=n.sqr().add(s.sqr());return a.sqr().add(o.sqr()).cmp(y)>=0&&(a=r,o=i),0!==n.negative&&(n=n.neg(),s=s.neg()),0!==a.negative&&(a=a.neg(),o=o.neg()),[{a:n,b:s},{a,b:o}]}_endoSplit(e){if(null==this.endo)throw new Error("Endomorphism is not defined.");const t=this.endo.basis,r=t[0],i=t[1],n=i.b.mul(e).divRound(this.n),s=r.b.neg().mul(e).divRound(this.n),a=n.mul(r.a),o=s.mul(i.a),c=n.mul(r.b),h=s.mul(i.b);return{k1:e.sub(a).sub(o),k2:c.add(h).neg()}}validate(e){if(e.inf)return!0;const t=e.x,r=e.y;if(null===t||null===r)throw new Error("Point coordinates cannot be null");const i=this.a.redMul(t),n=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(n).cmpn(0)}}class it{r;s;static fromDER(e,t){const r=(e,t)=>{const r=e[t.place++];if(128&r)throw new Error("Invalid DER entity length");return r};e=Oe(e,t);const i=new class{place;constructor(){this.place=0}};if(48!==e[i.place++])throw new Error("Signature DER must start with 0x30");if(r(e,i)+i.place!==e.length)throw new Error("Signature DER invalid");if(2!==e[i.place++])throw new Error("Signature DER invalid");const n=r(e,i);let s=e.slice(i.place,n+i.place);if(i.place+=n,2!==e[i.place++])throw new Error("Signature DER invalid");const a=r(e,i);if(e.length!==a+i.place)throw new Error("Invalid R-length in signature DER");let o=e.slice(i.place,a+i.place);if(0===s[0]){if(!(128&s[1]))throw new Error("Invalid R-value in signature DER");s=s.slice(1)}if(0===o[0]){if(!(128&o[1]))throw new Error("Invalid S-value in signature DER");o=o.slice(1)}return new it(new h(s),new h(o))}static fromCompact(e,t){if(65!==(e=Oe(e,t)).length)throw new Error("Invalid Compact Signature");const r=e[0];if(r<27||r>=35)throw new Error("Invalid Compact Byte");return new it(new h(e.slice(1,33)),new h(e.slice(33,65)))}constructor(e,t){this.r=e,this.s=t}verify(e,t,r){const i=new h(me(e,r),16);return ot(i,this,t)}toString(e){return this.toDER(e)}toDER(e){const t=(e,t)=>{if(!(t<128))throw new Error("len must be < 0x80");e.push(t)},r=e=>{let t=0;const r=e.length-1;for(;0===e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)};let i=this.r.toArray(),n=this.s.toArray();for(128&i[0]&&(i=[0].concat(i)),128&n[0]&&(n=[0].concat(n)),i=r(i),n=r(n);0===n[0]&&!(128&n[1]);)n=n.slice(1);let s=[2];t(s,i.length),s=s.concat(i),s.push(2),t(s,n.length);const a=s.concat(n);let o=[48];return t(o,a.length),o=o.concat(a),"hex"===e?Ne(o):"base64"===e?Fe(o):o}toCompact(e,t,r){if(e<0||e>3)throw new Error("Invalid recovery param");if("boolean"!=typeof t)throw new Error("Invalid compressed param");let i=27+e;t&&(i+=4);let n=[i];return n=n.concat(this.r.toArray("be",32)),n=n.concat(this.s.toArray("be",32)),"hex"===r?Ne(n):"base64"===r?Fe(n):n}RecoverPublicKey(e,t){const r=this.r,i=this.s,n=!!(1&e),s=e>>1,a=new rt,o=a.n,c=a.g,h=0!==s?r.add(o):r,d=Me.fromX(h,n);if(!d.mul(o).isInfinity())throw new Error("nR is not at infinity");const u=t.neg().umod(o),l=r.invm(o),f=l.mul(i).umod(o),p=l.mul(u).umod(o),b=c.mul(p).add(d.mul(f)),w=new ct(b);return w.validate(),w}CalculateRecoveryFactor(e,t){for(let r=0;r<4;r++){let i;try{i=this.RecoverPublicKey(r,t)}catch{continue}if(e.eq(i))return r}throw new Error("Unable to find valid recovery factor")}}class nt{K;V;constructor(e,t){if(e=Oe(e,"hex"),t=Oe(t,"hex"),e.length<32)throw new Error("Not enough entropy. Minimum is 256 bits");const r=e.concat(t);this.K=new Array(32),this.V=new Array(32);for(let e=0;e<32;e++)this.K[e]=0,this.V[e]=1;this.update(r)}hmac(){return new fe(this.K)}update(e){let t=this.hmac().update(this.V).update([0]);void 0!==e&&(t=t.update(e)),this.K=t.digest(),this.V=this.hmac().update(this.V).digest(),void 0!==e&&(this.K=this.hmac().update(this.V).update([1]).update(e).digest(),this.V=this.hmac().update(this.V).digest())}generate(e){let t=[];for(;t.length<e;)this.V=this.hmac().update(this.V).digest(),t=t.concat(this.V);const r=t.slice(0,e);return this.update(),Ne(r)}}function st(e,t,r=new rt){const i=8*e.byteLength()-r.n.bitLength();return i>0&&e.iushrn(i),null===t&&e.cmp(r.n)>=0?e.sub(r.n):e}const at=(e,t,r=!1,i)=>{const n=new rt;e=st(e);const s=n.n.byteLength(),a=t.toArray("be",s),o=e.toArray("be",s),c=new nt(a,o),d=n.n.subn(1);for(let a=0;;a++){let o="function"==typeof i?i(a):h.isBN(i)?i:new h(c.generate(s),16);if(null==o)throw new Error("k is undefined");if(o=st(o,!0),o.cmpn(1)<=0||o.cmp(d)>=0){if(h.isBN(i))throw new Error("Invalid fixed custom K value (must be more than 1 and less than N-1)");continue}const u=n.g.mul(o);if(u.isInfinity()){if(h.isBN(i))throw new Error("Invalid fixed custom K value (must not create a point at infinity when multiplied by the generator point)");continue}const l=u.getX().umod(n.n);if(0===l.cmpn(0)){if(h.isBN(i))throw new Error("Invalid fixed custom K value (when multiplied by G, the resulting x coordinate mod N must not be zero)");continue}let f=o.invm(n.n).mul(l.mul(t).iadd(e));if(f=f.umod(n.n),0!==f.cmpn(0))return r&&f.cmp(n.n.ushrn(1))>0&&(f=n.n.sub(f)),new it(l,f);if(h.isBN(i))throw new Error("Invalid fixed custom K value (when used with the key, it cannot create a zero value for S)")}},ot=(e,t,r)=>{const i=BigInt(0),n=BigInt(1),s=BigInt(2),a=BigInt(3),o=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F"),c=BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"),h={x:BigInt("0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798"),y:BigInt("0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8")},d=(e,t)=>(e%t+t)%t,u=(e,t)=>{let[r,s]=[e,t],[a,o]=[BigInt(1),BigInt(0)];for(;s!==i;){const e=r/s;[r,s]=[s,r-e*s],[a,o]=[o,a-e*o]}return r>n?i:d(a,t)},l=(e,t,r)=>d(e*t,r),f=(e,t,r)=>d(e-t,r),p=BigInt(4),b=BigInt(8),w=e=>{const{X:t,Y:r,Z:c}=e;if(r===i)return{X:i,Y:n,Z:i};const h=l(r,r,o),d=l(p,l(t,h,o),o),u=l(a,l(t,t,o),o),w=f(l(u,u,o),l(s,d,o),o);return{X:w,Y:f(l(u,f(d,w,o),o),l(b,l(h,h,o),o),o),Z:l(s,l(r,c,o),o)}},g=(e,t)=>{if(e.Z===i)return t;if(t.Z===i)return e;const r=l(e.Z,e.Z,o),a=l(t.Z,t.Z,o),c=l(e.X,a,o),h=l(t.X,r,o),d=l(e.Y,l(a,t.Z,o),o),u=l(t.Y,l(r,e.Z,o),o),p=f(h,c,o),b=f(u,d,o);if(p===i)return b===i?w(e):{X:i,Y:n,Z:i};const g=l(p,p,o),m=l(p,g,o),y=l(c,g,o),v=f(f(l(b,b,o),m,o),l(s,y,o),o);return{X:v,Y:f(l(b,f(y,v,o),o),l(d,m,o),o),Z:l(p,l(e.Z,t.Z,o),o)}},m=(e,t)=>{const r={X:t.x,Y:t.y,Z:n};let s={X:i,Y:n,Z:i};const a=e.toString(2);for(let e=0;e<a.length;e++)s=w(s),"1"===a[e]&&(s=g(s,r));return s},y=BigInt("0x"+e.toString(16));if(null==r.x||null==r.y)throw new Error("Invalid public key: missing coordinates.");return((e,t,r)=>{const{r:n,s}=r,a=e;if(n<=i||n>=c||s<=i||s>=c)return!1;const f=u(s,c);if(f===i)return!1;const p=l(a,f,c),b=l(n,f,c),w=m(p,h),y=m(b,t),v=g(w,y);if(v.Z===i)return!1;const I=u(v.Z,o);if(I===i)return!1;const k=l(I,I,o),S=l(v.X,k,o);return d(S,c)===n})(y,{x:BigInt("0x"+r.x.toString(16)),y:BigInt("0x"+r.y.toString(16))},{r:BigInt("0x"+t.r.toString(16)),s:BigInt("0x"+t.s.toString(16))})};class ct extends Me{static fromPrivateKey(e){const t=(new rt).g.mul(e);return new ct(t.x,t.y)}static fromString(e){const t=Me.fromString(e);return new ct(t.x,t.y)}static fromDER(e){const t=Me.fromDER(e);return new ct(t.x,t.y)}constructor(e,t=null,r=!0){if(e instanceof Me)super(e.getX(),e.getY());else{if(null===t&&r&&"string"==typeof e&&(66===e.length||130===e.length))throw new Error('You are using the "new PublicKey()" constructor with a DER hex string. You need to use "PublicKey.fromString()" instead.');super(e,t,r)}}deriveSharedSecret(e){if(!this.validate())throw new Error("Public key not valid for ECDH secret derivation");return this.mul(e)}verify(e,t,r){const i=new h(me(e,r),16);return ot(i,t,this)}toDER(e){return"hex"===e?this.encode(!0,e):this.encode(!0)}toHash(e){const t=Ie(this.encode(!0));return"hex"===e?Ne(t):t}toAddress(e=[0]){if("string"==typeof e)if("testnet"===e||"test"===e)e=[111];else{if("mainnet"!==e&&"main"!==e)throw new Error(`Invalid prefix ${e}`);e=[0]}return De(this.toHash(),e)}deriveChild(e,t,r,i){let n;if("function"==typeof i){const t=i(e,this);void 0!==t?n=t:(n=this.deriveSharedSecret(e),"function"==typeof r&&r(e,this,n))}else n=this.deriveSharedSecret(e);const s=Oe(t,"utf8"),a=ke(n.encode(!0),s),o=(new rt).g.mul(new h(a)),c=this.add(o);return new ct(c.x,c.y)}static fromMsgHashAndCompactSignature(e,t,r){const i=Oe(t,r);if(65!==i.length)throw new Error("Invalid Compact Signature");const n=i[0];if(n<27||n>=35)throw new Error("Invalid Compact Byte");let s=i[0]-27;return s>3&&(s-=4),new it(new h(i.slice(1,33)),new h(i.slice(33,65))).RecoverPublicKey(s,e)}}class ht{_rand;constructor(){const e=()=>{throw new Error("No secure random number generator is available in this environment.")};if(this._rand=e,"object"==typeof self)self.crypto?.getRandomValues?this._rand=e=>{const t=new Uint8Array(e);return self.crypto.getRandomValues(t),[...t]}:this._rand=e;else try{const e=require("crypto");"function"==typeof e.randomBytes&&(this._rand=t=>[...e.randomBytes(t)])}catch{this._rand=e}}generate(e){return this._rand(e)}}let dt=null;const ut=e=>(null==dt&&(dt=new ht),dt.generate(e));class lt{x;y;constructor(e,t){const r=(new rt).p;this.x=e.umod(r),this.y=t.umod(r)}toString(){return Ve(this.x.toArray())+"."+Ve(this.y.toArray())}static fromString(e){const[t,r]=e.split(".");return new lt(new h(Ce(t)),new h(Ce(r)))}}class ft{points;threshold;constructor(e,t){this.points=e,this.threshold=t??e.length}static fromPrivateKey(e,t){const r=(new rt).p,i=[new lt(new h(0),new h(e.toArray()))];for(let e=1;e<t;e++){const e=new h(ut(32)).umod(r),t=new h(ut(32)).umod(r);i.push(new lt(e,t))}return new ft(i)}valueAt(e){const t=(new rt).p;let r=new h(0);for(let i=0;i<this.threshold;i++){let n=this.points[i].y;for(let r=0;r<this.threshold;r++)if(i!==r){const s=this.points[r].x,a=this.points[i].x,o=e.sub(s).umod(t),c=a.sub(s).umod(t).invm(t),h=o.mul(c).umod(t);n=n.mul(h).umod(t)}r=r.add(n).umod(t)}return r}}class pt{points;threshold;integrity;constructor(e,t,r){this.points=e,this.threshold=t,this.integrity=r}static fromBackupFormat(e){let t=0,r="";const i=e.map(((e,i)=>{const n=e.split(".");if(4!==n.length)throw new Error("Invalid share format in share "+i.toString()+'. Expected format: "x.y.t.i" - received '+e);const[s,a,o,c]=n;if(void 0===o)throw new Error("Threshold not found in share "+i.toString());if(void 0===c)throw new Error("Integrity not found in share "+i.toString());const h=parseInt(o);if(0!==i&&t!==h)throw new Error("Threshold mismatch in share "+i.toString());if(0!==i&&r!==c)throw new Error("Integrity mismatch in share "+i.toString());return t=h,r=c,lt.fromString([s,a].join("."))}));return new pt(i,t,r)}toBackupFormat(){return this.points.map((e=>e.toString()+"."+this.threshold.toString()+"."+this.integrity))}}class bt extends h{static fromRandom(){return new bt(ut(32))}static fromString(e,t="hex"){return new bt(super.fromString(e,t).toArray())}static fromHex(e){return new bt(super.fromHex(e,"big"))}static fromWif(e,t=1){const r=Be(e,void 0,t);if(33!==r.data.length)throw new Error("Invalid WIF length");if(1!==r.data[32])throw new Error("Invalid WIF padding");return new bt(r.data.slice(0,32))}constructor(e=0,t=10,r="be",i="apply"){if(e instanceof h?(super(),e.copy(this)):super(e,t,r),"nocheck"!==i){const e=this.checkInField();if(!e.inField){if("error"===i)throw new Error("Input is out of field");h.move(this,e.modN)}}}checkInField(){const e=new rt,t=this.mod(e.n);return{inField:0===this.cmp(t),modN:t}}isValid(){return this.checkInField().inField}sign(e,t,r=!0,i){const n=new h(me(e,t),16);return at(n,this,r,i)}verify(e,t,r){const i=new h(me(e,r),16);return ot(i,t,this.toPublicKey())}toPublicKey(){const e=(new rt).g.mul(this);return new ct(e.x,e.y)}toWif(e=[128]){if(!this.isValid())throw new Error("Value is out of field");return De([...this.toArray("be",32),1],e)}toAddress(e=[0]){return this.toPublicKey().toAddress(e)}toHex(){return super.toHex(32)}toString(e="hex",t=64){return super.toString(e,t)}deriveSharedSecret(e){if(!e.validate())throw new Error("Public key not valid for ECDH secret derivation");return e.mul(this)}deriveChild(e,t,r,i){let n;if("function"==typeof i){const t=i(this,e);void 0!==t?n=t:(n=this.deriveSharedSecret(e),"function"==typeof r&&r(this,e,n))}else n=this.deriveSharedSecret(e);const s=Oe(t,"utf8"),a=ke(n.encode(!0),s),o=new rt;return new bt(this.add(new h(a)).mod(o.n).toArray())}toKeyShares(e,t){if("number"!=typeof e||"number"!=typeof t)throw new Error("threshold and totalShares must be numbers");if(e<2)throw new Error("threshold must be at least 2");if(t<2)throw new Error("totalShares must be at least 2");if(e>t)throw new Error("threshold should be less than or equal to totalShares");const r=ft.fromPrivateKey(this,e),i=[];for(let e=0;e<t;e++){const e=new h(bt.fromRandom().toArray()),t=r.valueAt(e);i.push(new lt(e,t))}const n=this.toPublicKey().toHash("hex").slice(0,8);return new pt(i,e,n)}toBackupShares(e,t){return this.toKeyShares(e,t).toBackupFormat()}static fromBackupShares(e){return bt.fromKeyShares(pt.fromBackupFormat(e))}static fromKeyShares(e){const{points:t,threshold:r,integrity:i}=e;if(r<2)throw new Error("threshold must be at least 2");if(t.length<r)throw new Error(`At least ${r} shares are required to reconstruct the private key`);for(let e=0;e<r;e++)for(let i=e+1;i<r;i++)if(t[e].x.eq(t[i].x))throw new Error("Duplicate share detected, each must be unique.");const n=new ft(t,r),s=new bt(n.valueAt(new h(0)).toArray());if(s.toPublicKey().toHash("hex").slice(0,8)!==i)throw new Error("Integrity hash mismatch");return s}}const wt=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),gt=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]].map((e=>new Uint8Array(e))),mt=new Uint8Array(256),yt=new Uint8Array(256);for(let e=0;e<256;e++){const t=255&(e<<1^(128&e?27:0));mt[e]=t,yt[e]=t^e}function vt(e,t,r){for(let i=0;i<4;i++){const n=t[r+i];for(let t=0;t<4;t++)e[t][i]^=n[t]}}function It(e){for(let t=0;t<4;t++)for(let r=0;r<4;r++)e[t][r]=wt[e[t][r]]}function kt(e){for(let t=0;t<4;t++)e[t]=wt[e[t]]}function St(e){const t=e[0];e[0]=e[1],e[1]=e[2],e[2]=e[3],e[3]=t}function Et(e){let t=e[1][0];e[1][0]=e[1][1],e[1][1]=e[1][2],e[1][2]=e[1][3],e[1][3]=t,t=e[2][0];const r=e[2][1];e[2][0]=e[2][2],e[2][1]=e[2][3],e[2][2]=t,e[2][3]=r,t=e[3][3],e[3][3]=e[3][2],e[3][2]=e[3][1],e[3][1]=e[3][0],e[3][0]=t}function Pt(e){for(let t=0;t<4;t++){const r=e[0][t],i=e[1][t],n=e[2][t],s=e[3][t];e[0][t]=mt[r]^yt[i]^n^s,e[1][t]=r^mt[i]^yt[n]^s,e[2][t]=r^i^mt[n]^yt[s],e[3][t]=yt[r]^i^n^mt[s]}}function Nt(e,t){let r,i,n,s;const a=[[],[],[],[]],o=[],c=Array.from(t);if(c.length<=16){for(;c.length<16;)c.unshift(0);s=11}else if(c.length<=24){for(;c.length<24;)c.unshift(0);s=13}else{if(!(t.length<=32))throw new Error("Illegal key length: "+String(t.length));for(;c.length<32;)c.unshift(0);s=15}const h=function(e,t){const r=t.length/4,i=[];for(let e=0;e<t.length;e++)e%4==0&&i.push([]),i[e>>2].push(t[e]);for(let t=r;t<4*e;t++){i[t]=[];const e=i[t-1].slice();if(t%r==0){St(e),kt(e);const i=gt[t/r];for(let t=0;t<4;t++)e[t]^=i[t]}else r>6&&t%r==4&&kt(e);for(let n=0;n<4;n++)i[t][n]=i[t-r][n]^e[n]}return i}(s,c);for(let t=0;t<4;t++)a[0][t]=e[4*t],a[1][t]=e[4*t+1],a[2][t]=e[4*t+2],a[3][t]=e[4*t+3];for(vt(a,h,0),n=1;n<s;n++)It(a),Et(a),n+1<s&&Pt(a),vt(a,h,4*n);for(r=0;r<4;r++)for(i=0;i<4;i++)o.push(a[i][r]);return o}const Ot=function(e){return[(4278190080&e)>>>24,(16711680&e)>>16,(65280&e)>>8,255&e]},_t=function(e){return new Array(e).fill(0)},At=[225].concat(_t(15)),xt=function(e,t){for(let r=0;r<e.length;r++)e[r]^=t[r]},Tt=function(e){let t,r=0,i=0;for(t=0;t<e.length;t++)i=r,r=1&e[t],e[t]=e[t]>>1,0!==i&&(e[t]=128|e[t]);return e},Ft=function(e,t){const r=t.slice(),i=_t(16);for(let t=0;t<16;t++)for(let n=7;n>=0;n--)e[t]&1<<n&&xt(i,r),1&r[15]?(Tt(r),xt(r,At)):Tt(r);return i},Rt=function(e){let t;const r=e.slice();for(t=15;11!==t&&(r[t]=r[t]+1,256===r[t]);t--)r[t]=0;return r};function Ct(e,t){let r=_t(16);for(let i=0;i<e.length;i+=16){const n=r.slice();for(let t=0;t<16;t++)n[t]^=e[i+t]??0;r=Ft(n,t)}return r}function Vt(e,t,r){if(0===e.length)return[];const i=new Array(e.length);let n=t,s=0;const a=Math.ceil(e.length/16);for(let t=0;t<a;t++){const o=Nt(n,r),c=Math.min(16,e.length-s);for(let t=0;t<c;t++)i[s]=e[s]^o[t],s++;t+1<a&&(n=Rt(n))}return i}class Dt extends h{static fromRandom(){return new Dt(ut(32))}encrypt(e,t){const r=ut(32);e=Oe(e,t);const{result:i,authenticationTag:n}=function(e,t,r,i){let n,s;const a=Nt(_t(16),i);n=[...r],12===r.length?n=n.concat(_t(3)).concat([1]):(r.length%16!=0&&(n=n.concat(_t(16-r.length%16))),n=n.concat(_t(8)),n=Ct(n.concat(_t(4)).concat(Ot(8*r.length)),a));const o=Vt(e,Rt(n),i);return s=t.slice(),0===t.length?s=s.concat(_t(16)):t.length%16!=0&&(s=s.concat(_t(16-t.length%16))),s=s.concat(o),0===o.length?s=s.concat(_t(16)):o.length%16!=0&&(s=s.concat(_t(16-o.length%16))),s=s.concat(_t(4)).concat(Ot(8*t.length)).concat(_t(4)).concat(Ot(8*o.length)),{result:o,authenticationTag:Vt(Ct(s,a),n,i)}}(e,[],r,this.toArray("be",32));return Te([...r,...i,...n],t)}decrypt(e,t){const r=(e=Oe(e,t)).slice(0,32),i=e.slice(32),n=i.slice(-16),s=function(e,t,r,i,n){let s,a;const o=Nt(_t(16),n);s=[...r],12===r.length?s=s.concat(_t(3)).concat([1]):(r.length%16!=0&&(s=s.concat(_t(16-r.length%16))),s=s.concat(_t(8)),s=Ct(s.concat(_t(4)).concat(Ot(8*r.length)),o));const c=Vt(e,Rt(s),n);return a=t.slice(),0===t.length?a=a.concat(_t(16)):t.length%16!=0&&(a=a.concat(_t(16-t.length%16))),a=a.concat(e),0===e.length?a=a.concat(_t(16)):e.length%16!=0&&(a=a.concat(_t(16-e.length%16))),a=a.concat(_t(4)).concat(Ot(8*t.length)).concat(_t(4)).concat(Ot(8*e.length)),Vt(Ct(a,o),s,n).join()!==i.join()?null:c}(i.slice(0,-16),[],r,n,this.toArray());if(null===s)throw new Error("Decryption failed!");return Te(s,t)}}class Bt extends it{static SIGHASH_ALL=1;static SIGHASH_NONE=2;static SIGHASH_SINGLE=3;static SIGHASH_FORKID=64;static SIGHASH_ANYONECANPAY=128;scope;static format(e){const t={sourceTXID:e.sourceTXID,sourceOutputIndex:e.sourceOutputIndex,sequence:e.inputSequence},r=[...e.otherInputs];function i(t){const r=new Ue;if(void 0===t)for(const t of e.outputs){const e=t.satoshis??0;r.writeUInt64LE(e);const i=t.lockingScript?.toBinary()??[];r.writeVarIntNum(i.length),r.write(i)}else{const i=e.outputs[t];if(void 0===i)throw new Error(`Output at index ${t} does not exist`);const n=i.satoshis??0;r.writeUInt64LE(n);const s=i.lockingScript?.toBinary()??[];r.writeVarIntNum(s.length),r.write(s)}const i=r.toArray();return ve(i)}r.splice(e.inputIndex,0,t);let n=new Array(32).fill(0),s=new Array(32).fill(0),a=new Array(32).fill(0);e.scope&Bt.SIGHASH_ANYONECANPAY||(n=(()=>{const e=new Ue;for(const t of r){if(void 0===t.sourceTXID){if(null==t.sourceTransaction)throw new Error("Missing sourceTransaction for input");e.write(t.sourceTransaction.hash())}else e.writeReverse(Oe(t.sourceTXID,"hex"));e.writeUInt32LE(t.sourceOutputIndex)}const t=e.toArray();return ve(t)})()),e.scope&Bt.SIGHASH_ANYONECANPAY||(31&e.scope)===Bt.SIGHASH_SINGLE||(31&e.scope)===Bt.SIGHASH_NONE||(s=(()=>{const e=new Ue;for(const t of r){const r=t.sequence??4294967295;e.writeUInt32LE(r)}const t=e.toArray();return ve(t)})()),(31&e.scope)!==Bt.SIGHASH_SINGLE&&(31&e.scope)!==Bt.SIGHASH_NONE?a=i():(31&e.scope)===Bt.SIGHASH_SINGLE&&e.inputIndex<e.outputs.length&&(a=i(e.inputIndex));const o=new Ue;o.writeInt32LE(e.transactionVersion),o.write(n),o.write(s),o.writeReverse(Oe(e.sourceTXID,"hex")),o.writeUInt32LE(e.sourceOutputIndex);const c=e.subscript.toBinary();o.writeVarIntNum(c.length),o.write(c),o.writeUInt64LE(e.sourceSatoshis);const h=t.sequence;return o.writeUInt32LE(h),o.write(a),o.writeUInt32LE(e.lockTime),o.writeUInt32LE(e.scope>>>0),o.toArray()}static fromChecksigFormat(e){if(0===e.length){const e=new h(1),t=new h(1);return new Bt(e,t,1)}const t=e[e.length-1],r=e.slice(0,e.length-1),i=it.fromDER(r);return new Bt(i.r,i.s,t)}constructor(e,t,r){super(e,t),this.scope=r}hasLowS(){return!this.s.ltn(1)&&!this.s.gt(new h("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex"))}toChecksigFormat(){return[...this.toDER(),this.scope]}}class Ut{curve;constructor(){this.curve=new rt}generateProof(e,t,r,i){const n=bt.fromRandom(),s=n.toPublicKey(),a=r.mul(n),o=this.computeChallenge(t,r,i,a,s);return{R:s,SPrime:a,z:n.add(o.mul(e)).umod(this.curve.n)}}verifyProof(e,t,r,i){const{R:n,SPrime:s,z:a}=i,o=this.computeChallenge(e,t,r,s,n),c=this.curve.g.mul(a),h=n.add(e.mul(o));if(!c.eq(h))return!1;const d=t.mul(a),u=s.add(r.mul(o));return!!d.eq(u)}computeChallenge(e,t,r,i,n){const s=[...e.encode(!0),...t.encode(!0),...r.encode(!0),...i.encode(!0),...n.encode(!0)],a=me(s);return new h(a).umod(this.curve.n)}}const Kt={OP_FALSE:0,OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_SPLIT:127,OP_LEFT:128,OP_NUM2BIN:128,OP_RIGHT:129,OP_BIN2NUM:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_NOP1:176,OP_NOP2:177,OP_NOP3:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_NOP11:186,OP_NOP12:187,OP_NOP13:188,OP_NOP14:189,OP_NOP15:190,OP_NOP16:191,OP_NOP17:192,OP_NOP18:193,OP_NOP19:194,OP_NOP20:195,OP_NOP21:196,OP_NOP22:197,OP_NOP23:198,OP_NOP24:199,OP_NOP25:200,OP_NOP26:201,OP_NOP27:202,OP_NOP28:203,OP_NOP29:204,OP_NOP30:205,OP_NOP31:206,OP_NOP32:207,OP_NOP33:208,OP_NOP34:209,OP_NOP35:210,OP_NOP36:211,OP_NOP37:212,OP_NOP38:213,OP_NOP39:214,OP_NOP40:215,OP_NOP41:216,OP_NOP42:217,OP_NOP43:218,OP_NOP44:219,OP_NOP45:220,OP_NOP46:221,OP_NOP47:222,OP_NOP48:223,OP_NOP49:224,OP_NOP50:225,OP_NOP51:226,OP_NOP52:227,OP_NOP53:228,OP_NOP54:229,OP_NOP55:230,OP_NOP56:231,OP_NOP57:232,OP_NOP58:233,OP_NOP59:234,OP_NOP60:235,OP_NOP61:236,OP_NOP62:237,OP_NOP63:238,OP_NOP64:239,OP_NOP65:240,OP_NOP66:241,OP_NOP67:242,OP_NOP68:243,OP_NOP69:244,OP_NOP70:245,OP_NOP71:246,OP_NOP72:247,OP_NOP73:248,OP_NOP77:252,OP_SMALLDATA:249,OP_SMALLINTEGER:250,OP_PUBKEYS:251,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255};for(const e in Kt)Kt[Kt[e]]=e;const Lt=Kt;class Ht{chunks;static fromASM(e){const t=[],r=e.split(" ");let i=0;for(;i<r.length;){const e=r[i];let n,s=0;if(e.startsWith("OP_")&&void 0!==Lt[e]&&(n=e,s=Lt[e]),"0"===e)s=0,t.push({op:s}),i+=1;else if("-1"===e)s=Lt.OP_1NEGATE,t.push({op:s}),i+=1;else if(void 0===n){let e=r[i];e.length%2!=0&&(e="0"+e);const n=Oe(e,"hex");if(Te(n,"hex")!==e)throw new Error("invalid hex string in script");const a=n.length;a>=0&&a<Lt.OP_PUSHDATA1?s=a:a<Math.pow(2,8)?s=Lt.OP_PUSHDATA1:a<Math.pow(2,16)?s=Lt.OP_PUSHDATA2:a<Math.pow(2,32)&&(s=Lt.OP_PUSHDATA4),t.push({data:n,op:s}),i+=1}else s===Lt.OP_PUSHDATA1||s===Lt.OP_PUSHDATA2||s===Lt.OP_PUSHDATA4?(t.push({data:Oe(r[i+2],"hex"),op:s}),i+=3):(t.push({op:s}),i+=1)}return new Ht(t)}static fromHex(e){if(0===e.length)return Ht.fromBinary([]);if(e.length%2!=0)throw new Error("There is an uneven number of characters in the string which suggests it is not hex encoded.");if(!/^[0-9a-fA-F]+$/.test(e))throw new Error("Some elements in this string are not hex encoded.");return Ht.fromBinary(Oe(e,"hex"))}static fromBinary(e){e=[...e];const t=[];let r=0;const i=new Ke(e);for(;!i.eof();){const e=i.readUInt8();if(e===Lt.OP_RETURN&&0===r){t.push({op:e,data:i.read()});break}e===Lt.OP_IF||e===Lt.OP_NOTIF||e===Lt.OP_VERIF||e===Lt.OP_VERNOTIF?r++:e===Lt.OP_ENDIF&&r--;let n=0,s=[];if(e>0&&e<Lt.OP_PUSHDATA1)n=e,t.push({data:i.read(n),op:e});else if(e===Lt.OP_PUSHDATA1){try{n=i.readUInt8(),s=i.read(n)}catch{i.read()}t.push({data:s,op:e})}else if(e===Lt.OP_PUSHDATA2){try{n=i.readUInt16LE(),s=i.read(n)}catch{i.read()}t.push({data:s,op:e})}else if(e===Lt.OP_PUSHDATA4){try{n=i.readUInt32LE(),s=i.read(n)}catch{i.read()}t.push({data:s,op:e})}else t.push({op:e})}return new Ht(t)}constructor(e=[]){this.chunks=e}toASM(){let e="";for(let t=0;t<this.chunks.length;t++){const r=this.chunks[t];e+=this._chunkToString(r)}return e.slice(1)}toHex(){return Te(this.toBinary(),"hex")}toBinary(){const e=new Ue;for(let t=0;t<this.chunks.length;t++){const r=this.chunks[t],i=r.op;if(e.writeUInt8(i),i===Lt.OP_RETURN&&null!=r.data){e.write(r.data);break}null!=r.data&&(i<Lt.OP_PUSHDATA1?e.write(r.data):i===Lt.OP_PUSHDATA1?(e.writeUInt8(r.data.length),e.write(r.data)):i===Lt.OP_PUSHDATA2?(e.writeUInt16LE(r.data.length),e.write(r.data)):i===Lt.OP_PUSHDATA4&&(e.writeUInt32LE(r.data.length),e.write(r.data)))}return e.toArray()}writeScript(e){return this.chunks=this.chunks.concat(e.chunks),this}writeOpCode(e){return this.chunks.push({op:e}),this}setChunkOpCode(e,t){return this.chunks[e]={op:t},this}writeBn(e){if(e.cmpn(0)===Lt.OP_0)this.chunks.push({op:Lt.OP_0});else if(0===e.cmpn(-1))this.chunks.push({op:Lt.OP_1NEGATE});else if(e.cmpn(1)>=0&&e.cmpn(16)<=0)this.chunks.push({op:e.toNumber()+Lt.OP_1-1});else{const t=e.toSm("little");this.writeBin(t)}return this}writeBin(e){let t;if(e.length>0&&e.length<Lt.OP_PUSHDATA1)t=e.length;else if(0===e.length)t=Lt.OP_0;else if(e.length<Math.pow(2,8))t=Lt.OP_PUSHDATA1;else if(e.length<Math.pow(2,16))t=Lt.OP_PUSHDATA2;else{if(!(e.length<Math.pow(2,32)))throw new Error("You can't push that much data");t=Lt.OP_PUSHDATA4}return this.chunks.push({data:e,op:t}),this}writeNumber(e){return this.writeBn(new h(e)),this}removeCodeseparators(){const e=[];for(let t=0;t<this.chunks.length;t++)this.chunks[t].op!==Lt.OP_CODESEPARATOR&&e.push(this.chunks[t]);return this.chunks=e,this}findAndDelete(e){const t=e.toHex();for(let e=0;e<this.chunks.length;e++)t===new Ht([this.chunks[e]]).toHex()&&this.chunks.splice(e,1);return this}isPushOnly(){for(let e=0;e<this.chunks.length;e++)if(this.chunks[e].op>Lt.OP_16)return!1;return!0}isLockingScript(){throw new Error("Not implemented")}isUnlockingScript(){throw new Error("Not implemented")}_chunkToString(e){const t=e.op;let r="";return r=void 0===e.data?`${r} ${Lt[t]}`:`${r} ${Ne(e.data)}`,r}}class qt extends Ht{isLockingScript(){return!0}isUnlockingScript(){return!1}}class Mt extends Ht{isLockingScript(){return!1}isUnlockingScript(){return!0}}const $t=1073741824,zt=Math.pow(2,31)-1,Wt=!0,jt=Object.freeze(new h(-1).toScriptNum()),Xt=Object.freeze(Array.from({length:17},((e,t)=>Object.freeze(new h(t).toScriptNum()))));class Gt{sourceTXID;sourceOutputIndex;sourceSatoshis;lockingScript;transactionVersion;otherInputs;outputs;inputIndex;unlockingScript;inputSequence;lockTime;context;programCounter;lastCodeSeparator;stack;altStack;ifStack;memoryLimit;stackMem;altStackMem;constructor(e){this.sourceTXID=e.sourceTXID,this.sourceOutputIndex=e.sourceOutputIndex,this.sourceSatoshis=e.sourceSatoshis,this.lockingScript=e.lockingScript,this.transactionVersion=e.transactionVersion,this.otherInputs=e.otherInputs,this.outputs=e.outputs,this.inputIndex=e.inputIndex,this.unlockingScript=e.unlockingScript,this.inputSequence=e.inputSequence,this.lockTime=e.lockTime,this.memoryLimit=e.memoryLimit??32e6,this.stack=[],this.altStack=[],this.ifStack=[],this.stackMem=0,this.altStackMem=0,this.reset()}reset(){this.context="UnlockingScript",this.programCounter=0,this.lastCodeSeparator=null,this.stack=[],this.altStack=[],this.ifStack=[],this.stackMem=0,this.altStackMem=0}ensureStackMem(e){this.stackMem+e>this.memoryLimit&&this.scriptEvaluationError("Stack memory usage has exceeded "+String(this.memoryLimit)+" bytes")}ensureAltStackMem(e){this.altStackMem+e>this.memoryLimit&&this.scriptEvaluationError("Alt stack memory usage has exceeded "+String(this.memoryLimit)+" bytes")}pushStack(e){this.ensureStackMem(e.length),this.stack.push(e),this.stackMem+=e.length}pushStackCopy(e){this.ensureStackMem(e.length);const t=e.slice();this.stack.push(t),this.stackMem+=t.length}popStack(){0===this.stack.length&&this.scriptEvaluationError("Attempted to pop from an empty stack.");const e=this.stack.pop();return this.stackMem-=e.length,e}stackTop(e=-1){return(0===this.stack.length||this.stack.length<Math.abs(e)||e>=0&&e>=this.stack.length)&&this.scriptEvaluationError(`Stack underflow accessing element at index ${e}. Stack length is ${this.stack.length}.`),this.stack[this.stack.length+e]}pushAltStack(e){this.ensureAltStackMem(e.length),this.altStack.push(e),this.altStackMem+=e.length}popAltStack(){0===this.altStack.length&&this.scriptEvaluationError("Attempted to pop from an empty alt stack.");const e=this.altStack.pop();return this.altStackMem-=e.length,e}checkSignatureEncoding(e){if(0===e.length)return!0;if(!function(e){if(e.length<9||e.length>73)return!1;if(48!==e[0])return!1;if(e[1]!==e.length-3)return!1;const t=e[2],r=e[3];if(2!==t)return!1;if(0===r)return!1;if(5+r>=e.length)return!1;const i=4+r,n=e[i],s=e[i+1];if(2!==n)return!1;if(0===s)return!1;if(128&e[4])return!1;if(r>1&&0===e[4]&&!(128&e[5]))return!1;const a=i+2;return!(128&e[a]||s>1&&0===e[a]&&!(128&e[a+1])||r+s+7!==e.length)}(e))return this.scriptEvaluationError("The signature format is invalid."),!1;try{const t=Bt.fromChecksigFormat(e);if(!t.hasLowS())return this.scriptEvaluationError("The signature must have a low S value."),!1;if(!(t.scope&Bt.SIGHASH_FORKID))return this.scriptEvaluationError("The signature must use SIGHASH_FORKID."),!1}catch(e){return this.scriptEvaluationError("The signature format is invalid."),!1}return!0}checkPublicKeyEncoding(e){if(0===e.length)return this.scriptEvaluationError("Public key is empty."),!1;if(e.length<33)return this.scriptEvaluationError("The public key is too short, it must be at least 33 bytes."),!1;if(4===e[0]){if(65!==e.length)return this.scriptEvaluationError("The non-compressed public key must be 65 bytes."),!1}else{if(2!==e[0]&&3!==e[0])return this.scriptEvaluationError("The public key is in an unknown format."),!1;if(33!==e.length)return this.scriptEvaluationError("The compressed public key must be 33 bytes."),!1}try{ct.fromDER(e)}catch(e){return this.scriptEvaluationError("The public key is in an unknown format."),!1}return!0}verifySignature(e,t,r){const i=Bt.format({sourceTXID:this.sourceTXID,sourceOutputIndex:this.sourceOutputIndex,sourceSatoshis:this.sourceSatoshis,transactionVersion:this.transactionVersion,otherInputs:this.otherInputs,outputs:this.outputs,inputIndex:this.inputIndex,subscript:r,inputSequence:this.inputSequence,lockTime:this.lockTime,scope:e.scope}),n=new h(ve(i));return ot(n,e,t)}step(){if(this.stackMem>this.memoryLimit)return this.scriptEvaluationError("Stack memory usage has exceeded "+String(this.memoryLimit)+" bytes"),!1;if(this.altStackMem>this.memoryLimit)return this.scriptEvaluationError("Alt stack memory usage has exceeded "+String(this.memoryLimit)+" bytes"),!1;"UnlockingScript"===this.context&&this.programCounter>=this.unlockingScript.chunks.length&&(this.context="LockingScript",this.programCounter=0);const e="UnlockingScript"===this.context?this.unlockingScript:this.lockingScript;if(this.programCounter>=e.chunks.length)return!1;const t=e.chunks[this.programCounter],r=t.op;void 0===r&&this.scriptEvaluationError(`Missing opcode in ${this.context} at pc=${this.programCounter}.`),Array.isArray(t.data)&&t.data.length>$t&&this.scriptEvaluationError(`Data push > 1073741824 bytes (pc=${this.programCounter}).`);const i=!this.ifStack.includes(!1);var n;if(i&&((n=r)===Lt.OP_2MUL||n===Lt.OP_2DIV||n===Lt.OP_VERIF||n===Lt.OP_VERNOTIF||n===Lt.OP_VER)&&this.scriptEvaluationError(`This opcode is currently disabled. (Opcode: ${Lt[r]}, PC: ${this.programCounter})`),i&&r>=0&&r<=Lt.OP_PUSHDATA4)(function(e){const t=e.data,r=e.op;return!(Array.isArray(t)&&(0===t.length?r!==Lt.OP_0:1===t.length&&t[0]>=1&&t[0]<=16?r!==Lt.OP_1+(t[0]-1):1===t.length&&129===t[0]?r!==Lt.OP_1NEGATE:t.length<=75?r!==t.length:t.length<=255?r!==Lt.OP_PUSHDATA1:t.length<=65535&&r!==Lt.OP_PUSHDATA2))})(t)||this.scriptEvaluationError(`This data is not minimally-encoded. (PC: ${this.programCounter})`),this.pushStack(Array.isArray(t.data)?t.data:[]);else if(i||r>=Lt.OP_IF&&r<=Lt.OP_ENDIF){let e,t,n,s,a,o,c,d,u,l,f,p,b,w,g,m,y,v,I,k,S,E,P,N,O,_;switch(r){case Lt.OP_1NEGATE:this.pushStackCopy(jt);break;case Lt.OP_0:this.pushStackCopy(Xt[0]);break;case Lt.OP_1:case Lt.OP_2:case Lt.OP_3:case Lt.OP_4:case Lt.OP_5:case Lt.OP_6:case Lt.OP_7:case Lt.OP_8:case Lt.OP_9:case Lt.OP_10:case Lt.OP_11:case Lt.OP_12:case Lt.OP_13:case Lt.OP_14:case Lt.OP_15:case Lt.OP_16:p=r-(Lt.OP_1-1),this.pushStackCopy(Xt[p]);break;case Lt.OP_NOP:case Lt.OP_NOP2:case Lt.OP_NOP3:case Lt.OP_NOP1:case Lt.OP_NOP4:case Lt.OP_NOP5:case Lt.OP_NOP6:case Lt.OP_NOP7:case Lt.OP_NOP8:case Lt.OP_NOP9:case Lt.OP_NOP10:case Lt.OP_NOP11:case Lt.OP_NOP12:case Lt.OP_NOP13:case Lt.OP_NOP14:case Lt.OP_NOP15:case Lt.OP_NOP16:case Lt.OP_NOP17:case Lt.OP_NOP18:case Lt.OP_NOP19:case Lt.OP_NOP20:case Lt.OP_NOP21:case Lt.OP_NOP22:case Lt.OP_NOP23:case Lt.OP_NOP24:case Lt.OP_NOP25:case Lt.OP_NOP26:case Lt.OP_NOP27:case Lt.OP_NOP28:case Lt.OP_NOP29:case Lt.OP_NOP30:case Lt.OP_NOP31:case Lt.OP_NOP32:case Lt.OP_NOP33:case Lt.OP_NOP34:case Lt.OP_NOP35:case Lt.OP_NOP36:case Lt.OP_NOP37:case Lt.OP_NOP38:case Lt.OP_NOP39:case Lt.OP_NOP40:case Lt.OP_NOP41:case Lt.OP_NOP42:case Lt.OP_NOP43:case Lt.OP_NOP44:case Lt.OP_NOP45:case Lt.OP_NOP46:case Lt.OP_NOP47:case Lt.OP_NOP48:case Lt.OP_NOP49:case Lt.OP_NOP50:case Lt.OP_NOP51:case Lt.OP_NOP52:case Lt.OP_NOP53:case Lt.OP_NOP54:case Lt.OP_NOP55:case Lt.OP_NOP56:case Lt.OP_NOP57:case Lt.OP_NOP58:case Lt.OP_NOP59:case Lt.OP_NOP60:case Lt.OP_NOP61:case Lt.OP_NOP62:case Lt.OP_NOP63:case Lt.OP_NOP64:case Lt.OP_NOP65:case Lt.OP_NOP66:case Lt.OP_NOP67:case Lt.OP_NOP68:case Lt.OP_NOP69:case Lt.OP_NOP70:case Lt.OP_NOP71:case Lt.OP_NOP72:case Lt.OP_NOP73:case Lt.OP_NOP77:break;case Lt.OP_IF:case Lt.OP_NOTIF:w=!1,i&&(this.stack.length<1&&this.scriptEvaluationError("OP_IF and OP_NOTIF require at least one item on the stack when they are used!"),e=this.popStack(),w=this.castToBool(e),r===Lt.OP_NOTIF&&(w=!w)),this.ifStack.push(w);break;case Lt.OP_ELSE:0===this.ifStack.length&&this.scriptEvaluationError("OP_ELSE requires a preceeding OP_IF."),this.ifStack[this.ifStack.length-1]=!this.ifStack[this.ifStack.length-1];break;case Lt.OP_ENDIF:0===this.ifStack.length&&this.scriptEvaluationError("OP_ENDIF requires a preceeding OP_IF."),this.ifStack.pop();break;case Lt.OP_VERIFY:this.stack.length<1&&this.scriptEvaluationError("OP_VERIFY requires at least one item to be on the stack."),t=this.stackTop(),w=this.castToBool(t),w||this.scriptEvaluationError("OP_VERIFY requires the top stack value to be truthy."),this.popStack();break;case Lt.OP_RETURN:"UnlockingScript"===this.context?this.programCounter=this.unlockingScript.chunks.length:this.programCounter=this.lockingScript.chunks.length,this.ifStack=[],this.programCounter--;break;case Lt.OP_TOALTSTACK:this.stack.length<1&&this.scriptEvaluationError("OP_TOALTSTACK requires at oeast one item to be on the stack."),this.pushAltStack(this.popStack());break;case Lt.OP_FROMALTSTACK:this.altStack.length<1&&this.scriptEvaluationError("OP_FROMALTSTACK requires at least one item to be on the stack."),this.pushStack(this.popAltStack());break;case Lt.OP_2DROP:this.stack.length<2&&this.scriptEvaluationError("OP_2DROP requires at least two items to be on the stack."),this.popStack(),this.popStack();break;case Lt.OP_2DUP:this.stack.length<2&&this.scriptEvaluationError("OP_2DUP requires at least two items to be on the stack."),t=this.stackTop(-2),n=this.stackTop(-1),this.pushStackCopy(t),this.pushStackCopy(n);break;case Lt.OP_3DUP:this.stack.length<3&&this.scriptEvaluationError("OP_3DUP requires at least three items to be on the stack."),t=this.stackTop(-3),n=this.stackTop(-2),s=this.stackTop(-1),this.pushStackCopy(t),this.pushStackCopy(n),this.pushStackCopy(s);break;case Lt.OP_2OVER:this.stack.length<4&&this.scriptEvaluationError("OP_2OVER requires at least four items to be on the stack."),t=this.stackTop(-4),n=this.stackTop(-3),this.pushStackCopy(t),this.pushStackCopy(n);break;case Lt.OP_2ROT:{this.stack.length<6&&this.scriptEvaluationError("OP_2ROT requires at least six items to be on the stack.");const e=this.popStack(),t=this.popStack(),r=this.popStack(),i=this.popStack(),n=this.popStack(),s=this.popStack();this.pushStack(i),this.pushStack(r),this.pushStack(t),this.pushStack(e),this.pushStack(s),this.pushStack(n);break}case Lt.OP_2SWAP:{this.stack.length<4&&this.scriptEvaluationError("OP_2SWAP requires at least four items to be on the stack.");const e=this.popStack(),t=this.popStack(),r=this.popStack(),i=this.popStack();this.pushStack(t),this.pushStack(e),this.pushStack(i),this.pushStack(r);break}case Lt.OP_IFDUP:this.stack.length<1&&this.scriptEvaluationError("OP_IFDUP requires at least one item to be on the stack."),t=this.stackTop(),this.castToBool(t)&&this.pushStackCopy(t);break;case Lt.OP_DEPTH:this.pushStack(new h(this.stack.length).toScriptNum());break;case Lt.OP_DROP:this.stack.length<1&&this.scriptEvaluationError("OP_DROP requires at least one item to be on the stack."),this.popStack();break;case Lt.OP_DUP:this.stack.length<1&&this.scriptEvaluationError("OP_DUP requires at least one item to be on the stack."),this.pushStackCopy(this.stackTop());break;case Lt.OP_NIP:this.stack.length<2&&this.scriptEvaluationError("OP_NIP requires at least two items to be on the stack."),n=this.popStack(),this.popStack(),this.pushStack(n);break;case Lt.OP_OVER:this.stack.length<2&&this.scriptEvaluationError("OP_OVER requires at least two items to be on the stack."),this.pushStackCopy(this.stackTop(-2));break;case Lt.OP_PICK:case Lt.OP_ROLL:{this.stack.length<2&&this.scriptEvaluationError(`${Lt[r]} requires at least two items to be on the stack.`),d=h.fromScriptNum(this.popStack(),Wt),p=d.toNumber(),(p<0||p>=this.stack.length)&&this.scriptEvaluationError(`${Lt[r]} requires the top stack element to be 0 or a positive number less than the current size of the stack.`);const e=this.stack[this.stack.length-1-p];r===Lt.OP_ROLL?(this.stack.splice(this.stack.length-1-p,1),this.stackMem-=e.length,this.pushStack(e)):this.pushStackCopy(e);break}case Lt.OP_ROT:this.stack.length<3&&this.scriptEvaluationError("OP_ROT requires at least three items to be on the stack."),c=this.popStack(),o=this.popStack(),a=this.popStack(),this.pushStack(o),this.pushStack(c),this.pushStack(a);break;case Lt.OP_SWAP:this.stack.length<2&&this.scriptEvaluationError("OP_SWAP requires at least two items to be on the stack."),o=this.popStack(),a=this.popStack(),this.pushStack(o),this.pushStack(a);break;case Lt.OP_TUCK:this.stack.length<2&&this.scriptEvaluationError("OP_TUCK requires at least two items to be on the stack."),t=this.stackTop(-1),this.ensureStackMem(t.length),this.stack.splice(this.stack.length-2,0,t.slice()),this.stackMem+=t.length;break;case Lt.OP_SIZE:this.stack.length<1&&this.scriptEvaluationError("OP_SIZE requires at least one item to be on the stack."),this.pushStack(new h(this.stackTop().length).toScriptNum());break;case Lt.OP_AND:case Lt.OP_OR:case Lt.OP_XOR:{this.stack.length<2&&this.scriptEvaluationError(`${Lt[r]} requires at least two items on the stack.`),n=this.popStack(),t=this.popStack(),t.length!==n.length&&this.scriptEvaluationError(`${Lt[r]} requires the top two stack items to be the same size.`);const e=new Array(t.length);for(let i=0;i<t.length;i++)r===Lt.OP_AND?e[i]=t[i]&n[i]:r===Lt.OP_OR?e[i]=t[i]|n[i]:e[i]=t[i]^n[i];this.pushStack(e);break}case Lt.OP_INVERT:{this.stack.length<1&&this.scriptEvaluationError("OP_INVERT requires at least one item to be on the stack."),e=this.popStack();const t=new Array(e.length);for(let r=0;r<e.length;r++)t[r]=255&~e[r];this.pushStack(t);break}case Lt.OP_LSHIFT:case Lt.OP_RSHIFT:{if(this.stack.length<2&&this.scriptEvaluationError(`${Lt[r]} requires at least two items to be on the stack.`),l=h.fromScriptNum(this.popStack(),Wt),t=this.popStack(),p=l.toNumber(),p<0&&this.scriptEvaluationError(`${Lt[r]} requires the top item on the stack not to be negative.`),0===t.length){this.pushStack([]);break}let e;u=new h(t),e=r===Lt.OP_LSHIFT?u.ushln(p):u.ushrn(p);const i=e.toArray("le",t.length);this.pushStack(i);break}case Lt.OP_EQUAL:case Lt.OP_EQUALVERIFY:this.stack.length<2&&this.scriptEvaluationError(`${Lt[r]} requires at least two items to be on the stack.`),n=this.popStack(),t=this.popStack(),w=function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}(t,n),this.pushStack(w?[1]:[]),r===Lt.OP_EQUALVERIFY&&(w||this.scriptEvaluationError("OP_EQUALVERIFY requires the top two stack items to be equal."),this.popStack());break;case Lt.OP_1ADD:case Lt.OP_1SUB:case Lt.OP_NEGATE:case Lt.OP_ABS:case Lt.OP_NOT:case Lt.OP_0NOTEQUAL:switch(this.stack.length<1&&this.scriptEvaluationError(`${Lt[r]} requires at least one item to be on the stack.`),d=h.fromScriptNum(this.popStack(),Wt),r){case Lt.OP_1ADD:d=d.add(new h(1));break;case Lt.OP_1SUB:d=d.sub(new h(1));break;case Lt.OP_NEGATE:d=d.neg();break;case Lt.OP_ABS:d.isNeg()&&(d=d.neg());break;case Lt.OP_NOT:d=new h(0===d.cmpn(0)?1:0);break;case Lt.OP_0NOTEQUAL:d=new h(0!==d.cmpn(0)?1:0)}this.pushStack(d.toScriptNum());break;case Lt.OP_ADD:case Lt.OP_SUB:case Lt.OP_MUL:case Lt.OP_DIV:case Lt.OP_MOD:case Lt.OP_BOOLAND:case Lt.OP_BOOLOR:case Lt.OP_NUMEQUAL:case Lt.OP_NUMEQUALVERIFY:case Lt.OP_NUMNOTEQUAL:case Lt.OP_LESSTHAN:case Lt.OP_GREATERTHAN:case Lt.OP_LESSTHANOREQUAL:case Lt.OP_GREATERTHANOREQUAL:case Lt.OP_MIN:case Lt.OP_MAX:{this.stack.length<2&&this.scriptEvaluationError(`${Lt[r]} requires at least two items to be on the stack.`),n=this.popStack(),t=this.popStack(),l=h.fromScriptNum(n,Wt),u=h.fromScriptNum(t,Wt);let e=0;switch(r){case Lt.OP_MUL:e=u.byteLength()+l.byteLength();break;case Lt.OP_ADD:case Lt.OP_SUB:e=Math.max(u.byteLength(),l.byteLength())+1;break;default:e=Math.max(u.byteLength(),l.byteLength())}this.ensureStackMem(e);let i=new h(0);switch(r){case Lt.OP_ADD:i=u.add(l);break;case Lt.OP_SUB:i=u.sub(l);break;case Lt.OP_MUL:i=u.mul(l);break;case Lt.OP_DIV:0===l.cmpn(0)&&this.scriptEvaluationError("OP_DIV cannot divide by zero!"),i=u.div(l);break;case Lt.OP_MOD:0===l.cmpn(0)&&this.scriptEvaluationError("OP_MOD cannot divide by zero!"),i=u.mod(l);break;case Lt.OP_BOOLAND:i=new h(0!==u.cmpn(0)&&0!==l.cmpn(0)?1:0);break;case Lt.OP_BOOLOR:i=new h(0!==u.cmpn(0)||0!==l.cmpn(0)?1:0);break;case Lt.OP_NUMEQUAL:case Lt.OP_NUMEQUALVERIFY:i=new h(0===u.cmp(l)?1:0);break;case Lt.OP_NUMNOTEQUAL:i=new h(0!==u.cmp(l)?1:0);break;case Lt.OP_LESSTHAN:i=new h(u.cmp(l)<0?1:0);break;case Lt.OP_GREATERTHAN:i=new h(u.cmp(l)>0?1:0);break;case Lt.OP_LESSTHANOREQUAL:i=new h(u.cmp(l)<=0?1:0);break;case Lt.OP_GREATERTHANOREQUAL:i=new h(u.cmp(l)>=0?1:0);break;case Lt.OP_MIN:i=u.cmp(l)<0?u:l;break;case Lt.OP_MAX:i=u.cmp(l)>0?u:l}this.pushStack(i.toScriptNum()),r===Lt.OP_NUMEQUALVERIFY&&(this.castToBool(this.stackTop())||this.scriptEvaluationError("OP_NUMEQUALVERIFY requires the top stack item to be truthy."),this.popStack());break}case Lt.OP_WITHIN:this.stack.length<3&&this.scriptEvaluationError("OP_WITHIN requires at least three items to be on the stack."),f=h.fromScriptNum(this.popStack(),Wt),l=h.fromScriptNum(this.popStack(),Wt),u=h.fromScriptNum(this.popStack(),Wt),w=u.cmp(l)>=0&&u.cmp(f)<0,this.pushStack(w?[1]:[]);break;case Lt.OP_RIPEMD160:case Lt.OP_SHA1:case Lt.OP_SHA256:case Lt.OP_HASH160:case Lt.OP_HASH256:{this.stack.length<1&&this.scriptEvaluationError(`${Lt[r]} requires at least one item to be on the stack.`),e=this.popStack();let t=[];r===Lt.OP_RIPEMD160?t=we(e):r===Lt.OP_SHA1?t=ge(e):r===Lt.OP_SHA256?t=me(e):r===Lt.OP_HASH160?t=Ie(e):r===Lt.OP_HASH256&&(t=ve(e)),this.pushStack(t);break}case Lt.OP_CODESEPARATOR:this.lastCodeSeparator=this.programCounter;break;case Lt.OP_CHECKSIG:case Lt.OP_CHECKSIGVERIFY:{this.stack.length<2&&this.scriptEvaluationError(`${Lt[r]} requires at least two items to be on the stack.`),v=this.popStack(),y=this.popStack(),this.checkSignatureEncoding(y)&&this.checkPublicKeyEncoding(v)||this.scriptEvaluationError(`${Lt[r]} requires correct encoding for the public key and signature.`);const e=("UnlockingScript"===this.context?this.unlockingScript:this.lockingScript).chunks.slice(null===this.lastCodeSeparator?0:this.lastCodeSeparator+1);if(m=new Ht(e),m.findAndDelete((new Ht).writeBin(y)),g=!1,y.length>0)try{I=Bt.fromChecksigFormat(y),k=ct.fromDER(v),g=this.verifySignature(I,k,m)}catch(e){g=!1}this.pushStack(g?[1]:[]),r===Lt.OP_CHECKSIGVERIFY&&(g||this.scriptEvaluationError("OP_CHECKSIGVERIFY requires that a valid signature is provided."),this.popStack());break}case Lt.OP_CHECKMULTISIG:case Lt.OP_CHECKMULTISIGVERIFY:{S=1,this.stack.length<S&&this.scriptEvaluationError(`${Lt[r]} requires at least 1 item for nKeys.`),N=h.fromScriptNum(this.stackTop(-S),Wt).toNumber(),(N<0||N>zt)&&this.scriptEvaluationError(`${Lt[r]} requires a key count between 0 and ${zt}.`),E=++S,S+=N,this.stack.length<S&&this.scriptEvaluationError(`${Lt[r]} stack too small for nKeys and keys. Need ${S}, have ${this.stack.length}.`),O=h.fromScriptNum(this.stackTop(-S),Wt).toNumber(),(O<0||O>N)&&this.scriptEvaluationError(`${Lt[r]} requires the number of signatures to be no greater than the number of keys.`),P=++S,S+=O,this.stack.length<S&&this.scriptEvaluationError(`${Lt[r]} stack too small for N, keys, M, sigs, and dummy. Need ${S}, have ${this.stack.length}.`);const e=("UnlockingScript"===this.context?this.unlockingScript:this.lockingScript).chunks.slice(null===this.lastCodeSeparator?0:this.lastCodeSeparator+1);m=new Ht(e);for(let e=0;e<O;e++)y=this.stackTop(-P-e),m.findAndDelete((new Ht).writeBin(y));for(g=!0;g&&O>0;){if(0===N){g=!1;break}if(y=this.stackTop(-P),v=this.stackTop(-E),this.checkSignatureEncoding(y)&&this.checkPublicKeyEncoding(v)||this.scriptEvaluationError(`${Lt[r]} requires correct encoding for the public key and signature.`),_=!1,y.length>0)try{I=Bt.fromChecksigFormat(y),k=ct.fromDER(v),_=this.verifySignature(I,k,m)}catch(e){_=!1}_&&(P++,O--),E++,N--,O>N&&(g=!1)}let t=1+h.fromScriptNum(this.stackTop(-1),!1).toNumber()+1+h.fromScriptNum(this.stackTop(-(1+h.fromScriptNum(this.stackTop(-1),!1).toNumber()+1)),!1).toNumber()+1-1;for(;t>0;)this.popStack(),t--;this.stack.length<1&&this.scriptEvaluationError(`${Lt[r]} requires an extra item (dummy) to be on the stack.`),this.popStack().length>0&&this.scriptEvaluationError(`${Lt[r]} requires the extra stack item (dummy) to be empty.`),this.pushStack(g?[1]:[]),r===Lt.OP_CHECKMULTISIGVERIFY&&(g||this.scriptEvaluationError("OP_CHECKMULTISIGVERIFY requires that a sufficient number of valid signatures are provided."),this.popStack());break}case Lt.OP_CAT:{this.stack.length<2&&this.scriptEvaluationError("OP_CAT requires at least two items to be on the stack."),n=this.popStack(),t=this.popStack();const e=t.concat(n);e.length>$t&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),this.pushStack(e);break}case Lt.OP_SPLIT:{this.stack.length<2&&this.scriptEvaluationError("OP_SPLIT requires at least two items to be on the stack.");const e=this.popStack(),t=this.popStack();p=h.fromScriptNum(e,Wt).toNumber(),(p<0||p>t.length)&&this.scriptEvaluationError("OP_SPLIT requires the first stack item to be a non-negative number less than or equal to the size of the second-from-top stack item."),this.pushStack(t.slice(0,p)),this.pushStack(t.slice(p));break}case Lt.OP_NUM2BIN:{this.stack.length<2&&this.scriptEvaluationError("OP_NUM2BIN requires at least two items to be on the stack."),b=h.fromScriptNum(this.popStack(),Wt).toNumber(),(b>$t||b<0)&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes or negative size.");let e=this.popStack();if(e=Le(e),e.length>b&&this.scriptEvaluationError("OP_NUM2BIN requires that the size expressed in the top stack item is large enough to hold the value expressed in the second-from-top stack item."),e.length===b){this.pushStack(e);break}const t=new Array(b).fill(0);let r=0;e.length>0&&(r=128&e[e.length-1],e[e.length-1]&=127);for(let r=0;r<e.length;r++)t[r]=e[r];0!==r&&(t[b-1]|=128),this.pushStack(t);break}case Lt.OP_BIN2NUM:{this.stack.length<1&&this.scriptEvaluationError("OP_BIN2NUM requires at least one item to be on the stack."),t=this.popStack();const e=Le(t);(function(e,t=Number.MAX_SAFE_INTEGER){return!(e.length>t||e.length>0&&!(127&e[e.length-1]||!(e.length<=1)&&128&e[e.length-2]))})(e)||this.scriptEvaluationError("OP_BIN2NUM requires that the resulting number is valid."),this.pushStack(e);break}default:this.scriptEvaluationError(`Invalid opcode ${r} (pc=${this.programCounter}).`)}}return this.programCounter++,!0}validate(){for(this.unlockingScript.isPushOnly()||this.scriptEvaluationError("Unlocking scripts can only contain push operations, and no other opcodes.");this.step()&&!("LockingScript"===this.context&&this.programCounter>=this.lockingScript.chunks.length););return this.ifStack.length>0&&this.scriptEvaluationError("Every OP_IF, OP_NOTIF, or OP_ELSE must be terminated with OP_ENDIF prior to the end of the script."),1!==this.stack.length&&this.scriptEvaluationError(`The clean stack rule requires exactly one item to be on the stack after script execution, found ${this.stack.length}.`),0===this.stack.length?this.scriptEvaluationError("The top stack element must be truthy after script evaluation (stack is empty)."):this.castToBool(this.stackTop())||this.scriptEvaluationError("The top stack element must be truthy after script evaluation."),!0}castToBool(e){if(0===e.length)return!1;for(let t=0;t<e.length;t++)if(0!==e[t])return!(t===e.length-1&&128===e[t]);return!1}scriptEvaluationError(e){const t=`Context: ${this.context}, PC: ${this.programCounter}`,r=this.stack.map((e=>null!=e&&void 0!==e.length?Ne(e):null==e?"null/undef":"INVALID_STACK_ITEM")).join(", "),i=this.altStack.map((e=>null!=e&&void 0!==e.length?Ne(e):null==e?"null/undef":"INVALID_STACK_ITEM")).join(", "),n=`Stack: [${r}] (len: ${this.stack.length}, mem: ${this.stackMem})`,s=`AltStack: [${i}] (len: ${this.altStack.length}, mem: ${this.altStackMem})`,a=`IfStack: [${this.ifStack.join(", ")}]`;throw new Error(`Script evaluation error: ${e}\nTXID: ${this.sourceTXID}, OutputIdx: ${this.sourceOutputIndex}\n${t}\n${n}\n${s}\n${a}`)}}function Yt(e){if(null==e)throw new Error("must have value");return e}class Zt{lock(e){let t;if("string"==typeof e){const r=Be(e);if(0!==r.prefix[0]&&111!==r.prefix[0])throw new Error("only P2PKH is supported");t=r.data}else t=e;if(20!==t.length)throw new Error("P2PKH hash length must be 20 bytes");return new qt([{op:Lt.OP_DUP},{op:Lt.OP_HASH160},{op:t.length,data:t},{op:Lt.OP_EQUALVERIFY},{op:Lt.OP_CHECKSIG}])}unlock(e,t="all",r=!1,i,n){return{sign:async(s,a)=>{let o=Bt.SIGHASH_FORKID;"all"===t&&(o|=Bt.SIGHASH_ALL),"none"===t&&(o|=Bt.SIGHASH_NONE),"single"===t&&(o|=Bt.SIGHASH_SINGLE),r&&(o|=Bt.SIGHASH_ANYONECANPAY);const c=s.inputs[a],h=s.inputs.filter(((e,t)=>t!==a)),d=c.sourceTXID??c.sourceTransaction?.id("hex");if(null==d||void 0===d)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(""===d)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(i||=c.sourceTransaction?.outputs[c.sourceOutputIndex].satoshis,null==i||void 0===i)throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(n||=c.sourceTransaction?.outputs[c.sourceOutputIndex].lockingScript,null==n)throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");const u=Bt.format({sourceTXID:d,sourceOutputIndex:Yt(c.sourceOutputIndex),sourceSatoshis:i,transactionVersion:s.version,otherInputs:h,inputIndex:a,outputs:s.outputs,inputSequence:Yt(c.sequence),subscript:n,lockTime:s.lockTime,scope:o}),l=e.sign(me(u)),f=new Bt(l.r,l.s,o).toChecksigFormat(),p=e.toPublicKey().encode(!0);return new Mt([{op:f.length,data:f},{op:p.length,data:p}])},estimateLength:async()=>108}}}class Jt{type="raw";constructor(e="raw"){this.type=e}lock(e){const t=[{op:Lt.OP_OVER},{op:Lt.OP_3},{op:Lt.OP_SPLIT},{op:Lt.OP_NIP},{op:Lt.OP_1},{op:Lt.OP_SPLIT},{op:Lt.OP_SWAP},{op:Lt.OP_SPLIT},{op:Lt.OP_DROP}];return"raw"!==this.type&&t.push({op:Lt["OP_"+this.type]}),t.push({op:e.length,data:e}),t.push({op:Lt.OP_EQUALVERIFY}),t.push({op:Lt.OP_CHECKSIG}),new qt(t)}unlock(e,t,r="all",i=!1){return{sign:async(n,s)=>{void 0===t&&(t=bt.fromRandom());let a=Bt.SIGHASH_FORKID;"all"===r&&(a|=Bt.SIGHASH_ALL),"none"===r&&(a|=Bt.SIGHASH_NONE),"single"===r&&(a|=Bt.SIGHASH_SINGLE),i&&(a|=Bt.SIGHASH_ANYONECANPAY);const o=[...n.inputs],[c]=o.splice(s,1);if("object"!=typeof c.sourceTransaction)throw new Error("The source transaction is needed for transaction signing.");const h=Bt.format({sourceTXID:c.sourceTransaction?.id("hex")??"",sourceOutputIndex:c.sourceOutputIndex??0,sourceSatoshis:c.sourceTransaction?.outputs[c.sourceOutputIndex]?.satoshis??0,transactionVersion:n.version,otherInputs:o,inputIndex:s,outputs:n.outputs,inputSequence:c.sequence??4294967295,subscript:c.sourceTransaction?.outputs[c.sourceOutputIndex]?.lockingScript??new Ht,lockTime:n.lockTime,scope:a}),d=t.sign(me(h),void 0,!0,e),u=new Bt(d.r,d.s,a).toChecksigFormat(),l=t.toPublicKey().encode(!0);return new Mt([{op:u.length,data:u},{op:l.length,data:l}])},estimateLength:async()=>108}}}function Qt(e){if(null==e)throw new Error("must have value");return e}class er{wallet;originator;static decode(e){const t=ct.fromString(Ne(Qt(e.chunks[0].data))),r=[];for(let t=2;t<e.chunks.length;t++){const i=e.chunks[t+1]?.op;let n=e.chunks[t].data??[];if(0===n.length&&(e.chunks[t].op>=80&&e.chunks[t].op<=95?n=[e.chunks[t].op-80]:0===e.chunks[t].op?n=[0]:79===e.chunks[t].op&&(n=[129])),r.push(n),i===Lt.OP_DROP||i===Lt.OP_2DROP)break}return{fields:r,lockingPublicKey:t}}constructor(e,t){this.wallet=e,this.originator=t}async lock(e,t,r,i,n=!1,s=!0,a="before"){const{publicKey:o}=await this.wallet.getPublicKey({protocolID:t,keyID:r,counterparty:i,forSelf:n},this.originator),c=[],h=[];if(c.push({op:o.length/2,data:Oe(o,"hex")}),c.push({op:Lt.OP_CHECKSIG}),s){const n=e.reduce(((e,t)=>[...e,...t]),[]),{signature:s}=await this.wallet.createSignature({data:n,protocolID:t,keyID:r,counterparty:i},this.originator);e.push(s)}for(const t of e)h.push(0===(d=t).length||1===d.length&&0===d[0]?{op:0}:1===d.length&&d[0]>0&&d[0]<=16?{op:80+d[0]}:1===d.length&&129===d[0]?{op:79}:d.length<=75?{op:d.length,data:d}:d.length<=255?{op:76,data:d}:d.length<=65535?{op:77,data:d}:{op:78,data:d});var d;let u=e.length;for(;u>1;)h.push({op:Lt.OP_2DROP}),u-=2;return 0!==u&&h.push({op:Lt.OP_DROP}),new qt("before"===a?[...c,...h]:[...h,...c])}unlock(e,t,r,i="all",n=!1,s,a){return{sign:async(o,c)=>{let h=Bt.SIGHASH_FORKID;"all"===i&&(h|=Bt.SIGHASH_ALL),"none"===i&&(h|=Bt.SIGHASH_NONE),"single"===i&&(h|=Bt.SIGHASH_SINGLE),n&&(h|=Bt.SIGHASH_ANYONECANPAY);const d=o.inputs[c],u=o.inputs.filter(((e,t)=>t!==c)),l=d.sourceTXID??d.sourceTransaction?.id("hex");if(null==l||void 0===l)throw new Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(s||=d.sourceTransaction?.outputs[d.sourceOutputIndex].satoshis,null==s||void 0===s)throw new Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(a||=d.sourceTransaction?.outputs[d.sourceOutputIndex].lockingScript,null==a)throw new Error("The lockingScript or input sourceTransaction is required for transaction signing.");const f=Bt.format({sourceTXID:l,sourceOutputIndex:Qt(d.sourceOutputIndex),sourceSatoshis:s,transactionVersion:o.version,otherInputs:u,inputIndex:c,outputs:o.outputs,inputSequence:d.sequence??4294967295,subscript:a,lockTime:o.lockTime,scope:h}),p=me(f),{signature:b}=await this.wallet.createSignature({data:p,protocolID:e,keyID:t,counterparty:r},this.originator),w=it.fromDER([...b]),g=new Bt(w.r,w.s,h).toChecksigFormat();return new Mt([{op:g.length,data:g}])},estimateLength:async()=>73}}}class tr{value;constructor(e){this.value=e}async computeFee(e){const t=e=>e>2**32?9:e>65536?5:e>253?3:1;let r=4;r+=t(e.inputs.length);for(let i=0;i<e.inputs.length;i++){const n=e.inputs[i];let s;if(r+=40,"object"==typeof n.unlockingScript)s=n.unlockingScript.toBinary().length;else{if("object"!=typeof n.unlockingScriptTemplate)throw new Error("All inputs must have an unlocking script or an unlocking script template for sat/kb fee computation.");s=await n.unlockingScriptTemplate.estimateLength(e,i)}r+=t(s),r+=s}r+=t(e.outputs.length);for(const i of e.outputs){r+=8;const e=i.lockingScript.toBinary().length;r+=t(e),r+=e}return r+=4,Math.ceil(r/1e3*this.value)}}class rr{https;constructor(e){this.https=e}async request(e,t){return await new Promise(((r,i)=>{const n=this.https.request(e,t,(e=>{let t="";e.on("data",(e=>{t+=e})),e.on("end",(()=>{const i=e.statusCode>=200&&e.statusCode<=299,n=e.headers["content-type"],s=""!==t&&"string"==typeof n&&n.startsWith("application/json")?JSON.parse(t):t;r({status:e.statusCode,statusText:e.statusMessage,ok:i,data:s})}))}));n.on("error",(e=>{i(e)})),null!==t.data&&void 0!==t.data&&n.write(JSON.stringify(t.data)),n.end()}))}}class ir{fetch;constructor(e){this.fetch=e}async request(e,t){const r={method:t.method,headers:t.headers,body:JSON.stringify(t.data)},i=await this.fetch(e,r),n=i.headers.get("Content-Type"),s=n?.startsWith("application/json")?await i.json():await i.text();return{ok:i.ok,status:i.status,statusText:i.statusText,data:s}}}function nr(){const e={async request(...e){throw new Error("No method available to perform HTTP request")}};if("undefined"!=typeof window&&"function"==typeof window.fetch)return new ir(window.fetch.bind(window));if("undefined"==typeof require)return e;try{const e=require("https");return new rr(e)}catch(t){return e}}function sr(){return`ts-sdk-${Ne(ut(16))}`}class ar{URL;apiKey;deploymentId;callbackUrl;callbackToken;headers;httpClient;constructor(e,t){if(this.URL=e,"string"==typeof t)this.apiKey=t,this.httpClient=nr(),this.deploymentId=sr(),this.callbackToken=void 0,this.callbackUrl=void 0;else{const e=t??{},{apiKey:r,deploymentId:i,httpClient:n,callbackToken:s,callbackUrl:a,headers:o}=e;this.apiKey=r,this.httpClient=n??nr(),this.deploymentId=i??sr(),this.callbackToken=s,this.callbackUrl=a,this.headers=o}}requestHeaders(){const e={"Content-Type":"application/json","XDeployment-ID":this.deploymentId};if(null!=this.apiKey&&""!==this.apiKey&&(e.Authorization=`Bearer ${this.apiKey}`),null!=this.callbackUrl&&""!==this.callbackUrl&&(e["X-CallbackUrl"]=this.callbackUrl),null!=this.callbackToken&&""!==this.callbackToken&&(e["X-CallbackToken"]=this.callbackToken),null!=this.headers)for(const t in this.headers)e[t]=this.headers[t];return e}async broadcast(e){let t;try{t=e.toHexEF()}catch(r){if("All inputs must have source transactions when serializing to EF format"!==r.message)throw r;t=e.toHex()}const r={method:"POST",headers:this.requestHeaders(),data:{rawTx:t}};try{const e=await this.httpClient.request(`${this.URL}/v1/tx`,r);if(e.ok){const{txid:t,extraInfo:r,txStatus:i,competingTxs:n}=e.data,s={status:"success",txid:t,message:`${i} ${r}`};return null!=n&&(s.competingTxs=n),s}{const t=typeof e.status,r={status:"error",code:"number"===t||"string"===t?e.status.toString():"ERR_UNKNOWN",description:"Unknown error"};let i=e.data;if("string"==typeof i)try{i=JSON.parse(e.data)}catch{}return"object"==typeof i&&(null!==i&&(r.more=i),null!=i&&"string"==typeof i.txid&&(r.txid=i.txid),null!=i&&"detail"in i&&"string"==typeof i.detail&&(r.description=i.detail)),r}}catch(e){return{status:"error",code:"500",description:"string"==typeof e.message?e.message:"Internal Server Error"}}}async broadcastMany(e){const t=e.map((e=>{try{return{rawTx:e.toHexEF()}}catch(t){if("All inputs must have source transactions when serializing to EF format"===t.message)return{rawTx:e.toHex()};throw t}})),r={method:"POST",headers:this.requestHeaders(),data:t};try{return(await this.httpClient.request(`${this.URL}/v1/txs`,r)).data}catch(t){const r={status:"error",code:"500",description:"string"==typeof t.message?t.message:"Internal Server Error"};return e.map((()=>r))}}}function or(e=!1,t={}){return new ar(e?"https://testnet.arc.gorillapool.io":"https://arc.gorillapool.io",t)}class cr{network;apiKey;URL;httpClient;constructor(e="main",t={}){const{apiKey:r,httpClient:i}=t;this.network=e,this.URL=`https://api.whatsonchain.com/v1/bsv/${e}`,this.httpClient=i??nr(),this.apiKey=r??""}async isValidRootForHeight(e,t){const r={method:"GET",headers:this.getHttpHeaders()},i=await this.httpClient.request(`${this.URL}/block/${t}/header`,r);if(i.ok){const{merkleroot:t}=i.data;return t===e}if(404===i.status)return!1;throw new Error(`Failed to verify merkleroot for height ${t} because of an error: ${JSON.stringify(i.data)} `)}async currentHeight(){try{const e={method:"GET",headers:this.getHttpHeaders()},t=await this.httpClient.request(`${this.URL}/block/headers`,e);if(t.ok)return t.data[0].height;throw new Error(`Failed to get current height because of an error: ${JSON.stringify(t.data)} `)}catch(e){throw new Error(`Failed to get current height because of an error: ${e instanceof Error?e.message:String(e)}`)}}getHttpHeaders(){const e={Accept:"application/json"};return"string"==typeof this.apiKey&&""!==this.apiKey.trim()&&(e.Authorization=this.apiKey),e}}function hr(){return new cr}class dr{blockHeight;path;static fromHex(e){return dr.fromBinary(Oe(e,"hex"))}static fromReader(e,t=!0){const r=e.readVarIntNum(),i=e.readUInt8(),n=Array(i).fill(null).map((()=>[]));let s,a,o;for(let t=0;t<i;t++){for(o=e.readVarIntNum();o>0;){a=e.readVarIntNum(),s=e.readUInt8();const r={offset:a};1&s?r.duplicate=!0:(2&s&&(r.txid=!0),r.hash=Ne(e.read(32).reverse())),Array.isArray(n[t])&&0!==n[t].length||(n[t]=[]),n[t].push(r),o--}n[t].sort(((e,t)=>e.offset-t.offset))}return new dr(r,n,t)}static fromBinary(e){const t=new Ke(e);return dr.fromReader(t)}static fromCoinbaseTxidAndHeight(e,t){return new dr(t,[[{offset:0,hash:e,txid:!0}]])}constructor(e,t,r=!0){this.blockHeight=e,this.path=t;const i=Array(this.path.length).fill(0).map((()=>new Set));let n;this.path.forEach(((e,t)=>{if(0===e.length&&0===t)throw new Error(`Empty level at height: ${t}`);const n=new Set;e.forEach((e=>{if(n.has(e.offset))throw new Error(`Duplicate offset: ${e.offset}, at height: ${t}`);if(n.add(e.offset),0===t){if(!0!==e.duplicate)for(let t=1;t<this.path.length;t++)i[t].add(e.offset>>t^1)}else if(r&&!i[t].has(e.offset))throw new Error(`Invalid offset: ${e.offset}, at height: ${t}, with legal offsets: ${Array.from(i[t]).join(", ")}`)}))})),this.path[0].forEach(((e,t)=>{if(0===t&&(n=this.computeRoot(e.hash)),n!==this.computeRoot(e.hash))throw new Error("Mismatched roots")}))}toBinary(){const e=new Ue;e.writeVarIntNum(this.blockHeight);const t=this.path.length;e.writeUInt8(t);for(let r=0;r<t;r++){const t=Object.keys(this.path[r]).length;e.writeVarIntNum(t);for(const t of this.path[r]){e.writeVarIntNum(t.offset);let r=0;!0===t?.duplicate&&(r|=1),void 0!==t?.txid&&null!==t.txid&&(r|=2),e.writeUInt8(r),1&r||e.write(Oe(t.hash,"hex").reverse())}}return e.toArray()}toHex(){return Ne(this.toBinary())}indexOf(e){const t=this.path[0].find((t=>t.hash===e));if(null==t)throw new Error(`Transaction ID ${e} not found in the Merkle Path`);return t.offset}computeRoot(e){if("string"!=typeof e){const t=this.path[0].find((e=>Boolean(e?.hash)));if(null==t)throw new Error("No valid leaf found in the Merkle Path");e=t.hash}if("string"!=typeof e)throw new Error("Transaction ID is undefined");const t=this.indexOf(e);if("number"!=typeof t)throw new Error(`This proof does not contain the txid: ${e??"undefined"}`);const r=e=>Ne(ve(Oe(e,"hex").reverse()).reverse());let i=e;if(1===this.path.length&&1===this.path[0].length)return i;for(let e=0;e<this.path.length;e++){this.path[e];const n=t>>e^1,s=this.findOrComputeLeaf(e,n);if("object"!=typeof s)throw new Error(`Missing hash for index ${t} at height ${e}`);i=!0===s.duplicate?r((i??"")+(i??"")):r(n%2!=0?(s.hash??"")+(i??""):(i??"")+(s.hash??""))}return i}findOrComputeLeaf(e,t){const r=e=>Ne(ve(Oe(e,"hex").reverse()).reverse());let i=this.path[e].find((e=>e.offset===t));if(null!=i)return i;if(0===e)return;const n=e-1,s=t<<1,a=this.findOrComputeLeaf(n,s);if(null==a||null==a.hash||""===a.hash)return;const o=this.findOrComputeLeaf(n,s+1);if(null==o)return;let c;return c=!0===o.duplicate?r(a.hash+a.hash):r((o.hash??"")+(a.hash??"")),i={offset:t,hash:c},i}async verify(e,t){const r=this.computeRoot(e);if(0===this.indexOf(e)){const e=await t.currentHeight();if(this.blockHeight+100<e)return!1}return await t.isValidRootForHeight(r,this.blockHeight)}combine(e){if(this.blockHeight!==e.blockHeight)throw new Error("You cannot combine paths which do not have the same block height.");if(this.computeRoot()!==e.computeRoot())throw new Error("You cannot combine paths which do not have the same root.");const t=[];for(let r=0;r<this.path.length;r++){t.push([]);for(let e=0;e<this.path[r].length;e++)t[r].push(this.path[r][e]);for(let i=0;i<e.path[r].length;i++)if(void 0===t[r].find((t=>t.offset===e.path[r][i].offset)))t[r].push(e.path[r][i]);else if(void 0!==e.path[r][i]?.txid&&null!==e.path[r][i]?.txid){const n=t[r].find((t=>t.offset===e.path[r][i].offset));null!=n&&(n.txid=!0)}}this.path=t,this.trim()}trim(){const e=(e,t)=>{0!==t.length&&t.slice(-1)[0]===e||t.push(e)},t=(e,t)=>{for(let r=e.length;r>=0;r--){const i=this.path[t].findIndex((t=>t.offset===e[r]));i>=0&&this.path[t].splice(i,1)}},r=t=>{const r=[];for(const i of t)e(i>>1,r);return r};let i=[],n=[];for(let e=0;e<this.path.length;e++)this.path[e].sort(((e,t)=>e.offset-t.offset));for(let t=0;t<this.path[0].length;t++){const r=this.path[0][t];if(!0===r.txid)e(r.offset>>1,i);else{const i=r.offset%2==1,s=this.path[0][t+(i?-1:1)];void 0!==s.txid&&null!==s.txid&&s.txid||e(s.offset,n)}}t(n,0);for(let e=1;e<this.path.length;e++)n=i,i=r(i),t(n,e)}}class ur{_bumpIndex;_tx;_rawTx;_txid;inputTxids=[];isValid=void 0;get bumpIndex(){return this._bumpIndex}set bumpIndex(e){this._bumpIndex=e,this.updateInputTxids()}get hasProof(){return void 0!==this._bumpIndex}get isTxidOnly(){return void 0!==this._txid&&null!==this._txid&&null==this._rawTx&&null==this._tx}get txid(){if(void 0!==this._txid&&null!==this._txid&&""!==this._txid)return this._txid;if(null!=this._tx)return this._txid=this._tx.id("hex"),this._txid;if(null!=this._rawTx)return this._txid=Ne(ve(this._rawTx)),this._txid;throw new Error("Internal")}get tx(){return null!=this._tx?this._tx:null!=this._rawTx?(this._tx=mr.fromBinary(this._rawTx),this._tx):void 0}get rawTx(){return null!=this._rawTx?this._rawTx:null!=this._tx?(this._rawTx=this._tx.toBinary(),this._rawTx):void 0}constructor(e,t){"string"==typeof e?this._txid=e:Array.isArray(e)?this._rawTx=e:this._tx=e,this.bumpIndex=t,this.updateInputTxids()}static fromTx(e,t){return new ur(e,t)}static fromRawTx(e,t){return new ur(e,t)}static fromTxid(e,t){return new ur(e,t)}updateInputTxids(){if(this.hasProof||null==this.tx)this.inputTxids=[];else{const e={};for(const t of this.tx.inputs)void 0!==t.sourceTXID&&null!==t.sourceTXID&&""!==t.sourceTXID&&(e[t.sourceTXID]=!0);this.inputTxids=Object.keys(e)}}toWriter(e,t){const r=t=>{e.writeUInt8(t)},i=()=>{if(null!=this._rawTx)e.write(this._rawTx);else{if(null==this._tx)throw new Error("a valid serialized Transaction is expected");e.write(this._tx.toBinary())}};t===pr?this.isTxidOnly?(r(wr.TXID_ONLY),(()=>{if(null==this._txid)throw new Error("Transaction ID (_txid) is undefined");e.writeReverse(Oe(this._txid,"hex"))})()):void 0!==this.bumpIndex?(r(wr.RAWTX_AND_BUMP_INDEX),e.writeVarIntNum(this.bumpIndex),i()):(r(wr.RAWTX),i()):(i(),(()=>{void 0===this.bumpIndex?r(wr.RAWTX):(r(wr.RAWTX_AND_BUMP_INDEX),e.writeVarIntNum(this.bumpIndex))})())}static fromReader(e,t){let r,i,n;if(t===pr){const t=e.readUInt8();t===wr.TXID_ONLY?n=ur.fromTxid(Ne(e.readReverse(32))):(t===wr.RAWTX_AND_BUMP_INDEX&&(i=e.readVarIntNum()),r=mr.fromReader(e),n=ur.fromTx(r,i))}else r=mr.fromReader(e),i=0!==e.readUInt8()?e.readVarIntNum():void 0,n=ur.fromTx(r,i);return n}}function lr(e){if(null==e)throw new Error("Expected a valid value, but got undefined.");return e}const fr=4022206465,pr=4022206466,br=16843009;var wr;!function(e){e[e.RAWTX=0]="RAWTX",e[e.RAWTX_AND_BUMP_INDEX=1]="RAWTX_AND_BUMP_INDEX",e[e.TXID_ONLY=2]="TXID_ONLY"}(wr||(wr={}));class gr{bumps=[];txs=[];version=pr;atomicTxid=void 0;constructor(e=pr){this.version=e}findTxid(e){return this.txs.find((t=>t.txid===e))}makeTxidOnly(e){const t=this.txs.findIndex((t=>t.txid===e));if(-1===t)return;let r=this.txs[t];return r.isTxidOnly||(this.txs.splice(t,1),r=this.mergeTxidOnly(e)),r}findBump(e){return this.bumps.find((t=>t.path[0].some((t=>t.hash===e))))}findTransactionForSigning(e){const t=this.findTxid(e);if(null!=t&&null!=t.tx){for(const e of t.tx.inputs)if(null==e.sourceTransaction){const t=this.findTxid(lr(e.sourceTXID));null!=t&&(e.sourceTransaction=t.tx)}return t.tx}}findAtomicTransaction(e){const t=this.findTxid(e);if(null==t||null==t.tx)return;const r=(e,t)=>{const i=e.findBump(t.id("hex"));if(null!=i)t.merklePath=i;else for(const i of t.inputs){if(null==i.sourceTransaction){const t=e.findTxid(lr(i.sourceTXID));null!=t&&(i.sourceTransaction=t.tx)}if(null!=i.sourceTransaction){const t=e.findBump(i.sourceTransaction.id("hex"));null!=t?i.sourceTransaction.merklePath=t:r(e,i.sourceTransaction)}}};return r(this,t.tx),t.tx}mergeBump(e){let t;for(let r=0;r<this.bumps.length;r++){const i=this.bumps[r];if(i===e)return r;if(i.blockHeight===e.blockHeight&&i.computeRoot()===e.computeRoot()){i.combine(e),t=r;break}}void 0===t&&(t=this.bumps.length,this.bumps.push(e));const r=this.bumps[t];for(const e of this.txs){const i=e.txid;if(null==e.bumpIndex)for(const n of r.path[0])if(n.hash===i){e.bumpIndex=t,n.txid=!0;break}}return t}mergeRawTx(e,t){const r=new ur(e,t);return this.removeExistingTxid(r.txid),this.txs.push(r),this.tryToValidateBumpIndex(r),r}mergeTransaction(e){const t=e.id("hex");let r;this.removeExistingTxid(t),null!=e.merklePath&&(r=this.mergeBump(e.merklePath));const i=new ur(e,r);if(this.txs.push(i),this.tryToValidateBumpIndex(i),r=i.bumpIndex,void 0===r)for(const t of e.inputs)null!=t.sourceTransaction&&this.mergeTransaction(t.sourceTransaction);return i}removeExistingTxid(e){const t=this.txs.findIndex((t=>t.txid===e));t>=0&&this.txs.splice(t,1)}mergeTxidOnly(e){let t=this.txs.find((t=>t.txid===e));return null==t&&(t=new ur(e),this.txs.push(t),this.tryToValidateBumpIndex(t)),t}mergeBeefTx(e){let t=this.findTxid(e.txid);if(e.isTxidOnly&&null==t?t=this.mergeTxidOnly(e.txid):null==e._tx||null!=t&&!t.isTxidOnly?null==e._rawTx||null!=t&&!t.isTxidOnly||(t=this.mergeRawTx(e._rawTx)):t=this.mergeTransaction(e._tx),null==t)throw new Error(`Failed to merge BeefTx for txid: ${e.txid}`);return t}mergeBeef(e){const t=Array.isArray(e)?gr.fromBinary(e):e;for(const e of t.bumps)this.mergeBump(e);for(const e of t.txs)this.mergeBeefTx(e)}isValid(e){return this.verifyValid(e).valid}async verify(e,t){const r=this.verifyValid(t);if(!r.valid)return!1;for(const t of Object.keys(r.roots))if(!await e.isValidRootForHeight(r.roots[t],Number(t)))return!1;return!0}verifyValid(e){const t={valid:!1,roots:{}},r=this.sortTxs();if(r.missingInputs.length>0||r.notValid.length>0||r.txidOnly.length>0&&!0!==e||r.withMissingInputs.length>0)return t;const i={};for(const r of this.txs)if(r.isTxidOnly){if(!0!==e)return t;i[r.txid]=!0}const n=(e,r)=>{const i=e.computeRoot(r);return void 0!==t.roots[e.blockHeight]&&""!==t.roots[e.blockHeight]||(t.roots[e.blockHeight]=i),t.roots[e.blockHeight]===i};for(const e of this.bumps)for(const r of e.path[0])if(!0===r.txid&&"string"==typeof r.hash&&r.hash.length>0&&(i[r.hash]=!0,!n(e,r.hash)))return t;for(const e of this.txs)if(void 0!==e.bumpIndex&&null==this.bumps[e.bumpIndex].path[0].find((t=>t.hash===e.txid)))return t;for(const e of this.txs){for(const r of e.inputTxids)if(!i[r])return t;i[e.txid]=!0}return t.valid=!0,t}toWriter(e){e.writeUInt32LE(this.version),e.writeVarIntNum(this.bumps.length);for(const t of this.bumps)e.write(t.toBinary());e.writeVarIntNum(this.txs.length);for(const t of this.txs)t.toWriter(e,this.version)}toBinary(){this.sortTxs();const e=new Ue;return this.toWriter(e),e.toArray()}toBinaryAtomic(e){this.sortTxs();const t=this.findTxid(e);if(null==t)throw new Error(`${e} does not exist in this Beef`);const r=this.txs[this.txs.length-1]===t?this:this.clone();if(r!==this){const t=this.txs.findIndex((t=>t.txid===e));r.txs.splice(t+1)}const i=new Ue;return i.writeUInt32LE(br),i.writeReverse(Oe(e,"hex")),r.toWriter(i),i.toArray()}toHex(){return Ne(this.toBinary())}static fromReader(e){let t,r=e.readUInt32LE();if(r===br&&(t=Ne(e.readReverse(32)),r=e.readUInt32LE()),r!==fr&&r!==pr)throw new Error(`Serialized BEEF must start with ${fr} or ${pr} but starts with ${r}`);const i=new gr(r),n=e.readVarIntNum();for(let t=0;t<n;t++){const t=dr.fromReader(e,!1);i.bumps.push(t)}const s=e.readVarIntNum();for(let t=0;t<s;t++){const t=ur.fromReader(e,r);i.txs.push(t)}return i.atomicTxid=t,i}static fromBinary(e){const t=new Ke(e);return gr.fromReader(t)}static fromString(e,t="hex"){const r=Oe(e,t),i=new Ke(r);return gr.fromReader(i)}tryToValidateBumpIndex(e){if(void 0!==e.bumpIndex)return!0;const t=e.txid;for(let r=0;r<this.bumps.length;r++){const i=this.bumps[r].path[0].findIndex((e=>e.hash===t));if(i>=0)return e.bumpIndex=r,this.bumps[r].path[0][i].txid=!0,!0}return!1}sortTxs(){const e={},t={};let r=[];const i=[],n=[];for(const s of this.txs)t[s.txid]=s,s.isValid=s.hasProof,s.isValid?(e[s.txid]=!0,i.push(s)):s.isTxidOnly&&0===s.inputTxids.length?(e[s.txid]=!0,n.push(s)):r.push(s);const s={},a=[],o=r;r=[];for(const e of o){let i=!1;for(const r of e.inputTxids)void 0===t[r]&&(s[r]=!0,i=!0);i?a.push(e):r.push(e)}for(;r.length>0;){const t=r;r=[];for(const n of t)n.inputTxids.every((t=>e[t]))?(e[n.txid]=!0,i.push(n)):r.push(n);if(t.length===r.length)break}const c=r;return this.txs=a.concat(c).concat(n).concat(i),{missingInputs:Object.keys(s),notValid:c.map((e=>e.txid)),valid:Object.keys(e),withMissingInputs:a.map((e=>e.txid)),txidOnly:n.map((e=>e.txid))}}clone(){const e=new gr;return e.version=this.version,e.bumps=Array.from(this.bumps),e.txs=Array.from(this.txs),e}trimKnownTxids(e){for(let t=0;t<this.txs.length;){const r=this.txs[t];r.isTxidOnly&&e.includes(r.txid)?this.txs.splice(t,1):t++}}getValidTxids(){return this.sortTxs().valid}toLogString(){let e="";e+=`BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid().toString()}\n`;let t=-1;for(const r of this.bumps)t++,e+=` BUMP ${t}\n block: ${r.blockHeight}\n txids: [\n${r.path[0].filter((e=>!0===e.txid)).map((e=>` '${e.hash??""}'`)).join(",\n")}\n ]\n`;t=-1;for(const r of this.txs)t++,e+=` TX ${t}\n txid: ${r.txid}\n`,void 0!==r.bumpIndex&&(e+=` bumpIndex: ${r.bumpIndex}\n`),r.isTxidOnly?e+=" txidOnly\n":e+=` rawTx length=${r.rawTx?.length??0}\n`,r.inputTxids.length>0&&(e+=` inputs: [\n${r.inputTxids.map((e=>` '${e}'`)).join(",\n")}\n ]\n`);return e}addComputedLeaves(){for(const t of this.bumps)for(let r=1;r<t.path.length;r++)for(const i of t.path[r-1])if("string"==typeof i.hash&&!(1&i.offset)){const n=t.path[r-1].find((e=>e.offset===i.offset+1)),s=i.offset>>1;void 0!==n&&"string"==typeof n.hash&&t.path[r].every((e=>e.offset!==s))&&t.path[r].push({offset:s,hash:(e=n.hash+i.hash,Ne(ve(Oe(e,"hex").reverse()).reverse()))})}var e}}class mr{version;inputs;outputs;lockTime;metadata;merklePath;cachedHash;static addPathOrInputs(e,t,r){if("number"==typeof e.pathIndex){const t=r[e.pathIndex];if("object"!=typeof t)throw new Error("Invalid merkle path index found in BEEF!");e.tx.merklePath=t}else for(const i of e.tx.inputs){if(void 0===i.sourceTXID)throw new Error("Input sourceTXID is undefined");const e=t[i.sourceTXID];if("object"!=typeof e)throw new Error(`Reference to unknown TXID in BEEF: ${i.sourceTXID??"undefined"}`);i.sourceTransaction=e.tx,this.addPathOrInputs(e,t,r)}}static fromBEEF(e,t){const{tx:r}=mr.fromAnyBeef(e,t);return r}static fromAtomicBEEF(e){const{tx:t,txid:r,beef:i}=mr.fromAnyBeef(e);if(r!==i.atomicTxid)throw i.atomicTxid?new Error(`Transaction with TXID ${i.atomicTxid} not found in BEEF data.`):new Error("beef must conform to BRC-95 and must contain the subject txid.");return t}static fromAnyBeef(e,t){const r=gr.fromBinary(e);if(r.txs.length<1)throw new Error("beef must include at least one transaction.");const i=t||r.atomicTxid||r.txs.slice(-1)[0].txid,n=r.findAtomicTransaction(i);if(null==n)throw t?new Error(`Transaction with TXID ${i} not found in BEEF data.`):new Error("beef does not contain transaction for atomic txid.");return{tx:n,beef:r,txid:i}}static fromEF(e){const t=new Ke(e),r=t.readUInt32LE();if("0000000000ef"!==Ne(t.read(6)))throw new Error("Invalid EF marker");const i=t.readVarIntNum(),n=[];for(let e=0;e<i;e++){const e=Ne(t.readReverse(32)),r=t.readUInt32LE(),i=t.readVarIntNum(),s=t.read(i),a=Mt.fromBinary(s),o=t.readUInt32LE(),c=t.readUInt64LEBn().toNumber(),h=t.readVarIntNum(),d=t.read(h),u=qt.fromBinary(d),l=new mr(void 0,[],[],void 0);l.outputs=Array(r+1).fill(null),l.outputs[r]={satoshis:c,lockingScript:u},n.push({sourceTransaction:l,sourceTXID:e,sourceOutputIndex:r,unlockingScript:a,sequence:o})}const s=t.readVarIntNum(),a=[];for(let e=0;e<s;e++){const e=t.readUInt64LEBn().toNumber(),r=t.readVarIntNum(),i=t.read(r),n=qt.fromBinary(i);a.push({satoshis:e,lockingScript:n})}const o=t.readUInt32LE();return new mr(r,n,a,o)}static parseScriptOffsets(e){const t=new Ke(e),r=[],i=[];t.pos+=4;const n=t.readVarIntNum();for(let e=0;e<n;e++){t.pos+=36;const i=t.readVarIntNum();r.push({vin:e,offset:t.pos,length:i}),t.pos+=i+4}const s=t.readVarIntNum();for(let e=0;e<s;e++){t.pos+=8;const r=t.readVarIntNum();i.push({vout:e,offset:t.pos,length:r}),t.pos+=r}return{inputs:r,outputs:i}}static fromReader(e){const t=e.readUInt32LE(),r=e.readVarIntNum(),i=[];for(let t=0;t<r;t++){const t=Ne(e.readReverse(32)),r=e.readUInt32LE(),n=e.readVarIntNum(),s=e.read(n),a=Mt.fromBinary(s),o=e.readUInt32LE();i.push({sourceTXID:t,sourceOutputIndex:r,unlockingScript:a,sequence:o})}const n=e.readVarIntNum(),s=[];for(let t=0;t<n;t++){const t=e.readUInt64LEBn().toNumber(),r=e.readVarIntNum(),i=e.read(r),n=qt.fromBinary(i);s.push({satoshis:t,lockingScript:n})}const a=e.readUInt32LE();return new mr(t,i,s,a)}static fromBinary(e){const t=new Ke(e);return mr.fromReader(t)}static fromHex(e){return mr.fromBinary(Oe(e,"hex"))}static fromHexEF(e){return mr.fromEF(Oe(e,"hex"))}static fromHexBEEF(e,t){return mr.fromBEEF(Oe(e,"hex"),t)}constructor(e=1,t=[],r=[],i=0,n=new Map,s){this.version=e,this.inputs=t,this.outputs=r,this.lockTime=i,this.metadata=n,this.merklePath=s}addInput(e){if(void 0===e.sourceTXID&&void 0===e.sourceTransaction)throw new Error("A reference to an an input transaction is required. If the input transaction itself cannot be referenced, its TXID must still be provided.");void 0===e.sequence&&(e.sequence=4294967295),this.cachedHash=void 0,this.inputs.push(e)}addOutput(e){if(this.cachedHash=void 0,!0!==e.change){if(void 0===e.satoshis)throw new Error("either satoshis must be defined or change must be set to true");if(e.satoshis<0)throw new Error("satoshis must be a positive integer or zero")}if(null==e.lockingScript)throw new Error("lockingScript must be defined");this.outputs.push(e)}addP2PKHOutput(e,t){const r=(new Zt).lock(e);if(void 0===t)return this.addOutput({lockingScript:r,change:!0});this.addOutput({lockingScript:r,satoshis:t})}updateMetadata(e){this.metadata={...this.metadata,...e}}async fee(e=new tr(1),t="equal"){if(this.cachedHash=void 0,"number"==typeof e){const t=e;e={computeFee:async()=>t}}const r=await e.computeFee(this),i=this.calculateChange(r);i<=0?this.outputs=this.outputs.filter((e=>!0!==e.change)):this.distributeChange(i,t)}calculateChange(e){let t=0;for(const e of this.inputs){if("object"!=typeof e.sourceTransaction)throw new Error("Source transactions are required for all inputs during fee computation");t+=e.sourceTransaction.outputs[e.sourceOutputIndex].satoshis??0}t-=e;for(const e of this.outputs)!0!==e.change&&void 0!==e.satoshis&&(t-=e.satoshis);return t}distributeChange(e,t){let r=0;const i=this.outputs.filter((e=>e.change));if("random"===t?r=this.distributeRandomChange(e,i):"equal"===t&&(r=this.distributeEqualChange(e,i)),r<e){const t=this.outputs[this.outputs.length-1];void 0!==t.satoshis?t.satoshis+=e-r:t.satoshis=e-r}}distributeRandomChange(e,t){let r=0,i=e;const n=Array(t.length).fill(1);i-=t.length,r+=t.length;for(let e=0;e<t.length-1;e++){const t=this.benfordNumber(0,i);n[e]=n[e]+t,r+=t,i-=t}for(const e of this.outputs)!0===e.change&&(e.satoshis=n.shift());return r}distributeEqualChange(e,t){let r=0;const i=Math.floor(e/t.length);for(const e of t)r+=i,e.satoshis=i;return r}benfordNumber(e,t){const r=Math.floor(9*Math.random())+1;return Math.floor(e+(t-e)*Math.log10(1+1/r)/Math.log10(10))}getFee(){let e=0;for(const t of this.inputs){if("object"!=typeof t.sourceTransaction)throw new Error("Source transactions or sourceSatoshis are required for all inputs to calculate fee");e+=t.sourceTransaction.outputs[t.sourceOutputIndex].satoshis??0}let t=0;for(const e of this.outputs)t+=e.satoshis??0;return e-t}async sign(){this.cachedHash=void 0;for(const e of this.outputs)if(void 0===e.satoshis)throw!0===e.change?new Error("There are still change outputs with uncomputed amounts. Use the fee() method to compute the change amounts and transaction fees prior to signing."):new Error("One or more transaction outputs is missing an amount. Ensure all output amounts are provided before signing.");const e=await Promise.all(this.inputs.map((async(e,t)=>"object"==typeof this.inputs[t].unlockingScriptTemplate?await(this.inputs[t]?.unlockingScriptTemplate?.sign(this,t)):await Promise.resolve(void 0))));for(let t=0,r=this.inputs.length;t<r;t++)"object"==typeof this.inputs[t].unlockingScriptTemplate&&(this.inputs[t].unlockingScript=e[t])}async broadcast(e=or()){return await e.broadcast(this)}toBinary(){const e=new Ue;e.writeUInt32LE(this.version),e.writeVarIntNum(this.inputs.length);for(const t of this.inputs){if(void 0===t.sourceTXID){if(null==t.sourceTransaction)throw new Error("sourceTransaction is undefined");e.write(t.sourceTransaction.hash())}else e.writeReverse(Oe(t.sourceTXID,"hex"));if(e.writeUInt32LE(t.sourceOutputIndex),null==t.unlockingScript)throw new Error("unlockingScript is undefined");const r=t.unlockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r),e.writeUInt32LE(t.sequence??0)}e.writeVarIntNum(this.outputs.length);for(const t of this.outputs){e.writeUInt64LE(t.satoshis??0);const r=t.lockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r)}return e.writeUInt32LE(this.lockTime),e.toArray()}toEF(){const e=new Ue;e.writeUInt32LE(this.version),e.write([0,0,0,0,0,239]),e.writeVarIntNum(this.inputs.length);for(const t of this.inputs){if(void 0===t.sourceTransaction)throw new Error("All inputs must have source transactions when serializing to EF format");if(void 0===t.sourceTXID?e.write(t.sourceTransaction.hash()):e.write(Oe(t.sourceTXID,"hex").reverse()),e.writeUInt32LE(t.sourceOutputIndex),null==t.unlockingScript)throw new Error("unlockingScript is undefined");const r=t.unlockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r),e.writeUInt32LE(t.sequence??0),e.writeUInt64LE(t.sourceTransaction.outputs[t.sourceOutputIndex].satoshis??0);const i=t.sourceTransaction.outputs[t.sourceOutputIndex].lockingScript.toBinary();e.writeVarIntNum(i.length),e.write(i)}e.writeVarIntNum(this.outputs.length);for(const t of this.outputs){e.writeUInt64LE(t.satoshis??0);const r=t.lockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r)}return e.writeUInt32LE(this.lockTime),e.toArray()}toHexEF(){return Ne(this.toEF())}toHex(){return Ne(this.toBinary())}toHexBEEF(){return Ne(this.toBEEF())}toHexAtomicBEEF(){return Ne(this.toAtomicBEEF())}hash(e){let t;return null!=this.cachedHash?t=this.cachedHash:(t=ve(this.toBinary()),this.cachedHash=t),"hex"===e?Ne(t):t}id(e){const t=[...this.hash()];return t.reverse(),"hex"===e?Ne(t):t}async verify(e=hr(),t,r){const i=new Set,n=[this];for(;n.length>0;){const s=n.shift(),a=s?.id("hex")??"";if(null!=a&&""!==a&&i.has(a))continue;if("object"==typeof s?.merklePath){if("scripts only"===e){null!=a&&i.add(a);continue}if(await s.merklePath.verify(a,e)){i.add(a);continue}}if(void 0!==t){if(void 0===s)throw new Error("Transaction is undefined");const e=mr.fromEF(s.toEF());if(delete e.outputs[0].satoshis,e.outputs[0].change=!0,await e.fee(t),s.getFee()<e.getFee())throw new Error(`Verification failed because the transaction ${a} has an insufficient fee and has not been mined.`)}let o=0;if(void 0===s)throw new Error("Transaction is undefined");for(let e=0;e<s.inputs.length;e++){const t=s.inputs[e];if("object"!=typeof t.sourceTransaction)throw new Error(`Verification failed because the input at index ${e} of transaction ${a} is missing an associated source transaction. This source transaction is required for transaction verification because there is no merkle proof for the transaction spending a UTXO it contains.`);if("object"!=typeof t.unlockingScript)throw new Error(`Verification failed because the input at index ${e} of transaction ${a} is missing an associated unlocking script. This script is required for transaction verification because there is no merkle proof for the transaction spending the UTXO.`);const c=t.sourceTransaction.outputs[t.sourceOutputIndex];o+=c.satoshis??0;const h=t.sourceTransaction.id("hex");i.has(h)||n.push(t.sourceTransaction);const d=s.inputs.filter(((t,r)=>r!==e));if(void 0===t.sourceTXID&&(t.sourceTXID=h),!new Gt({sourceTXID:t.sourceTXID,sourceOutputIndex:t.sourceOutputIndex,lockingScript:c.lockingScript,sourceSatoshis:c.satoshis??0,transactionVersion:s.version,otherInputs:d,unlockingScript:t.unlockingScript,inputSequence:t.sequence??0,inputIndex:e,outputs:s.outputs,lockTime:s.lockTime,memoryLimit:r}).validate())return!1}let c=0;for(const e of s.outputs){if("number"!=typeof e.satoshis)throw new Error("Every output must have a defined amount during transaction verification.");c+=e.satoshis}if(c>o)return!1;i.add(a)}return!0}toBEEF(e){const t=new Ue;t.writeUInt32LE(fr);const r=[],i=[],n=t=>{const s={tx:t},a="object"==typeof t.merklePath;if(a){let e=!1;for(let i=0;i<r.length;i++){if(r[i]===t.merklePath){s.pathIndex=i,e=!0;break}if(null!==t.merklePath&&void 0!==t.merklePath&&r[i].blockHeight===t.merklePath.blockHeight&&r[i].computeRoot()===t.merklePath.computeRoot()){r[i].combine(t.merklePath),s.pathIndex=i,e=!0;break}}e||(s.pathIndex=r.length,null!==t.merklePath&&void 0!==t.merklePath&&r.push(t.merklePath))}if(i.some((e=>e.tx.id("hex")===t.id("hex")))||i.unshift(s),!a)for(let r=0;r<t.inputs.length;r++){const i=t.inputs[r];if("object"==typeof i.sourceTransaction)n(i.sourceTransaction);else if(!1===e)throw new Error("A required source transaction is missing!")}};n(this),t.writeVarIntNum(r.length);for(const e of r)t.write(e.toBinary());t.writeVarIntNum(i.length);for(const e of i)t.write(e.tx.toBinary()),"number"==typeof e.pathIndex?(t.writeUInt8(1),t.writeVarIntNum(e.pathIndex)):t.writeUInt8(0);return t.toArray()}toAtomicBEEF(e){const t=new Ue;t.writeUInt32LE(16843009),t.write(this.hash());const r=this.toBEEF(e);return t.write(r),t.toArray()}}function yr(e){return"success"===e.status}function vr(e){return"error"===e.status}const Ir=class extends gr{knownTo={};constructor(e){if(super(),null!=e)for(const t of e)this.addParty(t)}isParty(e){return Object.keys(this.knownTo).includes(e)}addParty(e){if(this.isParty(e))throw new Error(`Party ${e} already exists.`);this.knownTo[e]={}}getKnownTxidsForParty(e){const t=this.knownTo[e];if(void 0===t)throw new Error(`Party ${e} is unknown.`);return Object.keys(t)}getTrimmedBeefForParty(e){const t=this.getKnownTxidsForParty(e),r=this.clone();return r.trimKnownTxids(t),r}addKnownTxidsForParty(e,t){this.isParty(e)||this.addParty(e);const r=this.knownTo[e];for(const e of t)r[e]=!0,this.mergeTxidOnly(e)}mergeBeefFromParty(e,t){const r=Array.isArray(t)?gr.fromBinary(t):t,i=r.getValidTxids();this.mergeBeef(r),this.addKnownTxidsForParty(e,i)}};class kr{network;URL;httpClient;constructor(e="main",t=nr()){this.network=e,this.URL=`https://api.whatsonchain.com/v1/bsv/${e}/tx/raw`,this.httpClient=t}async broadcast(e){const t={method:"POST",headers:{"Content-Type":"application/json",Accept:"text/plain"},data:{txhex:e.toHex()}};try{const e=await this.httpClient.request(this.URL,t);return e.ok?{status:"success",txid:e.data,message:"broadcast successful"}:{status:"error",code:e.status.toString()??"ERR_UNKNOWN",description:e.data??"Unknown error"}}catch(e){return{status:"error",code:"500",description:"string"==typeof e.message?e.message:"Internal Server Error"}}}}class Sr{https;constructor(e){this.https=e}async request(e,t){return await new Promise(((r,i)=>{const n=this.https.request(e,t,(e=>{let t="";e.on("data",(e=>{t+=e})),e.on("end",(()=>{const i=e.statusCode>=200&&e.statusCode<=299,n=e.headers["content-type"],s=""!==t&&"string"==typeof n&&n.startsWith("application/json")?JSON.parse(t):t;r({status:e.statusCode,statusText:e.statusMessage,ok:i,data:s})}))}));n.on("error",(e=>{i(e)})),null!==t.data&&void 0!==t.data&&n.write(Buffer.from(t.data)),n.end()}))}}class Er{fetch;constructor(e){this.fetch=e}async request(e,t){const r={method:t.method,headers:t.headers,body:t.data},i=await this.fetch(e,r),n=await i.text();return{ok:i.ok,status:i.status,statusText:i.statusText,data:n}}}function Pr(){const e={async request(...e){throw new Error("No method available to perform HTTP request")}};if("undefined"!=typeof window&&"function"==typeof window.fetch)return new Er(window.fetch.bind(window));if("undefined"==typeof require)return e;try{const e=require("https");return new Sr(e)}catch(t){return e}}class Nr{URL;httpClient;constructor(e,t=Pr()){this.URL=e,this.httpClient=t}async broadcast(e){const t=e.toEF(),r={method:"POST",headers:{"Content-Type":"application/octet-stream"},data:new Blob([new Uint8Array(t)])};try{const t=await this.httpClient.request(this.URL,r);return t.ok?{status:"success",txid:e.id("hex"),message:"broadcast successful"}:{status:"error",code:t.status.toString()??"ERR_UNKNOWN",description:t.data??"Unknown error"}}catch(e){return{status:"error",code:"500",description:"string"==typeof e.message?e.message:"Internal Server Error"}}}}class Or{baseUrl;httpClient;apiKey;constructor(e,t={}){const{httpClient:r,apiKey:i}=t;this.baseUrl=e,this.httpClient=r??nr(),this.apiKey=i??""}async isValidRootForHeight(e,t){const r={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.apiKey}`},data:[{blockHeight:t,merkleRoot:e}]};try{const e=await this.httpClient.request(`${this.baseUrl}/api/v1/chain/merkleroot/verify`,r);if(e.ok)return"CONFIRMED"===e.data.confirmationState;throw new Error(`Failed to verify merkleroot for height ${t} because of an error: ${JSON.stringify(e.data)}`)}catch(e){throw new Error(`Failed to verify merkleroot for height ${t} because of an error: ${e instanceof Error?e.message:String(e)}`)}}async currentHeight(){const e={method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${this.apiKey}`}};try{const t=await this.httpClient.request(`${this.baseUrl}/api/v1/chain/tip/longest`,e);if(t.ok&&t.data&&"number"==typeof t.data.height)return t.data.height;throw new Error(`Failed to get current height because of an error: ${JSON.stringify(t.data)}`)}catch(e){throw new Error(`Failed to get current height because of an error: ${e instanceof Error?e.message:String(e)}`)}}}const _r="42423301",Ar=(e,t,r)=>{const i="object"!=typeof r;if(i){const e=new rt,t=new bt(1),i=e.g.mul(t);r=new ct(i.x,i.y)}const n=ut(32),s=`2-message signing-${Fe(n)}`,a=t.deriveChild(r,s).sign(e).toDER(),o=t.toPublicKey().encode(!0);return[...Oe(_r,"hex"),...o,...i?[0]:r.encode(!0),...n,...a]},xr=(e,t,r)=>{const i=new Ke(t),n=Ne(i.read(4));if(n!==_r)throw new Error(`Message version mismatch: Expected ${_r}, received ${n}`);const s=ct.fromString(Ne(i.read(33))),[a]=i.read(1);if(0===a)r=new bt(1);else{const e=i.read(32),t=Ne([a,...e]);if("object"!=typeof r)throw new Error(`This signature can only be verified with knowledge of a specific private key. The associated public key is: ${t}`);const n=r.toPublicKey().encode(!0,"hex");if(t!==n)throw new Error(`The recipient public key is ${n} but the signature requres the recipient to have public key ${t}`)}const o=Fe(i.read(32)),c=Ne(i.read(i.bin.length-i.pos)),h=it.fromDER(c,"hex"),d=`2-message signing-${o}`;return s.deriveChild(r,d).verify(e,h)},Tr="42421033",Fr=(e,t,r)=>{const i=ut(32),n=`2-message encryption-${Fe(i)}`,s=t.deriveChild(r,n),a=r.deriveChild(t,n),o=s.deriveSharedSecret(a),c=new Dt(o.encode(!0).slice(1)).encrypt(e),h=t.toPublicKey().encode(!0);return[...Oe(Tr,"hex"),...h,...r.encode(!0),...i,...c]},Rr=(e,t)=>{const r=new Ke(e),i=Ne(r.read(4));if(i!==Tr)throw new Error(`Message version mismatch: Expected ${Tr}, received ${i}`);const n=ct.fromString(Ne(r.read(33))),s=Ne(r.read(33)),a=t.toPublicKey().encode(!0,"hex");if(s!==a)throw new Error(`The encrypted message expects a recipient public key of ${s}, but the provided key is ${a}`);const o=Fe(r.read(32)),c=r.read(r.bin.length-r.pos),h=`2-message encryption-${o}`,d=n.deriveChild(t,h),u=t.deriveChild(n,h),l=d.deriveSharedSecret(u);return new Dt(l.encode(!0).slice(1)).decrypt(c)},Cr=e=>{const t=new Ue;t.writeVarIntNum(24),t.write(Oe("Bitcoin Signed Message:\n","utf8")),t.writeVarIntNum(e.length),t.write(e);const r=t.toArray();return ve(r)},Vr=(e,t,r="base64")=>{const i=Cr(e),n=at(new h(i),t,!0);if("raw"===r)return n;const s=new h(i),a=n.CalculateRecoveryFactor(t.toPublicKey(),s);return n.toCompact(a,!0,"base64")},Dr=(e,t,r)=>{const i=Cr(e);return ot(new h(i),t,r)};class Br{versionBytesNum;depth;parentFingerPrint;childIndex;chainCode;privKey;pubKey;constants={pubKey:76067358,privKey:76066276};constructor(e,t,r,i,n,s,a){this.versionBytesNum=e,this.depth=t,this.parentFingerPrint=r,this.childIndex=i,this.chainCode=n,this.privKey=s,this.pubKey=a}fromRandom(){return this.versionBytesNum=this.constants.privKey,this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=ut(32),this.privKey=bt.fromRandom(),this.pubKey=this.privKey.toPublicKey(),this}static fromRandom(){return(new this).fromRandom()}static fromString(e){return(new this).fromString(e)}fromString(e){const t=Be(e);return this.fromBinary([...t.prefix,...t.data])}static fromSeed(e){return(new this).fromSeed(e)}fromSeed(e){if(e.length<16)throw new Error("Need more than 128 bits of entropy");if(e.length>64)throw new Error("More than 512 bits of entropy is nonstandard");const t=Se(Oe("Bitcoin seed","utf8"),e);return this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=t.slice(32,64),this.versionBytesNum=this.constants.privKey,this.privKey=new bt(t.slice(0,32)),this.pubKey=this.privKey.toPublicKey(),this}static fromBinary(e){return(new this).fromBinary(e)}fromBinary(e){if(78!==e.length)throw new Error("incorrect bip32 data length");const t=new Ke(e);this.versionBytesNum=t.readUInt32BE(),this.depth=t.readUInt8(),this.parentFingerPrint=t.read(4),this.childIndex=t.readUInt32BE(),this.chainCode=t.read(32);const r=t.read(33),i=this.versionBytesNum===this.constants.privKey,n=this.versionBytesNum===this.constants.pubKey;if(i&&0===r[0])this.privKey=new bt(r.slice(1,33)),this.pubKey=this.privKey.toPublicKey();else{if(!n||2!==r[0]&&3!==r[0])throw new Error("Invalid key");this.pubKey=ct.fromString(Ne(r))}return this}toString(){const e=this.toBinary();return De(e,[])}derive(e){if("m"===e)return this;const t=e.split("/");let r=this;for(const[e,i]of t.entries()){if(0===e){if("m"!==i)throw new Error("invalid path");continue}if(parseInt(i.replace("'",""),10).toString()!==i.replace("'",""))throw new Error("invalid path");const t=i.length>1&&"'"===i[i.length-1];let n=2147483647&parseInt(t?i.slice(0,i.length-1):i,10);t&&(n+=2147483648),r=r.deriveChild(n)}return r}deriveChild(e){if("number"!=typeof e)throw new Error("i must be a number");const t=[];t.push(e>>24&255),t.push(e>>16&255),t.push(e>>8&255),t.push(255&e);const r=[...t],i=!!(2147483648&e),n=this.versionBytesNum===this.constants.privKey;if(i&&(null===this.privKey||void 0===this.privKey||!n))throw new Error("Cannot do private key derivation without private key");let s=null;if(null!==this.privKey&&void 0!==this.privKey){let e=null;e=i?[0,...this.privKey.toArray("be",32),...r]:[...this.pubKey.encode(!0),...r];const t=Se(this.chainCode,e),n=new h(t.slice(0,32)),a=t.slice(32,64),o=n.add(this.privKey).mod((new rt).n);s=new Br,s.chainCode=a,s.privKey=new bt(o.toArray()),s.pubKey=s.privKey.toPublicKey()}else{const e=[...this.pubKey.encode(!0),...r],t=Se(this.chainCode,e),i=new h(t.slice(0,32)),n=t.slice(32,64),a=(new rt).g.mul(i),o=this.pubKey,c=a.add(o),d=new ct(c.x,c.y);s=new Br,s.chainCode=n,s.pubKey=d}s.childIndex=e;const a=Ie(this.pubKey.encode(!0));return s.parentFingerPrint=a.slice(0,4),s.versionBytesNum=this.versionBytesNum,s.depth=this.depth+1,s}toPublic(){const e=new Br(this.versionBytesNum,this.depth,this.parentFingerPrint,this.childIndex,this.chainCode,this.privKey,this.pubKey);return e.versionBytesNum=this.constants.pubKey,e.privKey=void 0,e}toBinary(){const e=this.versionBytesNum===this.constants.privKey,t=this.versionBytesNum===this.constants.pubKey;if(e)return(new Ue).writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).writeUInt8(0).write(this.privKey.toArray("be",32)).toArray();if(t)return(new Ue).writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).write(this.pubKey.encode(!0)).toArray();throw new Error("bip32: invalid versionBytesNum byte")}isPrivate(){return this.versionBytesNum===this.constants.privKey}}const Ur={value:["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],space:" "};class Kr{mnemonic;seed;Wordlist;constructor(e,t,r=Ur){this.mnemonic=e??"",this.seed=t??[],this.Wordlist=r}toBinary(){const e=new Ue;if(""!==this.mnemonic){const t=Oe(this.mnemonic,"utf8");e.writeVarIntNum(t.length),e.write(t)}else e.writeVarIntNum(0);return this.seed.length>0?(e.writeVarIntNum(this.seed.length),e.write(this.seed)):e.writeVarIntNum(0),e.toArray()}fromBinary(e){const t=new Ke(e),r=t.readVarIntNum();r>0&&(this.mnemonic=Te(t.read(r),"utf8"));const i=t.readVarIntNum();return i>0&&(this.seed=t.read(i)),this}fromRandom(e){if((null==e||isNaN(e)||0===e)&&(e=128),e%32!=0)throw new Error("bits must be multiple of 32");if(e<128)throw new Error("bits must be at least 128");const t=ut(e/8);return this.entropy2Mnemonic(t),this.mnemonic2Seed(),this}static fromRandom(e){return(new this).fromRandom(e)}fromEntropy(e){return this.entropy2Mnemonic(e),this}static fromEntropy(e){return(new this).fromEntropy(e)}fromString(e){return this.mnemonic=e,this}static fromString(e){return(new this).fromString(e)}toString(){return this.mnemonic}toSeed(e){return this.mnemonic2Seed(e),this.seed}entropy2Mnemonic(e){if(e.length<16)throw new Error("Entropy is less than 128 bits. It must be 128 bits or more.");const t=me(e);let r="";const i=8*e.length;for(let t=0;t<e.length;t++)r+=("00000000"+e[t].toString(2)).slice(-8);let n=t[0].toString(2);if(n=("00000000"+n).slice(-8).slice(0,i/32),r+=n,r.length%11!=0)throw new Error("internal error - entropy not an even multiple of 11 bits - "+r.length.toString());let s="";for(let e=0;e<r.length/11;e++){""!==s&&(s+=this.Wordlist.space);const t=parseInt(r.slice(11*e,11*(e+1)),2);s+=this.Wordlist.value[t]}return this.mnemonic=s,this}check(){const e=this.mnemonic.split(this.Wordlist.space);let t="";for(let r=0;r<e.length;r++){const i=this.Wordlist.value.indexOf(e[r]);if(i<0)return!1;t+=("00000000000"+i.toString(2)).slice(-11)}if(t.length%11!=0)throw new Error("internal error - entropy not an even multiple of 11 bits - "+t.length.toString());const r=t.length/33,i=t.slice(-r),n=t.slice(0,t.length-r),s=[];for(let e=0;e<n.length/8;e++)s.push(parseInt(t.slice(8*e,8*(e+1)),2));let a=me(s.slice(0,n.length/8))[0].toString(2);return a=("00000000"+a).slice(-8).slice(0,r),a===i}mnemonic2Seed(e=""){let t=this.mnemonic;if(!this.check())throw new Error("Mnemonic does not pass the check - was the mnemonic typed incorrectly? Are there extra spaces?");if("string"!=typeof e)throw new Error("passphrase must be a string or undefined");t=t.normalize("NFKD"),e=e.normalize("NFKD");const r=Oe(t,"utf8"),i=[...Oe("mnemonic","utf8"),...Oe(e,"utf8")];return this.seed=Ee(r,i,2048,64,"sha512"),this}isValid(e=""){let t;try{this.mnemonic2Seed(e),t=!0}catch{t=!1}return t}static isValid(e,t=""){return new Kr(e).isValid(t)}}function Lr(e){let t,r,i;0===this._tables[0][0][0]&&this._precompute();const n=this._tables[0][4],s=this._tables[1],a=e.length;let o,c=1;if(4!==a&&6!==a&&8!==a)throw new Error("invalid aes key size");for(this._key=[r=e.slice(0),i=[]],o=a;o<4*a+28;o++)t=r[o-1],(o%a==0||8===a&&o%a==4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],o%a==0&&(t=t<<8^t>>>24^c<<24,c=c<<1^283*(c>>7))),r[o]=r[o-a]^t;for(let e=0;o>0;e++,o--)t=r[3&e?o:o-4],i[e]=o<=4||e<4?t:s[0][n[t>>>24]]^s[1][n[t>>16&255]]^s[2][n[t>>8&255]]^s[3][n[255&t]]}Lr.prototype={encrypt:function(e){return this._crypt(e,0)},decrypt:function(e){return this._crypt(e,1)},_tables:[[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)]],_precompute:function(){const e=this._tables[0],t=this._tables[1],r=e[4],i=t[4];let n,s,a;const o=new Uint8Array(256),c=new Uint8Array(256);let h,d,u,l,f,p;for(n=0;n<256;n++)c[(o[n]=n<<1^283*(n>>7))^n]=n;for(s=a=0;0===r[s];s^=0!==h?h:1,a=0!==c[a]?c[a]:1)for(l=a^a<<1^a<<2^a<<3^a<<4,l=l>>8^255&l^99,r[s]=l,i[l]=s,u=o[d=o[h=o[s]]],p=16843009*u^65537*d^257*h^16843008*s,f=257*o[l]^16843008*l,n=0;n<4;n++)e[n][s]=f=f<<24^f>>>8,t[n][l]=p=p<<24^p>>>8},_crypt:function(e,t){if(4!==e.length)throw new Error("invalid aes block size");const r=this._key[t];let i,n,s,a=e[0]^r[0],o=e[1===t?3:1]^r[1],c=e[2]^r[2],h=e[1===t?1:3]^r[3];const d=r.length/4-2;let u,l=4;const f=new Uint32Array(4),p=this._tables[t],b=p[0],w=p[1],g=p[2],m=p[3],y=p[4];for(u=0;u<d;u++)i=b[a>>>24]^w[o>>16&255]^g[c>>8&255]^m[255&h]^r[l],n=b[o>>>24]^w[c>>16&255]^g[h>>8&255]^m[255&a]^r[l+1],s=b[c>>>24]^w[h>>16&255]^g[a>>8&255]^m[255&o]^r[l+2],h=b[h>>>24]^w[a>>16&255]^g[o>>8&255]^m[255&c]^r[l+3],l+=4,a=i,o=n,c=s;for(u=0;u<4;u++)f[1===t?3&-u:u]=y[a>>>24]<<24^y[o>>16&255]<<16^y[c>>8&255]<<8^y[255&h]^r[l++],i=a,a=o,o=c,c=h,h=i;return f}};class Hr{static encrypt(e,t){const r=Hr.buf2Words(t),i=Hr.buf2Words(e),n=new Lr(r).encrypt(i);return Hr.words2Buf(n)}static decrypt(e,t){const r=Hr.buf2Words(e),i=new Lr(Hr.buf2Words(t)).decrypt(r);return Hr.words2Buf(i)}static buf2Words(e){if(e.length%4!=0)throw new Error("buf length must be a multiple of 4");const t=[];for(let r=0;r<e.length/4;r++){const i=16777216*e[4*r]+(e[4*r+1]<<16|e[4*r+2]<<8|e[4*r+3]);t.push(i)}return t}static words2Buf(e){const t=new Array(4*e.length);for(let r=0;r<e.length;r++){const i=e[r];t[4*r]=i>>>24&255,t[4*r+1]=i>>>16&255,t[4*r+2]=i>>>8&255,t[4*r+3]=255&i}return t}}class qr{static buf2BlocksBuf(e,t){const r=t/8,i=[];for(let n=0;n<=e.length/r;n++){let s=e.slice(n*r,n*r+r);s.length<t&&(s=qr.pkcs7Pad(s,t)),i.push(s)}return i}static blockBufs2Buf(e){let t=e[e.length-1];return t=qr.pkcs7Unpad(t),e[e.length-1]=t,e.flat()}static encrypt(e,t,r,i){const n=8*t.length,s=qr.buf2BlocksBuf(e,n);return qr.encryptBlocks(s,t,r,i).flat()}static decrypt(e,t,r,i){const n=t.length,s=[];for(let t=0;t<e.length/n;t++)s.push(e.slice(t*n,t*n+n));const a=qr.decryptBlocks(s,t,r,i);return qr.blockBufs2Buf(a)}static encryptBlock(e,t,r,i){const n=qr.xorBufs(e,t);return r.encrypt(n,i)}static decryptBlock(e,t,r,i){const n=r.decrypt(e,i);return qr.xorBufs(n,t)}static encryptBlocks(e,t,r,i){const n=[];for(let s=0;s<e.length;s++){const a=e[s],o=qr.encryptBlock(a,t,r,i);n.push(o),t=o}return n}static decryptBlocks(e,t,r,i){const n=[];for(let s=0;s<e.length;s++){const a=e[s],o=qr.decryptBlock(a,t,r,i);n.push(o),t=a}return n}static pkcs7Pad(e,t){const r=t/8-e.length,i=new Array(r);return i.fill(r),[...e,...i]}static pkcs7Unpad(e){const t=e[e.length-1],r=e.slice(e.length-t,e.length),i=new Array(t);if(i.fill(t),Ne(r)!==Ne(i))throw new Error("invalid padding");return e.slice(0,e.length-t)}static xorBufs(e,t){if(e.length!==t.length)throw new Error("bufs must have the same length");const r=new Array(e.length);for(let i=0;i<e.length;i++)r[i]=e[i]^t[i];return r}}class Mr{static encrypt(e,t,r,i=!0){r=r??ut(16);const n=qr.encrypt(e,r,Hr,t);return i?[...r,...n]:[...n]}static decrypt(e,t,r){if(null==r){r=e.slice(0,16);const i=e.slice(16);return qr.decrypt(i,r,Hr,t)}{const i=e;return qr.decrypt(i,r,Hr,t)}}}class $r{static ivkEkM(e,t){const r=e,i=t.mul(r),n=new ct(i.x,i.y).encode(!0),s=ye(n);return{iv:s.slice(0,16),kE:s.slice(16,32),kM:s.slice(32,64)}}static electrumEncrypt(e,t,r,i=!1){let n=null;null==r&&(r=bt.fromRandom()),i||(n=r.toPublicKey().encode(!0));const{iv:s,kE:a,kM:o}=$r.ivkEkM(r,t),c=Mr.encrypt(e,a,s,!1),h=Oe("BIE1","utf8");let d;d=null!=n&&n.length>0?[...h,...n,...c]:[...h,...c];const u=ke(o,d);return[...d,...u]}static electrumDecrypt(e,t,r){const i=e.slice(0,4);if("BIE1"!==Te(i,"utf8"))throw new Error("Invalid Magic");let n=4,s=null;if(e.length-n-32>=33){const t=e[n];2===t||3===t?(s=e.slice(n,n+33),n+=33):4===t&&(s=e.slice(n,n+65),n+=65)}if(null!==s)null==r&&(r=ct.fromString(Ne(s)));else if(null==r)throw new Error("Sender public key is required");const{iv:a,kE:o,kM:c}=$r.ivkEkM(t,r),h=e.slice(n,e.length-32),d=e.slice(e.length-32,e.length),u=ke(c,e.slice(0,e.length-32));if(Ne(d)!==Ne(u))throw new Error("Invalid checksum");return Mr.decrypt(h,o,a)}static bitcoreEncrypt(e,t,r,i){null==r&&(r=bt.fromRandom()),null==i&&(i=ut(16));const n=r,s=r.toPublicKey().encode(!0),a=t.mul(n).getX().toArray("be",32),o=ye(a),c=o.slice(0,32),h=o.slice(32,64),d=Mr.encrypt(e,c,i),u=ke(h,[...d]);return[...s,...d,...u]}static bitcoreDecrypt(e,t){const r=t,i=ct.fromString(Ne(e.slice(0,33))).mul(r);if(i.eq(new Me(0,0)))throw new Error("P equals 0");const n=i.getX().toArray("be",32),s=ye(n),a=s.slice(0,32),o=s.slice(32,64),c=e.slice(33,e.length-32),h=e.slice(e.length-32,e.length),d=ke(o,c);if(Ne(h)!==Ne(d))throw new Error("Invalid checksum");return[...Mr.decrypt(c,a)]}}function zr(e,t){const r=new mr(0,[],[],0);return r.outputs=Array(e.vout+1).fill(null),r.outputs[e.vout]={satoshis:e.satoshis,lockingScript:qt.fromHex(e.script)},{sourceTransaction:r,sourceTXID:e.txid,sourceOutputIndex:e.vout,unlockingScriptTemplate:t,sequence:4294967295}}class Wr{static generate(e,t){const r=this.withDefaultOptions(t);return jr(e,this.getCounter(r.timestamp,r.period),r)}static validate(e,t,r){const i=this.withDefaultValidateOptions(r);if((t=t.trim()).length!==i.digits)return!1;const n=this.getCounter(i.timestamp,i.period),s=[n];for(let e=1;e<=i.skew;e++)s.push(n+e),s.push(n-e);for(const r of s)if(t===jr(e,r,i))return!0;return!1}static getCounter(e,t){const r=Math.floor(e/1e3);return Math.floor(r/t)}static withDefaultOptions(e){return{digits:2,algorithm:"SHA-1",period:30,timestamp:Date.now(),...e}}static withDefaultValidateOptions(e){return{skew:1,...this.withDefaultOptions(e)}}}function jr(e,t,r){const i=function(e,t,r){switch(r){case"SHA-1":return new pe(e).update(t);case"SHA-256":return new fe(e).update(t);case"SHA-512":return new be(e).update(t);default:throw new Error("unsupported HMAC algorithm")}}(e,new h(t).toArray("be",8),r.algorithm),n=i.digest(),s=15&n[n.length-1],a=n.slice(s,s+4);return(2147483647&new h(a).toNumber()).toString().slice(-r.digits)}var Xr;!function(e){e[e.Silent=0]="Silent",e[e.App=1]="App",e[e.Counterparty=2]="Counterparty"}(Xr||(Xr={}));class Gr{cacheSharedSecret;retrieveCachedSharedSecret;rootKey;identityKey;anyone;constructor(e,t,r){this.cacheSharedSecret=t,this.retrieveCachedSharedSecret=r,this.anyone=new bt(1).toPublicKey(),this.rootKey="anyone"===e?new bt(1):e,this.identityKey=this.rootKey.toPublicKey().toString()}derivePublicKey(e,t,r,i=!1){return r=this.normalizeCounterparty(r),i?this.rootKey.deriveChild(r,this.computeInvoiceNumber(e,t),this.cacheSharedSecret,this.retrieveCachedSharedSecret).toPublicKey():r.deriveChild(this.rootKey,this.computeInvoiceNumber(e,t),this.cacheSharedSecret,this.retrieveCachedSharedSecret)}derivePrivateKey(e,t,r){return r=this.normalizeCounterparty(r),this.rootKey.deriveChild(r,this.computeInvoiceNumber(e,t),this.cacheSharedSecret,this.retrieveCachedSharedSecret)}deriveSymmetricKey(e,t,r){r="anyone"===r?this.anyone:this.normalizeCounterparty(r);const i=this.derivePublicKey(e,t,r),n=this.derivePrivateKey(e,t,r);return new Dt(n.deriveSharedSecret(i)?.x?.toArray()??[])}revealCounterpartySecret(e){if("self"===e)throw new Error("Counterparty secrets cannot be revealed for counterparty=self.");e=this.normalizeCounterparty(e);const t=this.rootKey.toPublicKey();if(this.rootKey.deriveChild(t,"test").toHex()===this.rootKey.deriveChild(e,"test").toHex())throw new Error("Counterparty secrets cannot be revealed for counterparty=self.");return this.rootKey.deriveSharedSecret(e).encode(!0)}revealSpecificSecret(e,t,r){e=this.normalizeCounterparty(e);const i=this.rootKey.deriveSharedSecret(e),n=Oe(this.computeInvoiceNumber(t,r),"utf8");return ke(i.encode(!0),n)}normalizeCounterparty(e){if(null==e)throw new Error("counterparty must be self, anyone or a public key!");return"self"===e?this.rootKey.toPublicKey():"anyone"===e?new bt(1).toPublicKey():"string"==typeof e?ct.fromString(e):e}computeInvoiceNumber(e,t){const r=e[0];if(!Number.isInteger(r)||r<0||r>2)throw new Error("Protocol security level must be 0, 1, or 2");const i=e[1].toLowerCase().trim();if(t.length>800)throw new Error("Key IDs must be 800 characters or less");if(t.length<1)throw new Error("Key IDs must be 1 character or more");if(i.length>400){if(!i.startsWith("specific linkage revelation "))throw new Error("Protocol names must be 400 characters or less");if(i.length>430)throw new Error("Specific linkage revelation protocol names must be 430 characters or less")}if(i.length<5)throw new Error("Protocol names must be 5 characters or more");if(i.includes(" "))throw new Error('Protocol names cannot contain multiple consecutive spaces (" ")');if(!/^[a-z0-9 ]+$/g.test(i))throw new Error("Protocol names can only contain letters, numbers and spaces");if(i.endsWith(" protocol"))throw new Error('No need to end your protocol name with " protocol"');return`${r}-${i}-${t}`}}class Yr{keyDeriver;cache;maxCacheSize;rootKey;identityKey;constructor(e,t){this.rootKey="anyone"===e?new bt(1):e,this.keyDeriver=new Gr(this.rootKey,((e,t,r)=>{this.cacheSet(`${e.toString()}-${t.toString()}`,r)}),((e,t)=>this.cacheGet(`${e.toString()}-${t.toString()}`))),this.identityKey=this.rootKey.toPublicKey().toString(),this.cache=new Map;const r=t?.maxCacheSize;this.maxCacheSize=null!=r&&!isNaN(r)&&r>0?r:1e3}derivePublicKey(e,t,r,i=!1){const n=this.generateCacheKey("derivePublicKey",e,t,r,i);if(this.cache.has(n)){const e=this.cacheGet(n);if(void 0===e)throw new Error("Cached value is undefined");return e}{const s=this.keyDeriver.derivePublicKey(e,t,r,i);return this.cacheSet(n,s),s}}derivePrivateKey(e,t,r){const i=this.generateCacheKey("derivePrivateKey",e,t,r);if(this.cache.has(i)){const e=this.cacheGet(i);if(void 0===e)throw new Error("Cached value is undefined");return e}{const n=this.keyDeriver.derivePrivateKey(e,t,r);return this.cacheSet(i,n),n}}deriveSymmetricKey(e,t,r){const i=this.generateCacheKey("deriveSymmetricKey",e,t,r);if(this.cache.has(i)){const e=this.cacheGet(i);if(void 0===e)throw new Error("Cached value is undefined");return e}{const n=this.keyDeriver.deriveSymmetricKey(e,t,r);return this.cacheSet(i,n),n}}revealCounterpartySecret(e){const t=this.generateCacheKey("revealCounterpartySecret",e);if(this.cache.has(t)){const e=this.cacheGet(t);if(void 0===e)throw new Error("Cached value is undefined");return e}{const r=this.keyDeriver.revealCounterpartySecret(e);return this.cacheSet(t,r),r}}revealSpecificSecret(e,t,r){const i=this.generateCacheKey("revealSpecificSecret",e,t,r);if(this.cache.has(i)){const e=this.cacheGet(i);if(void 0===e)throw new Error("Cached value is undefined");return e}{const n=this.keyDeriver.revealSpecificSecret(e,t,r);return this.cacheSet(i,n),n}}generateCacheKey(e,...t){return`${e}|${t.map((e=>this.serializeArgument(e))).join("|")}`}serializeArgument(e){return e instanceof ct||e instanceof bt?e.toString():Array.isArray(e)?e.map((e=>this.serializeArgument(e))).join(","):"object"==typeof e&&null!==e?JSON.stringify(e):String(e)}cacheGet(e){const t=this.cache.get(e);return this.cache.delete(e),void 0!==t&&this.cache.set(e,t),t}cacheSet(e,t){if(this.cache.size>=this.maxCacheSize){const e=this.cache.keys().next().value;this.cache.delete(e)}this.cache.set(e,t)}}const Zr=class{keyDeriver;constructor(e){"string"!=typeof e.identityKey&&(e=new Yr(e)),this.keyDeriver=e}async getPublicKey(e){if(e.identityKey){if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");return{publicKey:this.keyDeriver.rootKey.toPublicKey().toString()}}if(null==e.protocolID||null==e.keyID||""===e.keyID)throw new Error("protocolID and keyID are required if identityKey is false or undefined.");return{publicKey:(this.keyDeriver??(()=>{throw new Error("keyDeriver is undefined")})()).derivePublicKey(e.protocolID,e.keyID,e.counterparty??"self",e.forSelf).toString()}}async revealCounterpartyKeyLinkage(e){const{publicKey:t}=await this.getPublicKey({identityKey:!0});if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");const r=this.keyDeriver.revealCounterpartySecret(e.counterparty),i=(new Ut).generateProof(this.keyDeriver.rootKey,this.keyDeriver.rootKey.toPublicKey(),ct.fromString(e.counterparty),Me.fromDER(r)),n=[...i.R.encode(!0),...i.SPrime.encode(!0),...i.z.toArray()],s=(new Date).toISOString(),{ciphertext:a}=await this.encrypt({plaintext:r,protocolID:[2,"counterparty linkage revelation"],keyID:s,counterparty:e.verifier}),{ciphertext:o}=await this.encrypt({plaintext:n,protocolID:[2,"counterparty linkage revelation"],keyID:s,counterparty:e.verifier});return{prover:t,verifier:e.verifier,counterparty:e.counterparty,revelationTime:s,encryptedLinkage:a,encryptedLinkageProof:o}}async revealSpecificKeyLinkage(e){const{publicKey:t}=await this.getPublicKey({identityKey:!0});if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");const r=this.keyDeriver.revealSpecificSecret(e.counterparty,e.protocolID,e.keyID),{ciphertext:i}=await this.encrypt({plaintext:r,protocolID:[2,`specific linkage revelation ${e.protocolID[0]} ${e.protocolID[1]}`],keyID:e.keyID,counterparty:e.verifier}),{ciphertext:n}=await this.encrypt({plaintext:[0],protocolID:[2,`specific linkage revelation ${e.protocolID[0]} ${e.protocolID[1]}`],keyID:e.keyID,counterparty:e.verifier});return{prover:t,verifier:e.verifier,counterparty:e.counterparty,protocolID:e.protocolID,keyID:e.keyID,encryptedLinkage:i,encryptedLinkageProof:n,proofType:0}}async encrypt(e){if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");return{ciphertext:this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self").encrypt(e.plaintext)}}async decrypt(e){if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");return{plaintext:this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self").decrypt(e.ciphertext)}}async createHmac(e){if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");const t=this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self");return{hmac:ke(t.toArray(),e.data)}}async verifyHmac(e){if(null==this.keyDeriver)throw new Error("keyDeriver is undefined");const t=this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self"),r=ke(t.toArray(),e.data).toString()===e.hmac.toString();if(!r){const e=new Error("HMAC is not valid");throw e.code="ERR_INVALID_HMAC",e}return{valid:r}}async createSignature(e){if(null==e.hashToDirectlySign&&null==e.data)throw new Error("args.data or args.hashToDirectlySign must be valid");const t=e.hashToDirectlySign??me(e.data??[]),r=(this.keyDeriver??(()=>{throw new Error("keyDeriver is undefined")})()).derivePrivateKey(e.protocolID,e.keyID,e.counterparty??"anyone");return{signature:at(new h(t),r,!0).toDER()}}async verifySignature(e){if(null==e.hashToDirectlyVerify&&null==e.data)throw new Error("args.data or args.hashToDirectlyVerify must be valid");const t=e.hashToDirectlyVerify??me(e.data??[]),r=(this.keyDeriver??(()=>{throw new Error("keyDeriver is undefined")})()).derivePublicKey(e.protocolID,e.keyID,e.counterparty??"self",e.forSelf),i=ot(new h(t),it.fromDER(e.signature),r);if(!i){const e=new Error("Signature is not valid");throw e.code="ERR_INVALID_SIGNATURE",e}return{valid:i}}};class Jr{CWI;constructor(){if("object"!=typeof window)throw new Error("The window.CWI substrate requires a global window object.");if("object"!=typeof window.CWI)throw new Error("The window.CWI interface does not appear to be bound to the window object.");this.CWI=window.CWI}async createAction(e,t){return await this.CWI.createAction(e,t)}async signAction(e,t){return await this.CWI.signAction(e,t)}async abortAction(e,t){return await this.CWI.abortAction(e,t)}async listActions(e,t){return await this.CWI.listActions(e,t)}async internalizeAction(e,t){return await this.CWI.internalizeAction(e,t)}async listOutputs(e,t){return await this.CWI.listOutputs(e,t)}async relinquishOutput(e,t){return await this.CWI.relinquishOutput(e,t)}async getPublicKey(e,t){return await this.CWI.getPublicKey(e,t)}async revealCounterpartyKeyLinkage(e,t){return await this.CWI.revealCounterpartyKeyLinkage(e,t)}async revealSpecificKeyLinkage(e,t){return await this.CWI.revealSpecificKeyLinkage(e,t)}async encrypt(e,t){return await this.CWI.encrypt(e,t)}async decrypt(e,t){return await this.CWI.decrypt(e,t)}async createHmac(e,t){return await this.CWI.createHmac(e,t)}async verifyHmac(e,t){return await this.CWI.verifyHmac(e,t)}async createSignature(e,t){return await this.CWI.createSignature(e,t)}async verifySignature(e,t){return await this.CWI.verifySignature(e,t)}async acquireCertificate(e,t){return await this.CWI.acquireCertificate(e,t)}async listCertificates(e,t){return await this.CWI.listCertificates(e,t)}async proveCertificate(e,t){return await this.CWI.proveCertificate(e,t)}async relinquishCertificate(e,t){return await this.CWI.relinquishCertificate(e,t)}async discoverByIdentityKey(e,t){return await this.CWI.discoverByIdentityKey(e,t)}async discoverByAttributes(e,t){return await this.CWI.discoverByAttributes(e,t)}async isAuthenticated(e,t){return await this.CWI.isAuthenticated(e,t)}async waitForAuthentication(e,t){return await this.CWI.waitForAuthentication(e,t)}async getHeight(e,t){return await this.CWI.getHeight(e,t)}async getHeaderForHeight(e,t){return await this.CWI.getHeaderForHeight(e,t)}async getNetwork(e,t){return await this.CWI.getNetwork(e,t)}async getVersion(e,t){return await this.CWI.getVersion(e,t)}}class Qr extends Error{code;isError=!0;constructor(e,t=1,r){super(e),this.code=t,this.name=this.constructor.name,null!=r&&""!==r?this.stack=r:Error.captureStackTrace(this,this.constructor)}}var ei;!function(e){e[e.unknownError=1]="unknownError",e[e.unsupportedAction=2]="unsupportedAction",e[e.invalidHmac=3]="invalidHmac",e[e.invalidSignature=4]="invalidSignature",e[e.reviewActions=5]="reviewActions"}(ei||(ei={}));const ti=Qr;class ri{domain;constructor(e="*"){if("object"!=typeof window)throw new Error("The XDM substrate requires a global window object.");if("function"!=typeof window.postMessage)throw new Error("The window object does not seem to support postMessage calls.");this.domain=e}async invoke(e,t){return await new Promise(((r,i)=>{const n=Fe(ut(12)),s=e=>{if("CWI"===e.data.type&&e.isTrusted&&e.data.id===n&&!0!==e.data.isInvocation)if("function"==typeof window.removeEventListener&&window.removeEventListener("message",s),"error"===e.data.status){const t=new Qr(e.data.description,e.data.code);i(t)}else r(e.data.result)};window.addEventListener("message",s),window.parent.postMessage({type:"CWI",isInvocation:!0,id:n,call:e,args:t},this.domain)}))}async createAction(e){return await this.invoke("createAction",e)}async signAction(e){return await this.invoke("signAction",e)}async abortAction(e){return await this.invoke("abortAction",e)}async listActions(e){return await this.invoke("listActions",e)}async internalizeAction(e){return await this.invoke("internalizeAction",e)}async listOutputs(e){return await this.invoke("listOutputs",e)}async relinquishOutput(e){return await this.invoke("relinquishOutput",e)}async getPublicKey(e){return await this.invoke("getPublicKey",e)}async revealCounterpartyKeyLinkage(e){return await this.invoke("revealCounterpartyKeyLinkage",e)}async revealSpecificKeyLinkage(e){return await this.invoke("revealSpecificKeyLinkage",e)}async encrypt(e){return await this.invoke("encrypt",e)}async decrypt(e){return await this.invoke("decrypt",e)}async createHmac(e){return await this.invoke("createHmac",e)}async verifyHmac(e){return await this.invoke("verifyHmac",e)}async createSignature(e){return await this.invoke("createSignature",e)}async verifySignature(e){return await this.invoke("verifySignature",e)}async acquireCertificate(e){return await this.invoke("acquireCertificate",e)}async listCertificates(e){return await this.invoke("listCertificates",e)}async proveCertificate(e){return await this.invoke("proveCertificate",e)}async relinquishCertificate(e){return await this.invoke("relinquishCertificate",e)}async discoverByIdentityKey(e){return await this.invoke("discoverByIdentityKey",e)}async discoverByAttributes(e){return await this.invoke("discoverByAttributes",e)}async isAuthenticated(e){return await this.invoke("isAuthenticated",e)}async waitForAuthentication(e){return await this.invoke("waitForAuthentication",e)}async getHeight(e){return await this.invoke("getHeight",e)}async getHeaderForHeight(e){return await this.invoke("getHeaderForHeight",e)}async getNetwork(e){return await this.invoke("getNetwork",e)}async getVersion(e){return await this.invoke("getVersion",e)}}class ii{type;serialNumber;subject;certifier;revocationOutpoint;fields;signature;constructor(e,t,r,i,n,s,a){this.type=e,this.serialNumber=t,this.subject=r,this.certifier=i,this.revocationOutpoint=n,this.fields=s,this.signature=a}toBinary(e=!0){const t=new Ue,r=Oe(this.type,"base64");t.write(r);const i=Oe(this.serialNumber,"base64");t.write(i);const n=Oe(this.subject,"hex");t.write(n);const s=Oe(this.certifier,"hex");t.write(s);const[a,o]=this.revocationOutpoint.split("."),c=Oe(a,"hex");t.write(c),t.writeVarIntNum(Number(o));const h=Object.keys(this.fields).sort();t.writeVarIntNum(h.length);for(const e of h){const r=this.fields[e],i=Oe(e,"utf8");t.writeVarIntNum(i.length),t.write(i);const n=Oe(r,"utf8");t.writeVarIntNum(n.length),t.write(n)}if(e&&(this.signature??"").length>0){const e=Oe(this.signature,"hex");t.write(e)}return t.toArray()}static fromBinary(e){const t=new Ke(e),r=Fe(t.read(32)),i=Fe(t.read(32)),n=t.read(33),s=Ne(n),a=t.read(33),o=Ne(a),c=t.read(32),h=`${Ne(c)}.${t.readVarIntNum()}`,d=t.readVarIntNum(),u={};for(let e=0;e<d;e++){const e=t.readVarIntNum(),r=t.read(e),i=xe(r),n=t.readVarIntNum(),s=t.read(n),a=xe(s);u[i]=a}let l;if(!t.eof()){const e=t.read();l=it.fromDER(e).toString("hex")}return new ii(r,i,s,o,h,u,l)}async verify(){const e=new Zr("anyone"),t=this.toBinary(!1),r=this.signature??"",{valid:i}=await e.verifySignature({signature:Oe(r,"hex"),data:t,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`,counterparty:this.certifier});return i}async sign(e){if(null!=this.signature&&this.signature.length>0)throw new Error(`Certificate has already been signed! Signature present: ${this.signature}`);this.certifier=(await e.getPublicKey({identityKey:!0})).publicKey;const t=this.toBinary(!1),{signature:r}=await e.createSignature({data:t,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`});this.signature=Ne(r)}static getCertificateFieldEncryptionDetails(e,t){return{protocolID:[2,"certificate field encryption"],keyID:t?`${t} ${e}`:e}}}var ni;!function(e){e[e.createAction=1]="createAction",e[e.signAction=2]="signAction",e[e.abortAction=3]="abortAction",e[e.listActions=4]="listActions",e[e.internalizeAction=5]="internalizeAction",e[e.listOutputs=6]="listOutputs",e[e.relinquishOutput=7]="relinquishOutput",e[e.getPublicKey=8]="getPublicKey",e[e.revealCounterpartyKeyLinkage=9]="revealCounterpartyKeyLinkage",e[e.revealSpecificKeyLinkage=10]="revealSpecificKeyLinkage",e[e.encrypt=11]="encrypt",e[e.decrypt=12]="decrypt",e[e.createHmac=13]="createHmac",e[e.verifyHmac=14]="verifyHmac",e[e.createSignature=15]="createSignature",e[e.verifySignature=16]="verifySignature",e[e.acquireCertificate=17]="acquireCertificate",e[e.listCertificates=18]="listCertificates",e[e.proveCertificate=19]="proveCertificate",e[e.relinquishCertificate=20]="relinquishCertificate",e[e.discoverByIdentityKey=21]="discoverByIdentityKey",e[e.discoverByAttributes=22]="discoverByAttributes",e[e.isAuthenticated=23]="isAuthenticated",e[e.waitForAuthentication=24]="waitForAuthentication",e[e.getHeight=25]="getHeight",e[e.getHeaderForHeight=26]="getHeaderForHeight",e[e.getNetwork=27]="getNetwork",e[e.getVersion=28]="getVersion"}(ni||(ni={}));const si=ni;class ai{wire;constructor(e){this.wire=e}async transmit(e,t="",r=[]){const i=new Ue;i.writeUInt8(si[e]);const n=Oe(t,"utf8");i.writeUInt8(n.length),i.write(n),r.length>0&&i.write(r);const s=i.toArray(),a=await this.wire.transmitToWallet(s),o=new Ke(a),c=o.readUInt8();if(0===c)return o.read();{const e=o.readVarIntNum(),t=o.read(e),r=xe(t),i=o.readVarIntNum(),n=o.read(i),s=xe(n);throw new Qr(r,c,s)}}async createAction(e,t){const r=new Ue,i=Oe(e.description,"utf8");if(r.writeVarIntNum(i.length),r.write(i),null!=e.inputBEEF?(r.writeVarIntNum(e.inputBEEF.length),r.write(e.inputBEEF)):r.writeVarIntNum(-1),null!=e.inputs){r.writeVarIntNum(e.inputs.length);for(const t of e.inputs){if(r.write(this.encodeOutpoint(t.outpoint)),null!=t.unlockingScript&&""!==t.unlockingScript){const e=Oe(t.unlockingScript,"hex");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1),r.writeVarIntNum(t.unlockingScriptLength??0);const e=Oe(t.inputDescription,"utf8");r.writeVarIntNum(e.length),r.write(e),"number"==typeof t.sequenceNumber?r.writeVarIntNum(t.sequenceNumber):r.writeVarIntNum(-1)}}else r.writeVarIntNum(-1);if(null!=e.outputs){r.writeVarIntNum(e.outputs.length);for(const t of e.outputs){const e=Oe(t.lockingScript,"hex");r.writeVarIntNum(e.length),r.write(e),r.writeVarIntNum(t.satoshis);const i=Oe(t.outputDescription,"utf8");if(r.writeVarIntNum(i.length),r.write(i),null!=t.basket&&""!==t.basket){const e=Oe(t.basket,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if(null!=t.customInstructions&&""!==t.customInstructions){const e=Oe(t.customInstructions,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if(null!=t.tags){r.writeVarIntNum(t.tags.length);for(const e of t.tags){const t=Oe(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(-1)}}else r.writeVarIntNum(-1);if("number"==typeof e.lockTime?r.writeVarIntNum(e.lockTime):r.writeVarIntNum(-1),"number"==typeof e.version?r.writeVarIntNum(e.version):r.writeVarIntNum(-1),null!=e.labels){r.writeVarIntNum(e.labels.length);for(const t of e.labels){const e=Oe(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(-1);if(null!=e.options){if(r.writeInt8(1),"boolean"==typeof e.options.signAndProcess?r.writeInt8(e.options.signAndProcess?1:0):r.writeInt8(-1),"boolean"==typeof e.options.acceptDelayedBroadcast?r.writeInt8(e.options.acceptDelayedBroadcast?1:0):r.writeInt8(-1),"known"===e.options.trustSelf?r.writeInt8(1):r.writeInt8(-1),null!=e.options.knownTxids){r.writeVarIntNum(e.options.knownTxids.length);for(const t of e.options.knownTxids){const e=Oe(t,"hex");r.write(e)}}else r.writeVarIntNum(-1);if("boolean"==typeof e.options.returnTXIDOnly?r.writeInt8(e.options.returnTXIDOnly?1:0):r.writeInt8(-1),"boolean"==typeof e.options.noSend?r.writeInt8(e.options.noSend?1:0):r.writeInt8(-1),null!=e.options.noSendChange){r.writeVarIntNum(e.options.noSendChange.length);for(const t of e.options.noSendChange)r.write(this.encodeOutpoint(t))}else r.writeVarIntNum(-1);if(null!=e.options.sendWith){r.writeVarIntNum(e.options.sendWith.length);for(const t of e.options.sendWith){const e=Oe(t,"hex");r.write(e)}}else r.writeVarIntNum(-1);"boolean"==typeof e.options.randomizeOutputs?r.writeInt8(e.options.randomizeOutputs?1:0):r.writeInt8(-1)}else r.writeInt8(0);const n=await this.transmit("createAction",t,r.toArray()),s=new Ke(n),a={};if(1===s.readInt8()){const e=s.read(32);a.txid=Ne(e)}if(1===s.readInt8()){const e=s.readVarIntNum();a.tx=s.read(e)}const o=s.readVarIntNum();if(o>=0){a.noSendChange=[];for(let e=0;e<o;e++){const e=this.readOutpoint(s);a.noSendChange.push(e)}}const c=s.readVarIntNum();if(c>=0){a.sendWithResults=[];for(let e=0;e<c;e++){const e=s.read(32),t=Ne(e),r=s.readInt8();let i="unproven";1===r?i="unproven":2===r?i="sending":3===r&&(i="failed"),a.sendWithResults.push({txid:t,status:i})}}if(1===s.readInt8()){const e=s.readVarIntNum(),t=s.read(e),r=s.readVarIntNum(),i=s.read(r);a.signableTransaction={tx:t,reference:Fe(i)}}return a}async signAction(e,t){const r=new Ue,i=Object.keys(e.spends);r.writeVarIntNum(i.length);for(const t of i){r.writeVarIntNum(Number(t));const i=e.spends[Number(t)],n=Oe(i.unlockingScript,"hex");r.writeVarIntNum(n.length),r.write(n),"number"==typeof i.sequenceNumber?r.writeVarIntNum(i.sequenceNumber):r.writeVarIntNum(-1)}const n=Oe(e.reference,"base64");if(r.writeVarIntNum(n.length),r.write(n),null!=e.options)if(r.writeInt8(1),"boolean"==typeof e.options.acceptDelayedBroadcast?r.writeInt8(e.options.acceptDelayedBroadcast?1:0):r.writeInt8(-1),"boolean"==typeof e.options.returnTXIDOnly?r.writeInt8(e.options.returnTXIDOnly?1:0):r.writeInt8(-1),"boolean"==typeof e.options.noSend?r.writeInt8(e.options.noSend?1:0):r.writeInt8(-1),null!=e.options.sendWith){r.writeVarIntNum(e.options.sendWith.length);for(const t of e.options.sendWith){const e=Oe(t,"hex");r.write(e)}}else r.writeVarIntNum(-1);else r.writeInt8(0);const s=await this.transmit("signAction",t,r.toArray()),a=new Ke(s),o={};if(1===a.readInt8()){const e=a.read(32);o.txid=Ne(e)}if(1===a.readInt8()){const e=a.readVarIntNum();o.tx=a.read(e)}const c=a.readVarIntNum();if(c>=0){o.sendWithResults=[];for(let e=0;e<c;e++){const e=a.read(32),t=Ne(e),r=a.readInt8();let i="unproven";1===r?i="unproven":2===r?i="sending":3===r&&(i="failed"),o.sendWithResults.push({txid:t,status:i})}}return o}async abortAction(e,t){return await this.transmit("abortAction",t,Oe(e.reference,"base64")),{aborted:!0}}async listActions(e,t){const r=new Ue;r.writeVarIntNum(e.labels.length);for(const t of e.labels){const e=Oe(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}"any"===e.labelQueryMode?r.writeInt8(1):"all"===e.labelQueryMode?r.writeInt8(2):r.writeInt8(-1);const i=[e.includeLabels,e.includeInputs,e.includeInputSourceLockingScripts,e.includeInputUnlockingScripts,e.includeOutputs,e.includeOutputLockingScripts];for(const e of i)"boolean"==typeof e?r.writeInt8(e?1:0):r.writeInt8(-1);"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1);const n=await this.transmit("listActions",t,r.toArray()),s=new Ke(n),a=s.readVarIntNum(),o=[];for(let e=0;e<a;e++){const e=s.read(32),t=Ne(e),r=s.readVarIntNum(),i=s.readInt8();let n;switch(i){case 1:n="completed";break;case 2:n="unprocessed";break;case 3:n="sending";break;case 4:n="unproven";break;case 5:n="unsigned";break;case 6:n="nosend";break;case 7:n="nonfinal";break;case 8:n="failed";break;default:throw new Error(`Unknown status code: ${i}`)}const a=1===s.readInt8(),c=s.readVarIntNum(),h=s.read(c),d={txid:t,satoshis:r,status:n,isOutgoing:a,description:xe(h),version:0,lockTime:0},u=s.readVarIntNum();if(u>=0){d.labels=[];for(let e=0;e<u;e++){const e=s.readVarIntNum(),t=s.read(e);d.labels.push(xe(t))}}d.version=s.readVarIntNum(),d.lockTime=s.readVarIntNum();const l=s.readVarIntNum();if(l>=0){d.inputs=[];for(let e=0;e<l;e++){const e=this.readOutpoint(s),t=s.readVarIntNum(),r=s.readVarIntNum();let i;if(r>=0){const e=s.read(r);i=Ne(e)}const n=s.readVarIntNum();let a;if(n>=0){const e=s.read(n);a=Ne(e)}const o=s.readVarIntNum(),c=s.read(o),h=xe(c),u=s.readVarIntNum();d.inputs.push({sourceOutpoint:e,sourceSatoshis:t,sourceLockingScript:i,unlockingScript:a,inputDescription:h,sequenceNumber:u})}}const f=s.readVarIntNum();if(f>=0){d.outputs=[];for(let e=0;e<f;e++){const e=s.readVarIntNum(),t=s.readVarIntNum(),r=s.readVarIntNum();let i;if(r>=0){const e=s.read(r);i=Ne(e)}const n=1===s.readInt8(),a=s.readVarIntNum(),o=s.read(a),c=xe(o),h=s.readVarIntNum();let u;if(h>=0){const e=s.read(h);u=xe(e)}const l=s.readVarIntNum(),f=[];if(l>=0)for(let e=0;e<l;e++){const e=s.readVarIntNum(),t=s.read(e);f.push(xe(t))}const p=s.readVarIntNum();let b;if(p>=0){const e=s.read(p);b=xe(e)}d.outputs.push({outputIndex:e,satoshis:t,lockingScript:i,spendable:n,outputDescription:c,basket:u,tags:f,customInstructions:b})}}o.push(d)}return{totalActions:a,actions:o}}async internalizeAction(e,t){const r=new Ue;r.writeVarIntNum(e.tx.length),r.write(e.tx),r.writeVarIntNum(e.outputs.length);for(const t of e.outputs)if(r.writeVarIntNum(t.outputIndex),"wallet payment"===t.protocol){if(null==t.paymentRemittance)throw new Error("Payment remittance is required for wallet payment");r.writeUInt8(1),r.write(Oe(t.paymentRemittance.senderIdentityKey,"hex"));const e=Oe(t.paymentRemittance.derivationPrefix,"base64");r.writeVarIntNum(e.length),r.write(e);const i=Oe(t.paymentRemittance.derivationSuffix,"base64");r.writeVarIntNum(i.length),r.write(i)}else{r.writeUInt8(2);const e=Oe(t.insertionRemittance?.basket,"utf8");if(r.writeVarIntNum(e.length),r.write(e),"string"==typeof t.insertionRemittance?.customInstructions&&""!==t.insertionRemittance.customInstructions){const e=Oe(t.insertionRemittance.customInstructions,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if("object"==typeof t.insertionRemittance?.tags){r.writeVarIntNum(t.insertionRemittance.tags.length);for(const e of t.insertionRemittance.tags){const t=Oe(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}}else r.writeVarIntNum(0)}if("object"==typeof e.labels){r.writeVarIntNum(e.labels.length);for(const t of e.labels){const e=Oe(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(-1);const i=Oe(e.description);return r.writeVarIntNum(i.length),r.write(i),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),await this.transmit("internalizeAction",t,r.toArray()),{accepted:!0}}async listOutputs(e,t){const r=new Ue,i=Oe(e.basket,"utf8");if(r.writeVarIntNum(i.length),r.write(i),"object"==typeof e.tags){r.writeVarIntNum(e.tags.length);for(const t of e.tags){const e=Oe(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}}else r.writeVarIntNum(0);"all"===e.tagQueryMode?r.writeInt8(1):"any"===e.tagQueryMode?r.writeInt8(2):r.writeInt8(-1),"locking scripts"===e.include?r.writeInt8(1):"entire transactions"===e.include?r.writeInt8(2):r.writeInt8(-1),"boolean"==typeof e.includeCustomInstructions?r.writeInt8(e.includeCustomInstructions?1:0):r.writeInt8(-1),"boolean"==typeof e.includeTags?r.writeInt8(e.includeTags?1:0):r.writeInt8(-1),"boolean"==typeof e.includeLabels?r.writeInt8(e.includeLabels?1:0):r.writeInt8(-1),"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1);const n=await this.transmit("listOutputs",t,r.toArray()),s=new Ke(n),a=s.readVarIntNum(),o=s.readVarIntNum();let c;o>=0&&(c=s.read(o));const h=[];for(let e=0;e<a;e++){const e={spendable:!0,outpoint:this.readOutpoint(s),satoshis:s.readVarIntNum()},t=s.readVarIntNum();t>=0&&(e.lockingScript=Ne(s.read(t)));const r=s.readVarIntNum();r>=0&&(e.customInstructions=xe(s.read(r)));const i=s.readVarIntNum();if(-1!==i){const t=[];for(let e=0;e<i;e++){const e=s.readVarIntNum();t.push(xe(s.read(e)))}e.tags=t}const n=s.readVarIntNum();if(-1!==n){const t=[];for(let e=0;e<n;e++){const e=s.readVarIntNum();t.push(xe(s.read(e)))}e.labels=t}h.push(e)}return{totalOutputs:a,BEEF:c,outputs:h}}async relinquishOutput(e,t){const r=new Ue,i=Oe(e.basket,"utf8");return r.writeVarIntNum(i.length),r.write(i),r.write(this.encodeOutpoint(e.output)),await this.transmit("relinquishOutput",t,r.toArray()),{relinquished:!0}}encodeOutpoint(e){const t=new Ue,[r,i]=e.split(".");return t.write(Oe(r,"hex")),t.writeVarIntNum(Number(i)),t.toArray()}readOutpoint(e){return`${Ne(e.read(32))}.${e.readVarIntNum()}`}async getPublicKey(e,t){const r=new Ue;r.writeUInt8(e.identityKey?1:0),e.identityKey?r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason)):(r.write(this.encodeKeyRelatedParams(e.protocolID??=[Xr.Silent,"default"],e.keyID??="",e.counterparty,e.privileged,e.privilegedReason)),"boolean"==typeof e.forSelf?r.writeInt8(e.forSelf?1:0):r.writeInt8(-1)),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1);const i=await this.transmit("getPublicKey",t,r.toArray());return{publicKey:Ne(i)}}async revealCounterpartyKeyLinkage(e,t){const r=new Ue;r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason)),r.write(Oe(e.counterparty,"hex")),r.write(Oe(e.verifier,"hex"));const i=await this.transmit("revealCounterpartyKeyLinkage",t,r.toArray()),n=new Ke(i),s=Ne(n.read(33)),a=Ne(n.read(33)),o=Ne(n.read(33)),c=n.readVarIntNum(),h=xe(n.read(c)),d=n.readVarIntNum(),u=n.read(d),l=n.readVarIntNum();return{prover:s,verifier:a,counterparty:o,revelationTime:h,encryptedLinkage:u,encryptedLinkageProof:n.read(l)}}async revealSpecificKeyLinkage(e,t){const r=new Ue;r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.write(Oe(e.verifier,"hex"));const i=await this.transmit("revealSpecificKeyLinkage",t,r.toArray()),n=new Ke(i),s=Ne(n.read(33)),a=Ne(n.read(33)),o=Ne(n.read(33)),c=n.readUInt8(),h=n.readVarIntNum(),d=xe(n.read(h)),u=n.readVarIntNum(),l=xe(n.read(u)),f=n.readVarIntNum(),p=n.read(f),b=n.readVarIntNum();return{prover:s,verifier:a,counterparty:o,protocolID:[c,d],keyID:l,encryptedLinkage:p,encryptedLinkageProof:n.read(b),proofType:n.readUInt8()}}async encrypt(e,t){const r=new Ue;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.writeVarIntNum(e.plaintext.length),r.write(e.plaintext),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),{ciphertext:await this.transmit("encrypt",t,r.toArray())}}async decrypt(e,t){const r=new Ue;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.writeVarIntNum(e.ciphertext.length),r.write(e.ciphertext),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),{plaintext:await this.transmit("decrypt",t,r.toArray())}}async createHmac(e,t){const r=new Ue;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.writeVarIntNum(e.data.length),r.write(e.data),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),{hmac:await this.transmit("createHmac",t,r.toArray())}}async verifyHmac(e,t){const r=new Ue;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.write(e.hmac),r.writeVarIntNum(e.data.length),r.write(e.data),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),await this.transmit("verifyHmac",t,r.toArray()),{valid:!0}}async createSignature(e,t){const r=new Ue;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),"object"==typeof e.data?(r.writeUInt8(1),r.writeVarIntNum(e.data.length),r.write(e.data)):(r.writeUInt8(2),r.write(e.hashToDirectlySign??=[])),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),{signature:await this.transmit("createSignature",t,r.toArray())}}async verifySignature(e,t){const r=new Ue;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),"boolean"==typeof e.forSelf?r.writeInt8(e.forSelf?1:0):r.writeInt8(-1),r.writeVarIntNum(e.signature.length),r.write(e.signature),"object"==typeof e.data?(r.writeUInt8(1),r.writeVarIntNum(e.data.length),r.write(e.data)):(r.writeUInt8(2),r.write(e.hashToDirectlyVerify??[])),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1),await this.transmit("verifySignature",t,r.toArray()),{valid:!0}}encodeKeyRelatedParams(e,t,r,i,n){const s=new Ue;s.writeUInt8(e[0]);const a=Oe(e[1],"utf8");s.writeVarIntNum(a.length),s.write(a);const o=Oe(t,"utf8");return s.writeVarIntNum(o.length),s.write(o),"string"!=typeof r?s.writeUInt8(0):"self"===r?s.writeUInt8(11):"anyone"===r?s.writeUInt8(12):s.write(Oe(r,"hex")),s.write(this.encodePrivilegedParams(i,n)),s.toArray()}async acquireCertificate(e,t){const r=new Ue;r.write(Oe(e.type,"base64")),r.write(Oe(e.certifier,"hex"));const i=Object.entries(e.fields);r.writeVarIntNum(i.length);for(const[e,t]of i){const i=Oe(e,"utf8"),n=Oe(t,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(n.length),r.write(n)}if(r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason)),r.writeUInt8("direct"===e.acquisitionProtocol?1:2),"direct"===e.acquisitionProtocol){r.write(Oe(e.serialNumber,"base64")),r.write(this.encodeOutpoint(e.revocationOutpoint??""));const t=Oe(e.signature,"hex");r.writeVarIntNum(t.length),r.write(t);const i="certifier"!==e.keyringRevealer?Oe(e.keyringRevealer,"hex"):[11];r.write(i);const n=Object.keys(e.keyringForSubject??{});r.writeVarIntNum(n.length);for(let t=0;t<n.length;t++){const i=Oe(n[t],"utf8");r.writeVarIntNum(i.length),r.write(i);const s=Oe(e.keyringForSubject?.[n[t]],"base64");r.writeVarIntNum(s.length),r.write(s)}}else{const t=Oe(e.certifierUrl,"utf8");r.writeVarIntNum(t.length),r.write(t)}const n=await this.transmit("acquireCertificate",t,r.toArray()),s=ii.fromBinary(n);return{...s,signature:s.signature}}encodePrivilegedParams(e,t){const r=new Ue;if("boolean"==typeof e?r.writeInt8(e?1:0):r.writeInt8(-1),"string"==typeof t){const e=Oe(t,"utf8");r.writeInt8(e.length),r.write(e)}else r.writeInt8(-1);return r.toArray()}async listCertificates(e,t){const r=new Ue;r.writeVarIntNum(e.certifiers.length);for(let t=0;t<e.certifiers.length;t++)r.write(Oe(e.certifiers[t],"hex"));r.writeVarIntNum(e.types.length);for(let t=0;t<e.types.length;t++)r.write(Oe(e.types[t],"base64"));"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason));const i=await this.transmit("listCertificates",t,r.toArray()),n=new Ke(i),s=n.readVarIntNum(),a=[];for(let e=0;e<s;e++){const e=n.readVarIntNum(),t=n.read(e),r=ii.fromBinary(t);a.push({...r,signature:r.signature})}return{totalCertificates:s,certificates:a}}async proveCertificate(e,t){const r=new Ue,i=Oe(e.certificate.type,"base64");r.write(i);const n=Oe(e.certificate.subject,"hex");r.write(n);const s=Oe(e.certificate.serialNumber,"base64");r.write(s);const a=Oe(e.certificate.certifier,"hex");r.write(a);const o=this.encodeOutpoint(e.certificate.revocationOutpoint??"");r.write(o);const c=Oe(e.certificate.signature,"hex");r.writeVarIntNum(c.length),r.write(c);const h=Object.entries(e.certificate.fields??{});r.writeVarIntNum(h.length);for(const[e,t]of h){const i=Oe(e,"utf8"),n=Oe(t,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(n.length),r.write(n)}r.writeVarIntNum(e.fieldsToReveal.length);for(const t of e.fieldsToReveal){const e=Oe(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}r.write(Oe(e.verifier,"hex")),r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason));const d=await this.transmit("proveCertificate",t,r.toArray()),u=new Ke(d),l=u.readVarIntNum(),f={};for(let e=0;e<l;e++){const e=u.readVarIntNum(),t=xe(u.read(e)),r=u.readVarIntNum();f[t]=Fe(u.read(r))}return{keyringForVerifier:f}}async relinquishCertificate(e,t){const r=new Ue,i=Oe(e.type,"base64");r.write(i);const n=Oe(e.serialNumber,"base64");r.write(n);const s=Oe(e.certifier,"hex");return r.write(s),await this.transmit("relinquishCertificate",t,r.toArray()),{relinquished:!0}}parseDiscoveryResult(e){const t=new Ke(e),r=t.readVarIntNum(),i=[];for(let e=0;e<r;e++){const e=t.readVarIntNum(),r=t.read(e),n=ii.fromBinary(r),s=t.readVarIntNum(),a=xe(t.read(s)),o=t.readVarIntNum(),c=xe(t.read(o)),h=t.readVarIntNum(),d=xe(t.read(h)),u=t.readUInt8(),l={},f=t.readVarIntNum();for(let e=0;e<f;e++){const e=t.readVarIntNum(),r=xe(t.read(e)),i=t.readVarIntNum();l[r]=t.read(i)}const p={},b=t.readVarIntNum();for(let e=0;e<b;e++){const e=t.readVarIntNum(),r=xe(t.read(e)),i=t.readVarIntNum();p[r]=xe(t.read(i))}i.push({...n,signature:n.signature,certifierInfo:{iconUrl:c,name:a,description:d,trust:u},publiclyRevealedKeyring:l,decryptedFields:p})}return{totalCertificates:r,certificates:i}}async discoverByIdentityKey(e,t){const r=new Ue;r.write(Oe(e.identityKey,"hex")),"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1);const i=await this.transmit("discoverByIdentityKey",t,r.toArray());return this.parseDiscoveryResult(i)}async discoverByAttributes(e,t){const r=new Ue,i=Object.keys(e.attributes);r.writeVarIntNum(i.length);for(let t=0;t<i.length;t++)r.writeVarIntNum(i[t].length),r.write(Oe(i[t],"utf8")),r.writeVarIntNum(e.attributes[i[t]].length),r.write(Oe(e.attributes[i[t]],"utf8"));"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?e.seekPermission?1:0:-1);const n=await this.transmit("discoverByAttributes",t,r.toArray());return this.parseDiscoveryResult(n)}async isAuthenticated(e,t){return{authenticated:1===(await this.transmit("isAuthenticated",t))[0]}}async waitForAuthentication(e,t){return await this.transmit("waitForAuthentication",t),{authenticated:!0}}async getHeight(e,t){const r=await this.transmit("getHeight",t);return{height:new Ke(r).readVarIntNum()}}async getHeaderForHeight(e,t){const r=new Ue;r.writeVarIntNum(e.height);const i=await this.transmit("getHeaderForHeight",t,r.toArray());return{header:Ne(i)}}async getNetwork(e,t){return{network:0===(await this.transmit("getNetwork",t))[0]?"mainnet":"testnet"}}async getVersion(e,t){const r=await this.transmit("getVersion",t);return{version:xe(r)}}}class oi{baseUrl;httpClient;originator;constructor(e,t="http://localhost:3301",r=fetch){this.baseUrl=t,this.httpClient=r,this.originator=e}async transmitToWallet(e){const t=new Ke(e),r=t.readUInt8(),i=si[r];if(void 0===i||""===i)throw new Error(`Invalid call code: ${r}`);const n=t.readUInt8();let s;if(n>0){const e=t.read(n);s=xe(e)}const a=t.read(),o=await fetch(`${this.baseUrl}/${i}`,{method:"POST",headers:{"Content-Type":"application/octet-stream",Origin:s??""},body:new Uint8Array(a)}),c=await o.arrayBuffer();return Array.from(new Uint8Array(c))}}class ci extends Error{reviewActionResults;sendWithResults;txid;tx;noSendChange;code;isError=!0;constructor(e,t,r,i,n){super("Undelayed createAction or signAction results require review."),this.reviewActionResults=e,this.sendWithResults=t,this.txid=r,this.tx=i,this.noSendChange=n,this.code=5,this.name=this.constructor.name}}const hi=ci;class di{baseUrl;httpClient;originator;api;constructor(e,t="http://localhost:3321",r=fetch){this.baseUrl=t,this.originator=e,this.httpClient=r;const i="undefined"!=typeof window&&"undefined"!=typeof document&&"file://"!==window?.origin;this.api=async(e,t)=>{const n=!i&&this.originator?function(e,t="http"){if(/^[a-z][a-z0-9+.-]*:\/\//i.test(e))try{return new URL(e).origin}catch{}try{return new URL(`${t}://${e}`).origin}catch{throw new Error(`Invalid originator value: ${e}`)}}(this.originator,"http"):void 0;i||void 0!==n||console.error("Originator is required in Node.js environments");const s=await await r(`${this.baseUrl}/${e}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",...n?{Origin:n}:{},...n?{Originator:n}:{}},body:JSON.stringify(t)}),a=await s.json();if(!s.ok){if(400===s.status&&a.isError&&5===a.code)throw new ci(a.reviewActionResults,a.sendWithResults,a.txid,a.tx,a.noSendChange);{const r={call:e,args:t,message:a.message??`HTTP Client error ${s.status}`};throw new Error(JSON.stringify(r))}}return a}}async createAction(e){return await this.api("createAction",e)}async signAction(e){return await this.api("signAction",e)}async abortAction(e){return await this.api("abortAction",e)}async listActions(e){return await this.api("listActions",e)}async internalizeAction(e){return await this.api("internalizeAction",e)}async listOutputs(e){return await this.api("listOutputs",e)}async relinquishOutput(e){return await this.api("relinquishOutput",e)}async getPublicKey(e){return await this.api("getPublicKey",e)}async revealCounterpartyKeyLinkage(e){return await this.api("revealCounterpartyKeyLinkage",e)}async revealSpecificKeyLinkage(e){return await this.api("revealSpecificKeyLinkage",e)}async encrypt(e){return await this.api("encrypt",e)}async decrypt(e){return await this.api("decrypt",e)}async createHmac(e){return await this.api("createHmac",e)}async verifyHmac(e){return await this.api("verifyHmac",e)}async createSignature(e){return await this.api("createSignature",e)}async verifySignature(e){return await this.api("verifySignature",e)}async acquireCertificate(e){return await this.api("acquireCertificate",e)}async listCertificates(e){return await this.api("listCertificates",e)}async proveCertificate(e){return await this.api("proveCertificate",e)}async relinquishCertificate(e){return await this.api("relinquishCertificate",e)}async discoverByIdentityKey(e){return await this.api("discoverByIdentityKey",e)}async discoverByAttributes(e){return await this.api("discoverByAttributes",e)}async isAuthenticated(e){return await this.api("isAuthenticated",e)}async waitForAuthentication(e){return await this.api("waitForAuthentication",e)}async getHeight(e){return await this.api("getHeight",e)}async getHeaderForHeight(e){return await this.api("getHeaderForHeight",e)}async getNetwork(e){return await this.api("getNetwork",e)}async getVersion(e){return await this.api("getVersion",e)}}class ui{domain;constructor(e="*"){if("object"!=typeof window)throw new Error("The XDM substrate requires a global window object.");if(!window.hasOwnProperty("ReactNativeWebView"))throw new Error("The window object does not have a ReactNativeWebView property.");if("function"!=typeof window.ReactNativeWebView.postMessage)throw new Error("The window.ReactNativeWebView property does not seem to support postMessage calls.");this.domain=e}async invoke(e,t){return await new Promise(((r,i)=>{const n=Fe(ut(12)),s=e=>{const t=JSON.parse(e.data);if("CWI"===t.type&&t.id===n&&!0!==t.isInvocation)if("function"==typeof window.removeEventListener&&window.removeEventListener("message",s),"error"===t.status){const e=new Qr(t.description,t.code);i(e)}else r(t.result)};window.addEventListener("message",s),window.ReactNativeWebView.postMessage(JSON.stringify({type:"CWI",isInvocation:!0,id:n,call:e,args:t}))}))}async createAction(e){return await this.invoke("createAction",e)}async signAction(e){return await this.invoke("signAction",e)}async abortAction(e){return await this.invoke("abortAction",e)}async listActions(e){return await this.invoke("listActions",e)}async internalizeAction(e){return await this.invoke("internalizeAction",e)}async listOutputs(e){return await this.invoke("listOutputs",e)}async relinquishOutput(e){return await this.invoke("relinquishOutput",e)}async getPublicKey(e){return await this.invoke("getPublicKey",e)}async revealCounterpartyKeyLinkage(e){return await this.invoke("revealCounterpartyKeyLinkage",e)}async revealSpecificKeyLinkage(e){return await this.invoke("revealSpecificKeyLinkage",e)}async encrypt(e){return await this.invoke("encrypt",e)}async decrypt(e){return await this.invoke("decrypt",e)}async createHmac(e){return await this.invoke("createHmac",e)}async verifyHmac(e){return await this.invoke("verifyHmac",e)}async createSignature(e){return await this.invoke("createSignature",e)}async verifySignature(e){return await this.invoke("verifySignature",e)}async acquireCertificate(e){return await this.invoke("acquireCertificate",e)}async listCertificates(e){return await this.invoke("listCertificates",e)}async proveCertificate(e){return await this.invoke("proveCertificate",e)}async relinquishCertificate(e){return await this.invoke("relinquishCertificate",e)}async discoverByIdentityKey(e){return await this.invoke("discoverByIdentityKey",e)}async discoverByAttributes(e){return await this.invoke("discoverByAttributes",e)}async isAuthenticated(e){return await this.invoke("isAuthenticated",e)}async waitForAuthentication(e){return await this.invoke("waitForAuthentication",e)}async getHeight(e){return await this.invoke("getHeight",e)}async getHeaderForHeight(e){return await this.invoke("getHeaderForHeight",e)}async getNetwork(e){return await this.invoke("getNetwork",e)}async getVersion(e){return await this.invoke("getVersion",e)}}class li{substrate;originator;constructor(e="auto",t){"Cicada"===e&&(e=new ai(new oi(t))),"window.CWI"===e&&(e=new Jr),"XDM"===e&&(e=new ri),"json-api"===e&&(e=new di(t)),"react-native"===e&&(e=new ui(t)),this.substrate=e,this.originator=t}async connectToSubstrate(){if("object"==typeof this.substrate)return;let e;const t=async t=>{let r;if(r="number"==typeof t?await Promise.race([e.getVersion({}),new Promise(((e,r)=>setTimeout((()=>r(new Error("Timed out."))),t)))]):await e.getVersion({}),"object"!=typeof r||"string"!=typeof r.version)throw new Error("Failed to use substrate.")};try{e=new Jr,await t(),this.substrate=e}catch(r){try{e=new ri,await t(200),this.substrate=e}catch(r){try{e=new ai(new oi(this.originator)),await t(),this.substrate=e}catch(r){try{e=new di(this.originator),await t(),this.substrate=e}catch(r){try{e=new ui(this.originator),await t(),this.substrate=e}catch(e){throw new Error("No wallet available over any communication substrate. Install a BSV wallet today!")}}}}}}async createAction(e){return await this.connectToSubstrate(),await this.substrate.createAction(e,this.originator)}async signAction(e){return await this.connectToSubstrate(),await this.substrate.signAction(e,this.originator)}async abortAction(e){return await this.connectToSubstrate(),await this.substrate.abortAction(e,this.originator)}async listActions(e){return await this.connectToSubstrate(),await this.substrate.listActions(e,this.originator)}async internalizeAction(e){return await this.connectToSubstrate(),await this.substrate.internalizeAction(e,this.originator)}async listOutputs(e){return await this.connectToSubstrate(),await this.substrate.listOutputs(e,this.originator)}async relinquishOutput(e){return await this.connectToSubstrate(),await this.substrate.relinquishOutput(e,this.originator)}async getPublicKey(e){return await this.connectToSubstrate(),await this.substrate.getPublicKey(e,this.originator)}async revealCounterpartyKeyLinkage(e){return await this.connectToSubstrate(),await this.substrate.revealCounterpartyKeyLinkage(e,this.originator)}async revealSpecificKeyLinkage(e){return await this.connectToSubstrate(),await this.substrate.revealSpecificKeyLinkage(e,this.originator)}async encrypt(e){return await this.connectToSubstrate(),await this.substrate.encrypt(e,this.originator)}async decrypt(e){return await this.connectToSubstrate(),await this.substrate.decrypt(e,this.originator)}async createHmac(e){return await this.connectToSubstrate(),await this.substrate.createHmac(e,this.originator)}async verifyHmac(e){return await this.connectToSubstrate(),await this.substrate.verifyHmac(e,this.originator)}async createSignature(e){return await this.connectToSubstrate(),await this.substrate.createSignature(e,this.originator)}async verifySignature(e){return await this.connectToSubstrate(),await this.substrate.verifySignature(e,this.originator)}async acquireCertificate(e){return await this.connectToSubstrate(),await this.substrate.acquireCertificate(e,this.originator)}async listCertificates(e){return await this.connectToSubstrate(),await this.substrate.listCertificates(e,this.originator)}async proveCertificate(e){return await this.connectToSubstrate(),await this.substrate.proveCertificate(e,this.originator)}async relinquishCertificate(e){return await this.connectToSubstrate(),await this.substrate.relinquishCertificate(e,this.originator)}async discoverByIdentityKey(e){return await this.connectToSubstrate(),await this.substrate.discoverByIdentityKey(e,this.originator)}async discoverByAttributes(e){return await this.connectToSubstrate(),await this.substrate.discoverByAttributes(e,this.originator)}async isAuthenticated(e={}){return await this.connectToSubstrate(),await this.substrate.isAuthenticated(e,this.originator)}async waitForAuthentication(e={}){return await this.connectToSubstrate(),await this.substrate.waitForAuthentication(e,this.originator)}async getHeight(e={}){return await this.connectToSubstrate(),await this.substrate.getHeight(e,this.originator)}async getHeaderForHeight(e){return await this.connectToSubstrate(),await this.substrate.getHeaderForHeight(e,this.originator)}async getNetwork(e={}){return await this.connectToSubstrate(),await this.substrate.getNetwork(e,this.originator)}async getVersion(e={}){return await this.connectToSubstrate(),await this.substrate.getVersion(e,this.originator)}}class fi{wallet;constructor(e){this.wallet=e}decodeOutpoint(e){const t=e.read(32);return`${Ne(t)}.${e.readVarIntNum()}`}encodeOutpoint(e){const t=new Ue,[r,i]=e.split(".");return t.write(Oe(r,"hex")),t.writeVarIntNum(Number(i)),t.toArray()}async transmitToWallet(e){const t=new Ke(e);try{const e=t.readUInt8(),r=si[e];if(void 0===r||""===r)throw new Error(`Invalid call code: ${e}`);const i=t.readUInt8(),n=t.read(i),s=xe(n),a=t;switch(r){case"createAction":{const e={},t=a.readVarIntNum(),r=a.read(t);e.description=xe(r);const i=a.readVarIntNum();e.inputBEEF=i>=0?a.read(i):void 0;const n=a.readVarIntNum();if(n>=0){e.inputs=[];for(let t=0;t<n;t++){const t={};t.outpoint=this.decodeOutpoint(a);const r=a.readVarIntNum();if(r>=0){const e=a.read(r);t.unlockingScript=Ne(e)}else{t.unlockingScript=void 0;const e=a.readVarIntNum();t.unlockingScriptLength=e}const i=a.readVarIntNum(),n=a.read(i);t.inputDescription=xe(n);const s=a.readVarIntNum();t.sequenceNumber=s>=0?s:void 0,e.inputs.push(t)}}else e.inputs=void 0;const o=a.readVarIntNum();if(o>=0){e.outputs=[];for(let t=0;t<o;t++){const t={},r=a.readVarIntNum(),i=a.read(r);t.lockingScript=Ne(i),t.satoshis=a.readVarIntNum();const n=a.readVarIntNum(),s=a.read(n);t.outputDescription=xe(s);const o=a.readVarIntNum();if(o>=0){const e=a.read(o);t.basket=xe(e)}else t.basket=void 0;const c=a.readVarIntNum();if(c>=0){const e=a.read(c);t.customInstructions=xe(e)}else t.customInstructions=void 0;const h=a.readVarIntNum();if(h>=0){t.tags=[];for(let e=0;e<h;e++){const e=a.readVarIntNum(),r=a.read(e),i=xe(r);t.tags.push(i)}}else t.tags=void 0;e.outputs.push(t)}}else e.outputs=void 0;const c=a.readVarIntNum();e.lockTime=c>=0?c:void 0;const h=a.readVarIntNum();e.version=h>=0?h:void 0;const d=a.readVarIntNum();if(d>=0){e.labels=[];for(let t=0;t<d;t++){const t=a.readVarIntNum(),r=a.read(t),i=xe(r);e.labels.push(i)}}else e.labels=void 0;if(1===a.readInt8()){e.options={};const t=a.readInt8();e.options.signAndProcess=-1===t?void 0:1===t;const r=a.readInt8();e.options.acceptDelayedBroadcast=-1===r?void 0:1===r;const i=a.readInt8();-1===i?e.options.trustSelf=void 0:1===i&&(e.options.trustSelf="known");const n=a.readVarIntNum();if(n>=0){e.options.knownTxids=[];for(let t=0;t<n;t++){const t=a.read(32),r=Ne(t);e.options.knownTxids.push(r)}}else e.options.knownTxids=void 0;const s=a.readInt8();e.options.returnTXIDOnly=-1===s?void 0:1===s;const o=a.readInt8();e.options.noSend=-1===o?void 0:1===o;const c=a.readVarIntNum();if(c>=0){e.options.noSendChange=[];for(let t=0;t<c;t++){const t=this.decodeOutpoint(a);e.options.noSendChange.push(t)}}else e.options.noSendChange=void 0;const h=a.readVarIntNum();if(h>=0){e.options.sendWith=[];for(let t=0;t<h;t++){const t=a.read(32),r=Ne(t);e.options.sendWith.push(r)}}else e.options.sendWith=void 0;const d=a.readInt8();e.options.randomizeOutputs=-1===d?void 0:1===d}else e.options=void 0;const u=await this.wallet.createAction(e,s),l=new Ue;if(null!=u.txid&&""!==u.txid?(l.writeInt8(1),l.write(Oe(u.txid,"hex"))):l.writeInt8(0),null!=u.tx?(l.writeInt8(1),l.writeVarIntNum(u.tx.length),l.write(u.tx)):l.writeInt8(0),null!=u.noSendChange){l.writeVarIntNum(u.noSendChange.length);for(const e of u.noSendChange)l.write(this.encodeOutpoint(e))}else l.writeVarIntNum(-1);if(null!=u.sendWithResults){l.writeVarIntNum(u.sendWithResults.length);for(const e of u.sendWithResults){let t;l.write(Oe(e.txid,"hex")),"unproven"===e.status?t=1:"sending"===e.status?t=2:"failed"===e.status&&(t=3),l.writeInt8(t)}}else l.writeVarIntNum(-1);if(null!=u.signableTransaction){l.writeInt8(1),l.writeVarIntNum(u.signableTransaction.tx.length),l.write(u.signableTransaction.tx);const e=Oe(u.signableTransaction.reference,"base64");l.writeVarIntNum(e.length),l.write(e)}else l.writeInt8(0);const f=new Ue;return f.writeUInt8(0),f.write(l.toArray()),f.toArray()}case"signAction":{const e={},t=a.readVarIntNum();e.spends={};for(let r=0;r<t;r++){const t=a.readVarIntNum(),r={},i=a.readVarIntNum(),n=a.read(i);r.unlockingScript=Ne(n);const s=a.readVarIntNum();r.sequenceNumber=s>=0?s:void 0,e.spends[t]=r}const r=a.readVarIntNum(),i=a.read(r);if(e.reference=Fe(i),1===a.readInt8()){e.options={};const t=a.readInt8();e.options.acceptDelayedBroadcast=-1===t?void 0:1===t;const r=a.readInt8();e.options.returnTXIDOnly=-1===r?void 0:1===r;const i=a.readInt8();e.options.noSend=-1===i?void 0:1===i;const n=a.readVarIntNum();if(n>=0){e.options.sendWith=[];for(let t=0;t<n;t++){const t=a.read(32),r=Ne(t);e.options.sendWith.push(r)}}else e.options.sendWith=void 0}else e.options=void 0;const n=await this.wallet.signAction(e,s),o=new Ue;if(null!=n.txid&&""!==n.txid?(o.writeInt8(1),o.write(Oe(n.txid,"hex"))):o.writeInt8(0),null!=n.tx?(o.writeInt8(1),o.writeVarIntNum(n.tx.length),o.write(n.tx)):o.writeInt8(0),null!=n.sendWithResults){o.writeVarIntNum(n.sendWithResults.length);for(const e of n.sendWithResults){let t;o.write(Oe(e.txid,"hex")),"unproven"===e.status?t=1:"sending"===e.status?t=2:"failed"===e.status&&(t=3),o.writeInt8(t)}}else o.writeVarIntNum(-1);const c=new Ue;return c.writeUInt8(0),c.write(o.toArray()),c.toArray()}case"abortAction":{const e=Fe(a.read());await this.wallet.abortAction({reference:e},s);const t=new Ue;return t.writeUInt8(0),t.toArray()}case"listActions":{const e={},t=a.readVarIntNum();e.labels=[];for(let r=0;r<t;r++){const t=a.readVarIntNum(),r=a.read(t);e.labels.push(xe(r))}const r=a.readInt8();-1===r?e.labelQueryMode=void 0:1===r?e.labelQueryMode="any":2===r&&(e.labelQueryMode="all");const i=["includeLabels","includeInputs","includeInputSourceLockingScripts","includeInputUnlockingScripts","includeOutputs","includeOutputLockingScripts"];for(const t of i){const r=a.readInt8();e[t]=-1===r?void 0:1===r}const n=a.readVarIntNum();e.limit=n>=0?n:void 0;const o=a.readVarIntNum();e.offset=o>=0?o:void 0;const c=a.readInt8();e.seekPermission=c>=0?1===c:void 0;const h=await this.wallet.listActions(e,s),d=new Ue;d.writeVarIntNum(h.totalActions);for(const e of h.actions){let t;switch(d.write(Oe(e.txid,"hex")),d.writeVarIntNum(e.satoshis),e.status){case"completed":t=1;break;case"unprocessed":t=2;break;case"sending":t=3;break;case"unproven":t=4;break;case"unsigned":t=5;break;case"nosend":t=6;break;case"nonfinal":t=7;break;case"failed":t=8;break;default:t=-1}d.writeInt8(t),d.writeInt8(e.isOutgoing?1:0);const r=Oe(e.description,"utf8");if(d.writeVarIntNum(r.length),d.write(r),void 0!==e.labels){d.writeVarIntNum(e.labels.length);for(const t of e.labels){const e=Oe(t,"utf8");d.writeVarIntNum(e.length),d.write(e)}}else d.writeVarIntNum(-1);if(d.writeVarIntNum(e.version),d.writeVarIntNum(e.lockTime),void 0!==e.inputs){d.writeVarIntNum(e.inputs.length);for(const t of e.inputs){if(d.write(this.encodeOutpoint(t.sourceOutpoint)),d.writeVarIntNum(t.sourceSatoshis),void 0!==t.sourceLockingScript){const e=Oe(t.sourceLockingScript,"hex");d.writeVarIntNum(e.length),d.write(e)}else d.writeVarIntNum(-1);if(void 0!==t.unlockingScript){const e=Oe(t.unlockingScript,"hex");d.writeVarIntNum(e.length),d.write(e)}else d.writeVarIntNum(-1);const e=Oe(t.inputDescription,"utf8");d.writeVarIntNum(e.length),d.write(e),d.writeVarIntNum(t.sequenceNumber)}}else d.writeVarIntNum(-1);if(void 0!==e.outputs){d.writeVarIntNum(e.outputs.length);for(const t of e.outputs){if(d.writeVarIntNum(t.outputIndex),d.writeVarIntNum(t.satoshis),void 0!==t.lockingScript){const e=Oe(t.lockingScript,"hex");d.writeVarIntNum(e.length),d.write(e)}else d.writeVarIntNum(-1);d.writeInt8(t.spendable?1:0);const e=Oe(t.outputDescription,"utf8");if(d.writeVarIntNum(e.length),d.write(e),void 0!==t.basket){const e=Oe(t.basket,"utf8");d.writeVarIntNum(e.length),d.write(e)}else d.writeVarIntNum(-1);if(void 0!==t.tags){d.writeVarIntNum(t.tags.length);for(const e of t.tags){const t=Oe(e,"utf8");d.writeVarIntNum(t.length),d.write(t)}}else d.writeVarIntNum(-1);if(void 0!==t.customInstructions){const e=Oe(t.customInstructions,"utf8");d.writeVarIntNum(e.length),d.write(e)}else d.writeVarIntNum(-1)}}else d.writeVarIntNum(-1)}const u=new Ue;return u.writeUInt8(0),u.write(d.toArray()),u.toArray()}case"internalizeAction":{const e={},t=a.readVarIntNum();e.tx=a.read(t);const r=a.readVarIntNum();e.outputs=[];for(let t=0;t<r;t++){const t={};t.outputIndex=a.readVarIntNum();const r=a.readUInt8();if(1===r){t.protocol="wallet payment",t.paymentRemittance={};const e=a.read(33);t.paymentRemittance.senderIdentityKey=Ne(e);const r=a.readVarIntNum(),i=a.read(r);t.paymentRemittance.derivationPrefix=Fe(i);const n=a.readVarIntNum(),s=a.read(n);t.paymentRemittance.derivationSuffix=Fe(s)}else if(2===r){t.protocol="basket insertion",t.insertionRemittance={};const e=a.readVarIntNum(),r=a.read(e);t.insertionRemittance.basket=xe(r);const i=a.readVarIntNum();if(i>=0){const e=a.read(i);t.insertionRemittance.customInstructions=xe(e)}const n=a.readVarIntNum();if(n>0){t.insertionRemittance.tags=[];for(let e=0;e<n;e++){const e=a.readVarIntNum(),r=a.read(e);t.insertionRemittance.tags.push(xe(r))}}else t.insertionRemittance.tags=[]}e.outputs.push(t)}const i=a.readVarIntNum();if(i>=0){e.labels=[];for(let t=0;t<i;t++){const t=a.readVarIntNum();e.labels.push(xe(a.read(t)))}}const n=a.readVarIntNum();e.description=xe(a.read(n));const o=a.readInt8();e.seekPermission=o>=0?1===o:void 0,await this.wallet.internalizeAction(e,s);const c=new Ue;return c.writeUInt8(0),c.toArray()}case"listOutputs":{const e={},t=a.readVarIntNum(),r=a.read(t);e.basket=xe(r);const i=a.readVarIntNum();if(i>0){e.tags=[];for(let t=0;t<i;t++){const t=a.readVarIntNum(),r=a.read(t);e.tags.push(xe(r))}}else e.tags=void 0;const n=a.readInt8();e.tagQueryMode=1===n?"all":2===n?"any":void 0;const o=a.readInt8();e.include=1===o?"locking scripts":2===o?"entire transactions":void 0;const c=a.readInt8();e.includeCustomInstructions=-1===c?void 0:1===c;const h=a.readInt8();e.includeTags=-1===h?void 0:1===h;const d=a.readInt8();e.includeLabels=-1===d?void 0:1===d;const u=a.readVarIntNum();e.limit=u>=0?u:void 0;const l=a.readVarIntNum();e.offset=l>=0?l:void 0;const f=a.readInt8();e.seekPermission=f>=0?1===f:void 0;const p=await this.wallet.listOutputs(e,s),b=new Ue;b.writeVarIntNum(p.totalOutputs),null!=p.BEEF?(b.writeVarIntNum(p.BEEF.length),b.write(p.BEEF)):b.writeVarIntNum(-1);for(const e of p.outputs){if(b.write(this.encodeOutpoint(e.outpoint)),b.writeVarIntNum(e.satoshis),void 0!==e.lockingScript){const t=Oe(e.lockingScript,"hex");b.writeVarIntNum(t.length),b.write(t)}else b.writeVarIntNum(-1);if(void 0!==e.customInstructions){const t=Oe(e.customInstructions,"utf8");b.writeVarIntNum(t.length),b.write(t)}else b.writeVarIntNum(-1);if(void 0!==e.tags){b.writeVarIntNum(e.tags.length);for(const t of e.tags){const e=Oe(t,"utf8");b.writeVarIntNum(e.length),b.write(e)}}else b.writeVarIntNum(-1);if(void 0!==e.labels){b.writeVarIntNum(e.labels.length);for(const t of e.labels){const e=Oe(t,"utf8");b.writeVarIntNum(e.length),b.write(e)}}else b.writeVarIntNum(-1)}const w=new Ue;return w.writeUInt8(0),w.write(b.toArray()),w.toArray()}case"relinquishOutput":{const e={},t=a.readVarIntNum(),r=a.read(t);e.basket=xe(r),e.output=this.decodeOutpoint(a),await this.wallet.relinquishOutput(e,s);const i=new Ue;return i.writeUInt8(0),i.toArray()}case"getPublicKey":{const e={},t=a.readUInt8();if(e.identityKey=1===t,!0!==e.identityKey){e.protocolID=this.decodeProtocolID(a),e.keyID=this.decodeString(a),e.counterparty=this.decodeCounterparty(a);const t=a.readInt8();e.privileged=-1===t?void 0:1===t;const r=a.readInt8();if(-1!==r){const t=a.read(r);e.privilegedReason=xe(t)}else e.privilegedReason=void 0;const i=a.readInt8();e.forSelf=-1===i?void 0:1===i}else{const t=a.readInt8();e.privileged=-1===t?void 0:1===t;const r=a.readInt8();if(-1!==r){const t=a.read(r);e.privilegedReason=xe(t)}else e.privilegedReason=void 0}const r=a.readInt8();e.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.getPublicKey(e,s),n=new Ue;n.writeUInt8(0);const o=Oe(i.publicKey,"hex");return n.write(o),n.toArray()}case"encrypt":{const e=this.decodeKeyRelatedParams(a),t=a.readVarIntNum();e.plaintext=a.read(t);const r=a.readInt8();e.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.encrypt(e,s),n=new Ue;return n.writeUInt8(0),n.write(i.ciphertext),n.toArray()}case"decrypt":{const e=this.decodeKeyRelatedParams(a),t=a.readVarIntNum();e.ciphertext=a.read(t);const r=a.readInt8();e.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.decrypt(e,s),n=new Ue;return n.writeUInt8(0),n.write(i.plaintext),n.toArray()}case"createHmac":{const e=this.decodeKeyRelatedParams(a),t=a.readVarIntNum();e.data=a.read(t);const r=a.readInt8();e.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.createHmac(e,s),n=new Ue;return n.writeUInt8(0),n.write(i.hmac),n.toArray()}case"verifyHmac":{const e=this.decodeKeyRelatedParams(a);e.hmac=a.read(32);const t=a.readVarIntNum();e.data=a.read(t);const r=a.readInt8();e.seekPermission=r>=0?1===r:void 0,await this.wallet.verifyHmac(e,s);const i=new Ue;return i.writeUInt8(0),i.toArray()}case"createSignature":{const e=this.decodeKeyRelatedParams(a),t=a.readUInt8();if(1===t){const t=a.readVarIntNum();e.data=a.read(t)}else 2===t&&(e.hashToDirectlySign=a.read(32));const r=a.readInt8();e.seekPermission=r>=0?1===r:void 0;const i=await this.wallet.createSignature(e,s),n=new Ue;return n.writeUInt8(0),n.write(i.signature),n.toArray()}case"verifySignature":{const e=this.decodeKeyRelatedParams(a),t=a.readInt8();e.forSelf=-1===t?void 0:1===t;const r=a.readVarIntNum();e.signature=a.read(r);const i=a.readUInt8();if(1===i){const t=a.readVarIntNum();e.data=a.read(t)}else 2===i&&(e.hashToDirectlyVerify=a.read(32));const n=a.readInt8();e.seekPermission=n>=0?1===n:void 0,await this.wallet.verifySignature(e,s);const o=new Ue;return o.writeUInt8(0),o.toArray()}case"isAuthenticated":{const e=await this.wallet.isAuthenticated({},s),t=new Ue;return t.writeUInt8(0),t.writeUInt8(e.authenticated?1:0),t.toArray()}case"waitForAuthentication":{await this.wallet.waitForAuthentication({},s);const e=new Ue;return e.writeUInt8(0),e.toArray()}case"getHeight":{const e=await this.wallet.getHeight({},s),t=new Ue;return t.writeUInt8(0),t.writeVarIntNum(e.height),t.toArray()}case"getHeaderForHeight":{const e={};e.height=a.readVarIntNum();const t=await this.wallet.getHeaderForHeight(e,s),r=new Ue;r.writeUInt8(0);const i=Oe(t.header,"hex");return r.write(i),r.toArray()}case"getNetwork":{const e=await this.wallet.getNetwork({},s),t=new Ue;return t.writeUInt8(0),t.writeUInt8("mainnet"===e.network?0:1),t.toArray()}case"getVersion":{const e=await this.wallet.getVersion({},s),t=new Ue;t.writeUInt8(0);const r=Oe(e.version,"utf8");return t.write(r),t.toArray()}case"revealCounterpartyKeyLinkage":{const e={},t=a.readInt8();e.privileged=-1===t?void 0:1===t;const r=a.readInt8();if(-1===r)e.privilegedReason=void 0;else{const t=a.read(r);e.privilegedReason=xe(t)}const i=a.read(33);e.counterparty=Ne(i);const n=a.read(33);e.verifier=Ne(n);const o=await this.wallet.revealCounterpartyKeyLinkage(e,s),c=new Ue;c.write(Oe(o.prover,"hex")),c.write(Oe(o.verifier,"hex")),c.write(Oe(o.counterparty,"hex"));const h=Oe(o.revelationTime,"utf8");c.writeVarIntNum(h.length),c.write(h),c.writeVarIntNum(o.encryptedLinkage.length),c.write(o.encryptedLinkage),c.writeVarIntNum(o.encryptedLinkageProof.length),c.write(o.encryptedLinkageProof);const d=new Ue;return d.writeUInt8(0),d.write(c.toArray()),d.toArray()}case"revealSpecificKeyLinkage":{const e=this.decodeKeyRelatedParams(a),t=a.read(33);e.verifier=Ne(t);const r=await this.wallet.revealSpecificKeyLinkage(e,s),i=new Ue;i.write(Oe(r.prover,"hex")),i.write(Oe(r.verifier,"hex")),i.write(Oe(r.counterparty,"hex")),i.writeUInt8(r.protocolID[0]);const n=Oe(r.protocolID[1],"utf8");i.writeVarIntNum(n.length),i.write(n);const o=Oe(r.keyID,"utf8");i.writeVarIntNum(o.length),i.write(o),i.writeVarIntNum(r.encryptedLinkage.length),i.write(r.encryptedLinkage),i.writeVarIntNum(r.encryptedLinkageProof.length),i.write(r.encryptedLinkageProof),i.writeUInt8(r.proofType);const c=new Ue;return c.writeUInt8(0),c.write(i.toArray()),c.toArray()}case"acquireCertificate":{const e={},t=a.read(32);e.type=Fe(t);const r=a.read(33);e.certifier=Ne(r);const i=a.readVarIntNum();e.fields={};for(let t=0;t<i;t++){const t=a.readVarIntNum(),r=a.read(t),i=xe(r),n=a.readVarIntNum(),s=a.read(n),o=xe(s);e.fields[i]=o}const n=a.readInt8();e.privileged=-1===n?void 0:1===n;const o=a.readInt8();if(-1===o)e.privilegedReason=void 0;else{const t=a.read(o);e.privilegedReason=xe(t)}const c=a.readUInt8();if(e.acquisitionProtocol=1===c?"direct":"issuance","direct"===e.acquisitionProtocol){const t=a.read(32);e.serialNumber=Fe(t),e.revocationOutpoint=this.decodeOutpoint(a);const r=a.readVarIntNum(),i=a.read(r);e.signature=Ne(i);const n=a.readUInt8();if(11===n)e.keyringRevealer="certifier";else{const t=[n].concat(a.read(32));e.keyringRevealer=Ne(t)}const s=a.readVarIntNum();e.keyringForSubject={};for(let t=0;t<s;t++){const t=a.readVarIntNum(),r=a.read(t),i=xe(r),n=a.readVarIntNum(),s=Fe(a.read(n));e.keyringForSubject[i]=s}}else{const t=a.readVarIntNum(),r=a.read(t);e.certifierUrl=xe(r)}const h=await this.wallet.acquireCertificate(e,s),d=new ii(h.type,h.serialNumber,h.subject,h.certifier,h.revocationOutpoint,h.fields,h.signature).toBinary(),u=new Ue;return u.writeUInt8(0),u.write(d),u.toArray()}case"listCertificates":{const e={},t=a.readVarIntNum();e.certifiers=[];for(let r=0;r<t;r++){const t=a.read(33);e.certifiers.push(Ne(t))}const r=a.readVarIntNum();e.types=[];for(let t=0;t<r;t++){const t=a.read(32);e.types.push(Fe(t))}const i=a.readVarIntNum();e.limit=i>=0?i:void 0;const n=a.readVarIntNum();e.offset=n>=0?n:void 0;const o=a.readInt8();e.privileged=-1===o?void 0:1===o;const c=a.readInt8();if(-1===c)e.privilegedReason=void 0;else{const t=a.read(c);e.privilegedReason=xe(t)}const h=await this.wallet.listCertificates(e,s),d=new Ue;d.writeVarIntNum(h.totalCertificates);for(const e of h.certificates){const t=new ii(e.type,e.serialNumber,e.subject,e.certifier,e.revocationOutpoint,e.fields,e.signature).toBinary();d.writeVarIntNum(t.length),d.write(t)}const u=new Ue;return u.writeUInt8(0),u.write(d.toArray()),u.toArray()}case"proveCertificate":{const e={},t={},r=a.read(32);t.type=Fe(r);const i=a.read(33);t.subject=Ne(i);const n=a.read(32);t.serialNumber=Fe(n);const o=a.read(33);t.certifier=Ne(o),t.revocationOutpoint=this.decodeOutpoint(a);const c=a.readVarIntNum(),h=a.read(c);t.signature=Ne(h);const d=a.readVarIntNum();t.fields={};for(let e=0;e<d;e++){const e=a.readVarIntNum(),r=a.read(e),i=xe(r),n=a.readVarIntNum(),s=a.read(n),o=xe(s);t.fields[i]=o}e.certificate=t;const u=a.readVarIntNum();e.fieldsToReveal=[];for(let t=0;t<u;t++){const t=a.readVarIntNum(),r=a.read(t),i=xe(r);e.fieldsToReveal.push(i)}const l=a.read(33);e.verifier=Ne(l);const f=a.readInt8();e.privileged=-1===f?void 0:1===f;const p=a.readInt8();if(-1===p)e.privilegedReason=void 0;else{const t=a.read(p);e.privilegedReason=xe(t)}const b=await this.wallet.proveCertificate(e,s),w=new Ue,g=Object.entries(b.keyringForVerifier);w.writeVarIntNum(g.length);for(const[e,t]of g){const r=Oe(e,"utf8");w.writeVarIntNum(r.length),w.write(r);const i=Oe(t,"base64");w.writeVarIntNum(i.length),w.write(i)}const m=new Ue;return m.writeUInt8(0),m.write(w.toArray()),m.toArray()}case"relinquishCertificate":{const e={},t=a.read(32);e.type=Fe(t);const r=a.read(32);e.serialNumber=Fe(r);const i=a.read(33);e.certifier=Ne(i),await this.wallet.relinquishCertificate(e,s);const n=new Ue;return n.writeUInt8(0),n.toArray()}case"discoverByIdentityKey":{const e={},t=a.read(33);e.identityKey=Ne(t);const r=a.readVarIntNum();e.limit=r>=0?r:void 0;const i=a.readVarIntNum();e.offset=i>=0?i:void 0;const n=a.readInt8();e.seekPermission=n>=0?1===n:void 0;const o=await this.wallet.discoverByIdentityKey(e,s),c=this.serializeDiscoveryResult(o),h=new Ue;return h.writeUInt8(0),h.write(c),h.toArray()}case"discoverByAttributes":{const e={},t=a.readVarIntNum();e.attributes={};for(let r=0;r<t;r++){const t=a.readVarIntNum(),r=a.read(t),i=xe(r),n=a.readVarIntNum(),s=a.read(n),o=xe(s);e.attributes[i]=o}const r=a.readVarIntNum();e.limit=r>=0?r:void 0;const i=a.readVarIntNum();e.offset=i>=0?i:void 0;const n=a.readInt8();e.seekPermission=n>=0?1===n:void 0;const o=await this.wallet.discoverByAttributes(e,s),c=this.serializeDiscoveryResult(o),h=new Ue;return h.writeUInt8(0),h.write(c),h.toArray()}default:throw new Error(`Method ${r} not implemented`)}}catch(e){const t=new Ue;t.writeUInt8("number"==typeof e.code?e.code:1);const r="string"==typeof e.message?e.message:"Unknown error",i=Oe(r,"utf8");t.writeVarIntNum(i.length),t.write(i);const n="string"==typeof e.stack?e.stack:"",s=Oe(n,"utf8");return t.writeVarIntNum(s.length),t.write(s),t.toArray()}}decodeProtocolID(e){const t=e.readUInt8(),r=e.readVarIntNum(),i=e.read(r);return[t,xe(i)]}decodeString(e){const t=e.readVarIntNum(),r=e.read(t);return xe(r)}decodeCounterparty(e){const t=e.readUInt8();if(11===t)return"self";if(12===t)return"anyone";if(0!==t){const r=e.read(32);return Ne([t,...r])}}serializeDiscoveryResult(e){const t=new Ue;t.writeVarIntNum(e.totalCertificates);for(const r of e.certificates){const e=new ii(r.type,r.serialNumber,r.subject,r.certifier,r.revocationOutpoint,r.fields,r.signature).toBinary();t.writeVarIntNum(e.length),t.write(e);const i=Oe(r.certifierInfo.name,"utf8");t.writeVarIntNum(i.length),t.write(i);const n=Oe(r.certifierInfo.iconUrl,"utf8");t.writeVarIntNum(n.length),t.write(n);const s=Oe(r.certifierInfo.description,"utf8");t.writeVarIntNum(s.length),t.write(s),t.writeUInt8(r.certifierInfo.trust);const a=Object.entries(r.publiclyRevealedKeyring);t.writeVarIntNum(a.length);for(const[e,r]of a){const i=Oe(e,"utf8");t.writeVarIntNum(i.length),t.write(i);const n=Oe(r,"base64");t.writeVarIntNum(n.length),t.write(n)}const o=Object.entries(r.decryptedFields);t.writeVarIntNum(o.length);for(const[e,r]of o){const i=Oe(e,"utf8");t.writeVarIntNum(i.length),t.write(i);const n=Oe(r,"utf8");t.writeVarIntNum(n.length),t.write(n)}}return t.toArray()}decodeKeyRelatedParams(e){const t={};t.protocolID=this.decodeProtocolID(e);const r=e.readVarIntNum(),i=e.read(r);t.keyID=xe(i),t.counterparty=this.decodeCounterparty(e);const n=e.readInt8();t.privileged=-1===n?void 0:1===n;const s=e.readInt8();if(-1===s)t.privilegedReason=void 0;else{const r=e.read(s);t.privilegedReason=xe(r)}return t}}class pi extends ii{masterKeyring;constructor(e,t,r,i,n,s,a,o){super(e,t,r,i,n,s,o);for(const e of Object.keys(s))if(void 0===a[e]||""===a[e])throw new Error(`Master keyring must contain a value for every field. Missing or empty key for field: "${e}".`);this.masterKeyring=a}static async createCertificateFields(e,t,r,i,n){const s={},a={};for(const[o,c]of Object.entries(r)){const r=Dt.fromRandom(),h=r.encrypt(Oe(c,"utf8"));s[o]=Fe(h);const{ciphertext:d}=await e.encrypt({plaintext:r.toArray(),...ii.getCertificateFieldEncryptionDetails(o),counterparty:t,privileged:i,privilegedReason:n});a[o]=Fe(d)}return{certificateFields:s,masterKeyring:a}}static async createKeyringForVerifier(e,t,r,i,n,s,a,o,c){if(!Array.isArray(n))throw new Error("fieldsToReveal must be an array of strings");const h={};for(const d of n){if(void 0===i[d]||null===i[d]||""===i[d])throw new Error(`Fields to reveal must be a subset of the certificate fields. Missing the "${d}" field.`);const n=(await this.decryptField(e,s,d,i[d],t,o,c)).fieldRevelationKey,{ciphertext:u}=await e.encrypt({plaintext:n,...ii.getCertificateFieldEncryptionDetails(d,a),counterparty:r,privileged:o,privilegedReason:c});h[d]=Fe(u)}return h}static async issueCertificateForSubject(e,t,r,i,n=async e=>"Certificate revocation not tracked.",s){const a=s??Fe(ut(32)),{certificateFields:o,masterKeyring:c}=await this.createCertificateFields(e,t,r),h=await n(a),d=new pi(i,a,t,(await e.getPublicKey({identityKey:!0})).publicKey,h,o,c);return await d.sign(e),d}static async decryptFields(e,t,r,i,n,s){if(null==t||0===Object.keys(t).length)throw new Error("A MasterCertificate must have a valid masterKeyring!");try{const a={};for(const o of Object.keys(r))a[o]=(await this.decryptField(e,t,o,r[o],i,n,s)).decryptedFieldValue;return a}catch{throw new Error("Failed to decrypt all master certificate fields.")}}static async decryptField(e,t,r,i,n,s,a){if(null==t||0===Object.keys(t).length)throw new Error("A MasterCertificate must have a valid masterKeyring!");try{const{plaintext:o}=await e.decrypt({ciphertext:Oe(t[r],"base64"),...ii.getCertificateFieldEncryptionDetails(r),counterparty:n,privileged:s,privilegedReason:a}),c=new Dt(o).decrypt(Oe(i,"base64"));return{fieldRevelationKey:o,decryptedFieldValue:xe(c)}}catch{throw new Error("Failed to decrypt certificate field!")}}}class bi extends ii{keyring;decryptedFields;constructor(e,t,r,i,n,s,a,o,c){super(e,t,r,i,n,s,o),this.keyring=a,this.decryptedFields=c}static fromCertificate(e,t){return new bi(e.type,e.serialNumber,e.subject,e.certifier,e.revocationOutpoint,e.fields,t,e.signature)}async decryptFields(e,t,r){if(null==this.keyring||0===Object.keys(this.keyring).length)throw new Error("A keyring is required to decrypt certificate fields for the verifier.");try{const i={};for(const n in this.keyring){const{plaintext:s}=await e.decrypt({ciphertext:Oe(this.keyring[n],"base64"),...ii.getCertificateFieldEncryptionDetails(n,this.serialNumber),counterparty:this.subject,privileged:t,privilegedReason:r}),a=new Dt(s).decrypt(Oe(this.fields[n],"base64"));i[n]=xe(a)}return i}catch(e){throw new Error(`Failed to decrypt selectively revealed certificate fields using keyring: ${String(e instanceof Error?e.message:e)}`)}}}class wi extends Zr{keyDeriver;constructor(e){if(super(e),e instanceof Gr)this.keyDeriver=e;else{if(!("string"==typeof e||e instanceof bt))throw new Error("Invalid key deriver provided");this.keyDeriver=new Yr(e)}}async isAuthenticated(){throw new Error("not implemented")}async waitForAuthentication(){throw new Error("not implemented")}async getNetwork(){throw new Error("not implemented")}async getVersion(){throw new Error("not implemented")}async getPublicKey(e){if(!0===e.privileged)throw new Error("no privilege support");if(!0===e.identityKey){if(null===this.keyDeriver||void 0===this.keyDeriver)throw new Error("keyDeriver is not initialized");return{publicKey:this.keyDeriver.rootKey.toPublicKey().toString()}}if(null==e.protocolID||"string"!=typeof e.keyID||""===e.keyID.trim())throw new Error("protocolID and keyID are required if identityKey is false or undefined.");if(null===this.keyDeriver||void 0===this.keyDeriver)throw new Error("keyDeriver is not initialized");return{publicKey:this.keyDeriver.derivePublicKey(e.protocolID,e.keyID,"string"==typeof e.counterparty&&""!==e.counterparty.trim()?e.counterparty:"self",Boolean(e.forSelf)).toString()}}async createAction(){throw new Error("not implemented")}async signAction(){throw new Error("not implemented")}async abortAction(){throw new Error("not implemented")}async listActions(){throw new Error("not implemented")}async internalizeAction(){throw new Error("not implemented")}async listOutputs(){throw new Error("not implemented")}async relinquishOutput(){throw new Error("not implemented")}async acquireCertificate(){throw new Error("not implemented")}async listCertificates(){throw new Error("not implemented")}async proveCertificate(){throw new Error("not implemented")}async relinquishCertificate(){throw new Error("not implemented")}async discoverByIdentityKey(){throw new Error("not implemented")}async discoverByAttributes(){throw new Error("not implemented")}async getHeight(){throw new Error("not implemented")}async getHeaderForHeight(){throw new Error("not implemented")}}class gi{sessionNonceToSession;identityKeyToNonces;constructor(){this.sessionNonceToSession=new Map,this.identityKeyToNonces=new Map}addSession(e){if("string"!=typeof e.sessionNonce)throw new Error("Invalid session: sessionNonce is required to add a session.");if(this.sessionNonceToSession.set(e.sessionNonce,e),"string"==typeof e.peerIdentityKey){let t=this.identityKeyToNonces.get(e.peerIdentityKey);null==t&&(t=new Set,this.identityKeyToNonces.set(e.peerIdentityKey,t)),t.add(e.sessionNonce)}}updateSession(e){this.removeSession(e),this.addSession(e)}getSession(e){const t=this.sessionNonceToSession.get(e);if(null!=t)return t;const r=this.identityKeyToNonces.get(e);if(null==r||0===r.size)return;let i;for(const e of r){const t=this.sessionNonceToSession.get(e);null!=t&&(null==i||(t.lastUpdate??0)>(i.lastUpdate??0))&&(i=t)}return i}removeSession(e){if("string"==typeof e.sessionNonce&&this.sessionNonceToSession.delete(e.sessionNonce),"string"==typeof e.peerIdentityKey){const t=this.identityKeyToNonces.get(e.peerIdentityKey);null!=t&&(t.delete(e.sessionNonce??""),0===t.size&&this.identityKeyToNonces.delete(e.peerIdentityKey))}}hasSession(e){if(this.sessionNonceToSession.has(e))return!0;const t=this.identityKeyToNonces.get(e);return!(null==t)&&t.size>0}}async function mi(e,t,r="self"){const i=Oe(e,"base64"),n=i.slice(0,16),s=i.slice(16),{valid:a}=await t.verifyHmac({data:n,hmac:s,protocolID:[2,"server hmac"],keyID:xe(n),counterparty:r});return a}async function yi(e,t="self"){const r=ut(16),{hmac:i}=await e.createHmac({protocolID:[2,"server hmac"],keyID:xe(r),data:r,counterparty:t});return Fe([...r,...i])}const vi=async(e,t,r)=>{const i=await e.listCertificates({certifiers:t.certifiers,types:Object.keys(t.types)});return await Promise.all(i.certificates.map((async i=>{const{keyringForVerifier:n}=await e.proveCertificate({certificate:i,fieldsToReveal:t.types[i.type],verifier:r});return new bi(i.type,i.serialNumber,i.subject,i.certifier,i.revocationOutpoint,i.fields,n,i.signature)})))},Ii=async(e,t,r)=>{if(null==t.certificates||0===t.certificates.length)throw new Error("No certificates were provided in the AuthMessage.");await Promise.all(t.certificates.map((async i=>{if(i.subject!==t.identityKey)throw new Error(`The subject of one of your certificates ("${i.subject}") is not the same as the request sender ("${t.identityKey}").`);const n=new bi(i.type,i.serialNumber,i.subject,i.certifier,i.revocationOutpoint,i.fields,i.keyring,i.signature);if(!await n.verify())throw new Error(`The signature for the certificate with serial number ${n.serialNumber} is invalid!`);if(null!=r){const{certifiers:e,types:t}=r;if(!e.includes(n.certifier))throw new Error(`Certificate with serial number ${n.serialNumber} has an unrequested certifier: ${n.certifier}`);if(null==t[n.type])throw new Error(`Certificate with type ${n.type} was not requested`)}await n.decryptFields(e)})))},ki="0.1";class Si{sessionManager;transport;wallet;certificatesToRequest;onGeneralMessageReceivedCallbacks=new Map;onCertificatesReceivedCallbacks=new Map;onCertificateRequestReceivedCallbacks=new Map;onInitialResponseReceivedCallbacks=new Map;callbackIdCounter=0;autoPersistLastSession=!0;lastInteractedWithPeer;constructor(e,t,r,i,n){this.wallet=e,this.transport=t,this.certificatesToRequest=r??{certifiers:[],types:{}},this.transport.onData(this.handleIncomingMessage.bind(this)).catch((e=>{throw e})),this.sessionManager=null!=i?i:new gi,this.autoPersistLastSession=!1!==n}async toPeer(e,t,r){this.autoPersistLastSession&&"string"==typeof this.lastInteractedWithPeer&&"string"!=typeof t&&(t=this.lastInteractedWithPeer);const i=await this.getAuthenticatedSession(t,r),n=Fe(ut(32)),{signature:s}=await this.wallet.createSignature({data:e,protocolID:[2,"auth message signature"],keyID:`${n} ${i.peerNonce??""}`,counterparty:i.peerIdentityKey}),a={version:ki,messageType:"general",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,nonce:n,yourNonce:i.peerNonce,payload:e,signature:s};i.lastUpdate=Date.now(),this.sessionManager.updateSession(i);try{await this.transport.send(a)}catch(e){const t=new Error(`Failed to send message to peer ${i.peerIdentityKey??"unknown"}: ${String(e.message)}`);throw t.stack=e.stack,t}}async requestCertificates(e,t,r=1e4){this.autoPersistLastSession&&"string"==typeof this.lastInteractedWithPeer&&"string"!=typeof t&&(t=this.lastInteractedWithPeer);const i=await this.getAuthenticatedSession(t,r),n=Fe(ut(32)),{signature:s}=await this.wallet.createSignature({data:Oe(JSON.stringify(e),"utf8"),protocolID:[2,"auth message signature"],keyID:`${n} ${i.peerNonce??""}`,counterparty:i.peerIdentityKey}),a={version:ki,messageType:"certificateRequest",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,nonce:n,initialNonce:i.sessionNonce,yourNonce:i.peerNonce,requestedCertificates:e,signature:s};i.lastUpdate=Date.now(),this.sessionManager.updateSession(i);try{await this.transport.send(a)}catch(e){throw new Error(`Failed to send certificate request message to peer ${i.peerIdentityKey??"unknown"}: ${String(e.message)}`)}}async getAuthenticatedSession(e,t){if(void 0===this.transport)throw new Error("Peer transport is not connected!");let r;if("string"==typeof e&&(r=this.sessionManager.getSession(e)),null==r||!r.isAuthenticated){const i=await this.initiateHandshake(e,t);if(r=this.sessionManager.getSession(i),null==r||!r.isAuthenticated)throw new Error("Unable to establish mutual authentication with peer!")}return r}listenForGeneralMessages(e){const t=this.callbackIdCounter++;return this.onGeneralMessageReceivedCallbacks.set(t,e),t}stopListeningForGeneralMessages(e){this.onGeneralMessageReceivedCallbacks.delete(e)}listenForCertificatesReceived(e){const t=this.callbackIdCounter++;return this.onCertificatesReceivedCallbacks.set(t,e),t}stopListeningForCertificatesReceived(e){this.onCertificatesReceivedCallbacks.delete(e)}listenForCertificatesRequested(e){const t=this.callbackIdCounter++;return this.onCertificateRequestReceivedCallbacks.set(t,e),t}stopListeningForCertificatesRequested(e){this.onCertificateRequestReceivedCallbacks.delete(e)}async initiateHandshake(e,t=1e4){const r=await yi(this.wallet),i=Date.now();this.sessionManager.addSession({isAuthenticated:!1,sessionNonce:r,peerIdentityKey:e,lastUpdate:i});const n={version:ki,messageType:"initialRequest",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,initialNonce:r,requestedCertificates:this.certificatesToRequest};return await this.transport.send(n),await this.waitForInitialResponse(r,t)}async waitForInitialResponse(e,t=1e4){return await new Promise(((r,i)=>{const n=this.listenForInitialResponse(e,(e=>{clearTimeout(s),this.stopListeningForInitialResponses(n),r(e)})),s=setTimeout((()=>{this.stopListeningForInitialResponses(n),i(new Error("Initial response timed out."))}),t)}))}listenForInitialResponse(e,t){const r=this.callbackIdCounter++;return this.onInitialResponseReceivedCallbacks.set(r,{callback:t,sessionNonce:e}),r}stopListeningForInitialResponses(e){this.onInitialResponseReceivedCallbacks.delete(e)}async handleIncomingMessage(e){if("string"!=typeof e.version||e.version!==ki)throw new Error(`Invalid or unsupported message auth version! Received: ${e.version}, expected: ${ki}`);switch(e.messageType){case"initialRequest":await this.processInitialRequest(e);break;case"initialResponse":await this.processInitialResponse(e);break;case"certificateRequest":await this.processCertificateRequest(e);break;case"certificateResponse":await this.processCertificateResponse(e);break;case"general":await this.processGeneralMessage(e);break;default:throw new Error(`Unknown message type of ${String(e.messageType)} from ${String(e.identityKey)}`)}}async processInitialRequest(e){if("string"!=typeof e.identityKey||"string"!=typeof e.initialNonce||""===e.initialNonce)throw new Error("Missing required fields in initialRequest message.");const t=await yi(this.wallet),r=Date.now();let i;this.sessionManager.addSession({isAuthenticated:!0,sessionNonce:t,peerNonce:e.initialNonce,peerIdentityKey:e.identityKey,lastUpdate:r}),null!=e.requestedCertificates&&Array.isArray(e.requestedCertificates.certifiers)&&e.requestedCertificates.certifiers.length>0&&(this.onCertificateRequestReceivedCallbacks.size>0?this.onCertificateRequestReceivedCallbacks.forEach((t=>{t(e.identityKey,e.requestedCertificates)})):i=await vi(this.wallet,e.requestedCertificates,e.identityKey));const{signature:n}=await this.wallet.createSignature({data:Oe(e.initialNonce+t,"base64"),protocolID:[2,"auth message signature"],keyID:`${e.initialNonce} ${t}`,counterparty:e.identityKey}),s={version:ki,messageType:"initialResponse",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,initialNonce:t,yourNonce:e.initialNonce,certificates:i,requestedCertificates:this.certificatesToRequest,signature:n};void 0===this.lastInteractedWithPeer&&(this.lastInteractedWithPeer=e.identityKey),await this.transport.send(s)}async processInitialResponse(e){if(!await mi(e.yourNonce,this.wallet))throw new Error(`Initial response nonce verification failed from peer: ${e.identityKey}`);const t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw new Error(`Peer session not found for peer: ${e.identityKey}`);const r=Oe((t.sessionNonce??"")+(e.initialNonce??""),"base64"),{valid:i}=await this.wallet.verifySignature({data:r,signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${t.sessionNonce??""} ${e.initialNonce??""}`,counterparty:e.identityKey});if(!i)throw new Error(`Unable to verify initial response signature for peer: ${e.identityKey}`);if(t.peerNonce=e.initialNonce,t.peerIdentityKey=e.identityKey,t.isAuthenticated=!0,t.lastUpdate=Date.now(),this.sessionManager.updateSession(t),this.certificatesToRequest?.certifiers?.length>0&&e.certificates?.length>0&&(await Ii(this.wallet,e,this.certificatesToRequest),this.onCertificatesReceivedCallbacks.forEach((t=>t(e.identityKey,e.certificates)))),this.lastInteractedWithPeer=e.identityKey,this.onInitialResponseReceivedCallbacks.forEach((e=>{e.sessionNonce===t.sessionNonce&&e.callback(t.sessionNonce)})),null!=e.requestedCertificates&&Array.isArray(e.requestedCertificates.certifiers)&&e.requestedCertificates.certifiers.length>0)if(this.onCertificateRequestReceivedCallbacks.size>0)this.onCertificateRequestReceivedCallbacks.forEach((t=>{t(e.identityKey,e.requestedCertificates)}));else{const t=await vi(this.wallet,e.requestedCertificates,e.identityKey);await this.sendCertificateResponse(e.identityKey,t)}}async processCertificateRequest(e){if(!await mi(e.yourNonce,this.wallet))throw new Error(`Unable to verify nonce for certificate request message from: ${e.identityKey}`);const t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw new Error(`Session not found for nonce: ${e.yourNonce}`);const{valid:r}=await this.wallet.verifySignature({data:Oe(JSON.stringify(e.requestedCertificates),"utf8"),signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${e.nonce??""} ${t.sessionNonce??""}`,counterparty:t.peerIdentityKey});if(!r)throw new Error(`Invalid signature in certificate request message from ${t.peerIdentityKey}`);if(t.lastUpdate=Date.now(),this.sessionManager.updateSession(t),null!=e.requestedCertificates&&Array.isArray(e.requestedCertificates.certifiers)&&e.requestedCertificates.certifiers.length>0)if(this.onCertificateRequestReceivedCallbacks.size>0)this.onCertificateRequestReceivedCallbacks.forEach((t=>{t(e.identityKey,e.requestedCertificates)}));else{const t=await vi(this.wallet,e.requestedCertificates,e.identityKey);await this.sendCertificateResponse(e.identityKey,t)}}async sendCertificateResponse(e,t){const r=await this.getAuthenticatedSession(e),i=Fe(ut(32)),{signature:n}=await this.wallet.createSignature({data:Oe(JSON.stringify(t),"utf8"),protocolID:[2,"auth message signature"],keyID:`${i} ${r.peerNonce??""}`,counterparty:r.peerIdentityKey}),s={version:ki,messageType:"certificateResponse",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,nonce:i,initialNonce:r.sessionNonce,yourNonce:r.peerNonce,certificates:t,signature:n};r.lastUpdate=Date.now(),this.sessionManager.updateSession(r);try{await this.transport.send(s)}catch(e){const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to send certificate response message to peer ${r.peerIdentityKey??"unknown"}: ${t}`)}}async processCertificateResponse(e){if(!await mi(e.yourNonce,this.wallet))throw new Error(`Unable to verify nonce for certificate response from: ${e.identityKey}`);const t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw new Error(`Session not found for nonce: ${e.yourNonce}`);const{valid:r}=await this.wallet.verifySignature({data:Oe(JSON.stringify(e.certificates),"utf8"),signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${e.nonce??""} ${t.sessionNonce??""}`,counterparty:e.identityKey});if(!r)throw new Error(`Unable to verify certificate response signature for peer: ${e.identityKey}`);await Ii(this.wallet,e,e.requestedCertificates),this.onCertificatesReceivedCallbacks.forEach((t=>{t(e.identityKey,e.certificates??[])})),t.lastUpdate=Date.now(),this.sessionManager.updateSession(t)}async processGeneralMessage(e){if(!await mi(e.yourNonce,this.wallet))throw new Error(`Unable to verify nonce for general message from: ${e.identityKey}`);const t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw new Error(`Session not found for nonce: ${e.yourNonce}`);const{valid:r}=await this.wallet.verifySignature({data:e.payload,signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${e.nonce??""} ${t.sessionNonce??""}`,counterparty:t.peerIdentityKey});if(!r)throw new Error(`Invalid signature in generalMessage from ${t.peerIdentityKey}`);t.lastUpdate=Date.now(),this.sessionManager.updateSession(t),this.lastInteractedWithPeer=e.identityKey,this.onGeneralMessageReceivedCallbacks.forEach((t=>{t(e.identityKey,e.payload??[])}))}}const Ei="undefined"!=typeof window?fetch.bind(window):fetch;class Pi{onDataCallback;fetchClient;baseUrl;constructor(e,t=Ei){this.fetchClient=t,this.baseUrl=e}async send(e){if(!this.onDataCallback)throw new Error("Listen before you start speaking. God gave you two ears and one mouth for a reason.");if("general"!==e.messageType)return new Promise((async(t,r)=>{try{const r=this.fetchClient(`${this.baseUrl}/.well-known/auth`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});"initialRequest"!==e.messageType&&t();const i=await r;if(!i.ok||!this.onDataCallback)throw new Error("HTTP server failed to authenticate");{const e=await i.json();this.onDataCallback(e)}"initialRequest"===e.messageType&&t()}catch(e){return void r(e)}}));{const t=this.deserializeRequestPayload(e.payload),r=`${this.baseUrl}${t.urlPostfix}`;let i=t;if("object"!=typeof t.headers&&(i.headers={}),i.headers["x-bsv-auth-version"]=e.version,i.headers["x-bsv-auth-identity-key"]=e.identityKey,i.headers["x-bsv-auth-nonce"]=e.nonce,i.headers["x-bsv-auth-your-nonce"]=e.yourNonce,i.headers["x-bsv-auth-signature"]=Ne(e.signature),i.headers["x-bsv-auth-request-id"]=t.requestId,i.body){const e=i.headers;if(!e["content-type"])throw new Error("Content-Type header is required for requests with a body.");const t=e["content-type"];t.includes("application/json")||t.includes("application/x-www-form-urlencoded")||t.includes("text/plain")?i.body=xe(i.body):i.body=new Uint8Array(i.body)}const n=await this.fetchClient(r,{method:i.method,headers:i.headers,body:i.body});if(500===n.status&&null==n.headers.get("x-bsv-auth-request-id")&&null==n.headers.get("x-bsv-auth-requested-certificates")){const e=await n.json();throw new Error(`HTTP ${n.status} - ${JSON.stringify(e)}`)}const s=await n.arrayBuffer(),a=new Ue;null!=n.headers.get("x-bsv-auth-request-id")&&a.write(Oe(n.headers.get("x-bsv-auth-request-id"),"base64")),a.writeVarIntNum(n.status);const o=[];n.headers.forEach(((e,t)=>{const r=t.toLowerCase();!r.startsWith("x-bsv-")&&"authorization"!==r||r.startsWith("x-bsv-auth")||o.push([r,e])})),o.sort((([e],[t])=>e.localeCompare(t))),a.writeVarIntNum(o.length);for(let e=0;e<o.length;e++){const t=Oe(o[e][0],"utf8");a.writeVarIntNum(t.length),a.write(t);const r=Oe(o[e][1],"utf8");a.writeVarIntNum(r.length),a.write(r)}if(s){const e=Array.from(new Uint8Array(s));a.writeVarIntNum(e.length),a.write(e)}else a.writeVarIntNum(-1);const c={version:n.headers.get("x-bsv-auth-version"),messageType:"certificateRequest"===n.headers.get("x-bsv-auth-message-type")?"certificateRequest":"general",identityKey:n.headers.get("x-bsv-auth-identity-key"),nonce:n.headers.get("x-bsv-auth-nonce"),yourNonce:n.headers.get("x-bsv-auth-your-nonce"),requestedCertificates:JSON.parse(n.headers.get("x-bsv-auth-requested-certificates")),payload:a.toArray(),signature:Oe(n.headers.get("x-bsv-auth-signature"),"hex")};if(!c.version)throw new Error("HTTP server failed to authenticate");this.onDataCallback(c)}}async onData(e){this.onDataCallback=t=>{e(t)}}deserializeRequestPayload(e){const t=new Ke(e),r=Fe(t.read(32)),i=t.readVarIntNum();let n="GET";i>0&&(n=xe(t.read(i)));const s=t.readVarIntNum();let a="";s>0&&(a=xe(t.read(s)));const o=t.readVarIntNum();let c="";o>0&&(c=xe(t.read(o)));const h={},d=t.readVarIntNum();if(d>0)for(let e=0;e<d;e++){const e=t.readVarIntNum(),r=t.read(e),i=xe(r),n=t.readVarIntNum(),s=t.read(n),a=xe(s);h[i]=a}let u;const l=t.readVarIntNum();return l>0&&(u=t.read(l)),{urlPostfix:a+c,method:n,headers:h,body:u,requestId:r}}}class Ni{sessionManager;wallet;callbacks={};certificatesReceived=[];requestedCertificates;peers={};constructor(e,t,r){this.wallet=e,this.requestedCertificates=t,this.sessionManager=r||new gi}async fetch(e,t={}){if("number"==typeof t.retryCounter){if(t.retryCounter<=0)throw new Error("Request failed after maximum number of retries.");t.retryCounter--}const r=await new Promise((async(r,i)=>{try{const{method:n="GET",headers:s={},body:a}=t,o=new URL(e),c=o.origin;let h;if(void 0===this.peers[c]){const e=new Pi(c);h={peer:new Si(this.wallet,e,this.requestedCertificates,this.sessionManager),pendingCertificateRequests:[]},this.peers[c]=h,this.peers[c].peer.listenForCertificatesReceived(((e,t)=>{this.certificatesReceived.push(...t)})),this.peers[c].peer.listenForCertificatesRequested((async(e,t)=>{try{this.peers[c].pendingCertificateRequests.push(!0);const r=await vi(this.wallet,t,e);await this.peers[c].peer.sendCertificateResponse(e,r)}finally{await new Promise((e=>setTimeout(e,500))),this.peers[c].pendingCertificateRequests.shift()}}))}else{if(!1===this.peers[c].supportsMutualAuth){try{const i=await this.handleFetchAndValidate(e,t,this.peers[c]);r(i)}catch(e){i(e)}return}h=this.peers[c]}const d=ut(32),u=Fe(d),l=await this.serializeRequest(n,s,a,o,d);this.callbacks[u]={resolve:r,reject:i};const f=h.peer.listenForGeneralMessages(((e,t)=>{const r=new Ke(t);if(Fe(r.read(32))!==u)return;h.peer.stopListeningForGeneralMessages(f),this.peers[c].identityKey=e,this.peers[c].supportsMutualAuth=!0;const i=r.readVarIntNum(),n={},s=r.readVarIntNum();if(s>0)for(let e=0;e<s;e++){const e=r.readVarIntNum(),t=r.read(e),i=xe(t),s=r.readVarIntNum(),a=r.read(s),o=xe(a);n[i]=o}let a;n["x-bsv-auth-identity-key"]=e;const o=r.readVarIntNum();o>0&&(a=r.read(o));const d=new Response(a?new Uint8Array(a):null,{status:i,statusText:`${i}`,headers:new Headers(n)});this.callbacks[u].resolve(d),delete this.callbacks[u]}));h.pendingCertificateRequests.length>0&&await new Promise((e=>{setInterval((()=>{0===h.pendingCertificateRequests.length&&e()}),100)})),await h.peer.toPeer(l.toArray(),h.identityKey).catch((async n=>{if(n.message.includes("Session not found for nonce")){delete this.peers[c],t.retryCounter??=3;const i=await this.fetch(e,t);r(i)}else if(n.message.includes("HTTP server failed to authenticate"))try{const i=await this.handleFetchAndValidate(e,t,h);return void r(i)}catch(e){i(e)}else i(n)}))}catch(e){i(e)}}));return 402===r.status?await this.handlePaymentAndRetry(e,t,r):r}async sendCertificateRequest(e,t){const r=new URL(e).origin;let i;if(void 0!==this.peers[r])i={peer:this.peers[r].peer};else{const e=new Pi(r);i={peer:new Si(this.wallet,e,this.requestedCertificates,this.sessionManager)},this.peers[r]=i}return await new Promise((async(e,r)=>{const n=i.peer.listenForCertificatesReceived(((t,r)=>{i.peer.stopListeningForCertificatesReceived(n),this.certificatesReceived.push(...r),e(r)}));try{await i.peer.requestCertificates(t,i.identityKey)}catch(e){i.peer.stopListeningForCertificatesReceived(n),r(e)}}))}consumeReceivedCertificates(){return this.certificatesReceived.splice(0)}async serializeRequest(e,t,r,i,n){const s=new Ue;if(s.write(n),s.writeVarIntNum(e.length),s.write(Oe(e)),i.pathname.length>0){const e=Oe(i.pathname);s.writeVarIntNum(e.length),s.write(e)}else s.writeVarIntNum(-1);if(i.search.length>0){const e=Oe(i.search);s.writeVarIntNum(e.length),s.write(e)}else s.writeVarIntNum(-1);const a=[];for(let[e,r]of Object.entries(t))if(e=e.toLowerCase(),e.startsWith("x-bsv-")||"authorization"===e){if(e.startsWith("x-bsv-auth"))throw new Error("No BSV auth headers allowed here!");a.push([e,r])}else{if(!e.startsWith("content-type"))throw new Error("Unsupported header in the simplified fetch implementation. Only content-type, authorization, and x-bsv-* headers are supported.");r=r.split(";")[0].trim(),a.push([e,r])}a.sort((([e],[t])=>e.localeCompare(t))),s.writeVarIntNum(a.length);for(let e=0;e<a.length;e++){const t=Oe(a[e][0],"utf8");s.writeVarIntNum(t.length),s.write(t);const r=Oe(a[e][1],"utf8");s.writeVarIntNum(r.length),s.write(r)}if(["POST","PUT","PATCH","DELETE"].includes(e.toUpperCase())&&void 0===r){const e=a.find((([e])=>"content-type"===e));r=e&&e[1].includes("application/json")?"{}":""}if(r){const e=await this.normalizeBodyToNumberArray(r);s.writeVarIntNum(e.length),s.write(e)}else s.writeVarIntNum(-1);return s}async handleFetchAndValidate(e,t,r){const i=await fetch(e,t);if(i.headers.forEach((e=>{if(e.toLocaleLowerCase().startsWith("x-bsv"))throw new Error("The server is trying to claim it has been authenticated when it has not!")})),i.ok)return r.supportsMutualAuth=!1,i;throw new Error(`Request failed with status: ${i.status}`)}async handlePaymentAndRetry(e,t={},r){const i=r.headers.get("x-bsv-payment-version");if(!i||"1.0"!==i)throw new Error(`Unsupported x-bsv-payment-version response header. Client version: 1.0, Server version: ${i}`);const n=r.headers.get("x-bsv-payment-satoshis-required");if(!n)throw new Error("Missing x-bsv-payment-satoshis-required response header.");const s=parseInt(n);if(isNaN(s)||s<=0)throw new Error("Invalid x-bsv-payment-satoshis-required response header value.");const a=r.headers.get("x-bsv-auth-identity-key");if(!a)throw new Error("Missing x-bsv-auth-identity-key response header.");const o=r.headers.get("x-bsv-payment-derivation-prefix");if("string"!=typeof o||o.length<1)throw new Error("Missing x-bsv-payment-derivation-prefix response header.");const c=await yi(this.wallet),{publicKey:h}=await this.wallet.getPublicKey({protocolID:[2,"3241645161d8"],keyID:`${o} ${c}`,counterparty:a}),d=(new Zt).lock(ct.fromString(h).toAddress()).toHex(),{tx:u}=await this.wallet.createAction({description:`Payment for request to ${new URL(e).origin}`,outputs:[{satoshis:s,lockingScript:d,customInstructions:JSON.stringify({derivationPrefix:o,derivationSuffix:c,payee:a}),outputDescription:"HTTP request payment"}],options:{randomizeOutputs:!1}});return t.headers=t.headers||{},t.headers["x-bsv-payment"]=JSON.stringify({derivationPrefix:o,derivationSuffix:c,transaction:Fe(u)}),t.retryCounter??=3,this.fetch(e,t)}async normalizeBodyToNumberArray(e){if(null==e)return[];if("object"==typeof e)return Oe(JSON.stringify(e,"utf8"));if(Array.isArray(e)&&e.every((e=>"number"==typeof e)))return e;if("string"==typeof e)return Oe(e,"utf8");if(e instanceof ArrayBuffer||ArrayBuffer.isView(e)){const t=e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer);return Array.from(t)}if(e instanceof Blob){const t=await e.arrayBuffer();return Array.from(new Uint8Array(t))}if(e instanceof FormData){const t=[];e.forEach(((e,r)=>{t.push([r,e.toString()])}));const r=new URLSearchParams(t).toString();return Oe(r,"utf8")}if(e instanceof URLSearchParams)return Oe(e.toString(),"utf8");if(e instanceof ReadableStream)throw new Error("ReadableStream cannot be directly converted to number[].");throw new Error("Unsupported body type in this SimplifiedFetch implementation.")}}class Oi{pushDrop;static decode(e){const t=er.decode(e);if(t.fields.length<4)throw new Error("Invalid SHIP/SLAP advertisement!");const r=xe(t.fields[0]);if("SHIP"!==r&&"SLAP"!==r)throw new Error("Invalid protocol type!");return{protocol:r,identityKey:Ne(t.fields[1]),domain:xe(t.fields[2]),topicOrService:xe(t.fields[3])}}constructor(e){this.pushDrop=new er(e)}async lock(e,t,r){const{publicKey:i}=await this.pushDrop.wallet.getPublicKey({identityKey:!0});return await this.pushDrop.lock([Oe(e,"utf8"),Oe(i,"hex"),Oe(t,"utf8"),Oe(r,"utf8")],[2,"SHIP"===e?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}unlock(e){return this.pushDrop.unlock([2,"SHIP"===e?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}}const _i=["https://overlay-us-1.bsvb.tech","https://overlay-eu-1.bsvb.tech","https://overlay-ap-1.bsvb.tech","https://users.bapp.dev"],Ai=["https://testnet-users.bapp.dev"];class xi{fetchClient;allowHTTP;constructor(e=fetch,t=!1){this.fetchClient=e,this.allowHTTP=t}async lookup(e,t,r=5e3){if(!e.startsWith("https:")&&!this.allowHTTP)throw new Error('HTTPS facilitator can only use URLs that start with "https:"');const i=new Promise(((e,t)=>setTimeout((()=>t(new Error("Request timed out"))),r))),n=fetch(`${e}/lookup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({service:t.service,query:t.query})}),s=await Promise.race([n,i]);if(s.ok)return await s.json();throw new Error("Failed to facilitate lookup")}}class Ti{facilitator;slapTrackers;hostOverrides;additionalHosts;networkPreset;constructor(e={}){this.networkPreset=e.networkPreset??"mainnet",this.facilitator=e.facilitator??new xi(void 0,"local"===this.networkPreset),this.slapTrackers=e.slapTrackers??("mainnet"===this.networkPreset?_i:Ai),this.hostOverrides=e.hostOverrides??{},this.additionalHosts=e.additionalHosts??{}}async query(e,t){let r=[];if(r="ls_slap"===e.service?"local"===this.networkPreset?["http://localhost:8080"]:this.slapTrackers:null!=this.hostOverrides[e.service]?this.hostOverrides[e.service]:"local"===this.networkPreset?["http://localhost:8080"]:await this.findCompetentHosts(e.service),this.additionalHosts[e.service]?.length>0&&(r=[...r,...this.additionalHosts[e.service]]),r.length<1)throw new Error(`No competent ${this.networkPreset} hosts found by the SLAP trackers for lookup service: ${e.service}`);const i=(await Promise.allSettled(r.map((async r=>await this.facilitator.lookup(r,e,t))))).filter((e=>"fulfilled"===e.status)).map((e=>e.value));if(0===i.length)throw new Error("No successful responses from any hosts");const n=new Map;for(const e of i)if("output-list"===e.type)try{for(const t of e.outputs)try{const e=`${mr.fromBEEF(t.beef).id("hex")}.${t.outputIndex}`;n.set(e,t)}catch{continue}}catch(e){}return{type:"output-list",outputs:Array.from(n.values())}}async findCompetentHosts(e){const t={service:"ls_slap",query:{service:e}},r=await Promise.allSettled(this.slapTrackers.map((async e=>await this.facilitator.lookup(e,t,5e3)))),i=new Set;for(const t of r)if("fulfilled"===t.status){const r=t.value;if("output-list"!==r.type)continue;for(const t of r.outputs)try{const r=mr.fromBEEF(t.beef).outputs[t.outputIndex].lockingScript,n=Oi.decode(r);if(n.topicOrService!==e||"SLAP"!==n.protocol)continue;i.add(n.domain)}catch{continue}}return[...i]}}class Fi{httpClient;allowHTTP;constructor(e=fetch,t=!1){this.httpClient=e,this.allowHTTP=t}async send(e,t){if(!e.startsWith("https:")&&!this.allowHTTP)throw new Error('HTTPS facilitator can only use URLs that start with "https:"');const r={"Content-Type":"application/octet-stream","X-Topics":JSON.stringify(t.topics)};let i;if(Array.isArray(t.offChainValues)){r["x-includes-off-chain-values"]="true";const e=new Ue;e.writeVarIntNum(t.beef.length),e.write(t.beef),e.write(t.offChainValues),i=new Uint8Array(e.toArray())}else i=new Uint8Array(t.beef);const n=await fetch(`${e}/submit`,{method:"POST",headers:r,body:i});if(n.ok)return await n.json();throw new Error("Failed to facilitate broadcast")}}class Ri{topics;facilitator;resolver;requireAcknowledgmentFromAllHostsForTopics;requireAcknowledgmentFromAnyHostForTopics;requireAcknowledgmentFromSpecificHostsForTopics;networkPreset;constructor(e,t={}){if(0===e.length)throw new Error("At least one topic is required for broadcast.");if(e.some((e=>!e.startsWith("tm_"))))throw new Error('Every topic must start with "tm_".');this.topics=e,this.networkPreset=t.networkPreset??"mainnet",this.facilitator=t.facilitator??new Fi(void 0,"local"===this.networkPreset),this.resolver=t.resolver??new Ti({networkPreset:this.networkPreset}),this.requireAcknowledgmentFromAllHostsForTopics=t.requireAcknowledgmentFromAllHostsForTopics??[],this.requireAcknowledgmentFromAnyHostForTopics=t.requireAcknowledgmentFromAnyHostForTopics??"all",this.requireAcknowledgmentFromSpecificHostsForTopics=t.requireAcknowledgmentFromSpecificHostsForTopics??{}}async broadcast(e){let t;const r=e.metadata.get("OffChainValues");try{t=e.toBEEF()}catch(e){throw new Error("Transactions sent via SHIP to Overlay Services must be serializable to BEEF format.")}const i=await this.findInterestedHosts();if(0===Object.keys(i).length)return{status:"error",code:"ERR_NO_HOSTS_INTERESTED",description:`No ${this.networkPreset} hosts are interested in receiving this transaction.`};const n=Object.entries(i).map((async([e,i])=>{try{const n=await this.facilitator.send(e,{beef:t,offChainValues:r,topics:[...i]});if(null==n||0===Object.keys(n).length)throw new Error("Steak has no topics.");return{host:e,success:!0,steak:n}}catch(t){return console.error(t),{host:e,success:!1,error:t}}})),s=(await Promise.all(n)).filter((e=>e.success));if(0===s.length)return{status:"error",code:"ERR_ALL_HOSTS_REJECTED",description:`All ${this.networkPreset} topical hosts have rejected the transaction.`};const a={};for(const e of s){const t=e.host,r=e.steak,i=new Set;for(const[e,t]of Object.entries(r)){const r=t.outputsToAdmit,n=t.coinsToRetain,s=t.coinsRemoved;(r?.length>0||n?.length>0||s?.length>0)&&i.add(e)}a[t]=i}let o,c,h,d;return"all"===this.requireAcknowledgmentFromAllHostsForTopics?(o=this.topics,c="all"):"any"===this.requireAcknowledgmentFromAllHostsForTopics?(o=this.topics,c="any"):Array.isArray(this.requireAcknowledgmentFromAllHostsForTopics)?(o=this.requireAcknowledgmentFromAllHostsForTopics,c="all"):(o=this.topics,c="all"),o.length>0&&!this.checkAcknowledgmentFromAllHosts(a,o,c)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ALL_HOSTS_FAILED",description:"Not all hosts acknowledged the required topics."}:("all"===this.requireAcknowledgmentFromAnyHostForTopics?(h=this.topics,d="all"):"any"===this.requireAcknowledgmentFromAnyHostForTopics?(h=this.topics,d="any"):Array.isArray(this.requireAcknowledgmentFromAnyHostForTopics)?(h=this.requireAcknowledgmentFromAnyHostForTopics,d="all"):(h=[],d="all"),h.length>0&&!this.checkAcknowledgmentFromAnyHost(a,h,d)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ANY_HOST_FAILED",description:"No host acknowledged the required topics."}:Object.keys(this.requireAcknowledgmentFromSpecificHostsForTopics).length>0&&!this.checkAcknowledgmentFromSpecificHosts(a,this.requireAcknowledgmentFromSpecificHostsForTopics)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_SPECIFIC_HOSTS_FAILED",description:"Specific hosts did not acknowledge the required topics."}:{status:"success",txid:e.id("hex"),message:`Sent to ${s.length} Overlay Services ${1===s.length?"host":"hosts"}.`})}checkAcknowledgmentFromAllHosts(e,t,r){for(const i of Object.values(e))if("all"===r){for(const e of t)if(!i.has(e))return!1}else if("any"===r){let e=!1;for(const r of t)if(i.has(r)){e=!0;break}if(!e)return!1}return!0}checkAcknowledgmentFromAnyHost(e,t,r){if("all"===r){for(const r of Object.values(e)){let e=!0;for(const i of t)if(!r.has(i)){e=!1;break}if(e)return!0}return!1}for(const r of Object.values(e))for(const e of t)if(r.has(e))return!0;return!1}checkAcknowledgmentFromSpecificHosts(e,t){for(const[r,i]of Object.entries(t)){const t=e[r];if(null==t)return!1;let n,s;if("all"===i||"any"===i)s=i,n=this.topics;else{if(!Array.isArray(i))continue;n=i,s="all"}if("all"===s){for(const e of n)if(!t.has(e))return!1}else if("any"===s){let e=!1;for(const r of n)if(t.has(r)){e=!0;break}if(!e)return!1}}return!0}async findInterestedHosts(){if("local"===this.networkPreset){const e=new Set;for(let t=0;t<this.topics.length;t++)e.add(this.topics[t]);return{"http://localhost:8080":e}}const e={},t=await this.resolver.query({service:"ls_ship",query:{topics:this.topics}},5e3);if("output-list"!==t.type)throw new Error("SHIP answer is not an output list.");for(const r of t.outputs)try{const t=mr.fromBEEF(r.beef).outputs[r.outputIndex].lockingScript,i=Oi.decode(t);if(!this.topics.includes(i.topicOrService)||"SHIP"!==i.protocol)continue;void 0===e[i.domain]&&(e[i.domain]=new Set),e[i.domain].add(i.topicOrService)}catch(e){continue}return e}}const Ci=e=>(e.toLowerCase().startsWith("uhrp:")&&(e=e.slice(5)),e.startsWith("//")&&(e=e.slice(2)),e),Vi=e=>{if(32!==e.length)throw new Error("Hash length must be 32 bytes (sha256)");return De(e,Oe("ce00","hex"))},Di=e=>{const t=me(e);return Vi(t)},Bi=e=>{e=Ci(e);const{data:t,prefix:r}=Be(e,void 0,2);if(32!==t.length)throw new Error("Invalid length!");if("ce00"!==Ne(r))throw new Error("Bad prefix");return t},Ui=e=>{try{return Bi(e),!0}catch(e){return!1}};class Ki{authFetch;baseURL;constructor(e){this.baseURL=e.storageURL,this.authFetch=new Ni(e.wallet)}async getUploadInfo(e,t){const r=`${this.baseURL}/upload`,i={fileSize:e,retentionPeriod:t},n=await this.authFetch.fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok)throw new Error(`Upload info request failed: HTTP ${n.status}`);const s=await n.json();if("error"===s.status)throw new Error("Upload route returned an error.");return{uploadURL:s.uploadURL,requiredHeaders:s.requiredHeaders,amount:s.amount}}async uploadFile(e,t,r){const i=Uint8Array.from(t.data),n=await fetch(e,{method:"PUT",body:i,headers:{"Content-Type":t.type,...r}});if(!n.ok)throw new Error(`File upload failed: HTTP ${n.status}`);return{published:!0,uhrpURL:await Di(t.data)}}async publishFile(e){const{file:t,retentionPeriod:r}=e,i=t.data.length,{uploadURL:n,requiredHeaders:s}=await this.getUploadInfo(i,r);return await this.uploadFile(n,t,s)}async findFile(e){const t=new URL(`${this.baseURL}/find`);t.searchParams.set("uhrpUrl",e);const r=await this.authFetch.fetch(t.toString(),{method:"GET"});if(!r.ok)throw new Error(`findFile request failed: HTTP ${r.status}`);const i=await r.json();if("error"===i.status){const e=i.code??"unknown-code",t=i.description??"no-description";throw new Error(`findFile returned an error: ${e} - ${t}`)}return i.data}async listUploads(){const e=`${this.baseURL}/list`,t=await this.authFetch.fetch(e,{method:"GET"});if(!t.ok)throw new Error(`listUploads request failed: HTTP ${t.status}`);const r=await t.json();if("error"===r.status){const e=r.code??"unknown-code",t=r.description??"no-description";throw new Error(`listUploads returned an error: ${e} - ${t}`)}return r.uploads}async renewFile(e,t){const r=`${this.baseURL}/renew`,i={uhrpUrl:e,additionalMinutes:t},n=await this.authFetch.fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok)throw new Error(`renewFile request failed: HTTP ${n.status}`);const s=await n.json();if("error"===s.status){const e=s.code??"unknown-code",t=s.description??"no-description";throw new Error(`renewFile returned an error: ${e} - ${t}`)}return{status:s.status,prevExpiryTime:s.prevExpiryTime,newExpiryTime:s.newExpiryTime,amount:s.amount}}}class Li{networkPreset="mainnet";constructor(e){this.networkPreset=e?.networkPreset}async resolve(e){const t=new Ti({networkPreset:this.networkPreset}),r=await t.query({service:"ls_uhrp",query:{uhrpUrl:e}});if("output-list"!==r.type)throw new Error("Lookup answer must be an output list");const i=[],n=Math.floor(Date.now()/1e3);for(let e=0;e<r.outputs.length;e++){const t=mr.fromBEEF(r.outputs[e].beef),{fields:s}=er.decode(t.outputs[r.outputs[e].outputIndex].lockingScript);new Ke(s[3]).readVarIntNum()<n||i.push(xe(s[2]))}return i}async download(e){if(!Ui(e))throw new Error("Invalid parameter UHRP url");const t=Bi(e),r=await this.resolve(e);if(!Array.isArray(r)||0===r.length)throw new Error("No one currently hosts this file!");for(let e=0;e<r.length;e++)try{const i=await fetch(r[e],{method:"GET"});if(!i.ok||i.status>=400)continue;const n=await i.arrayBuffer(),s=[...new Uint8Array(n)],a=me(s);for(let e=0;e<a.length;++e)if(a[e]!==t[e])throw new Error("Value of content does not match hash of the url given");return{data:s,mimeType:i.headers.get("Content-Type")}}catch(e){continue}throw new Error(`Unable to download content from ${e}`)}}const Hi={name:"Unknown Identity",avatarURL:"XUUB8bbn9fEthk15Ge3zTQXypUShfC94vFjp65v7u5CQ8qkpxzst",identityKey:"",abbreviatedKey:"",badgeIconURL:"XUUV39HVPkpmMzYNTx7rpKzJvXfeiVyQWg2vfSpjBAuhunTCA9uG",badgeLabel:"Not verified by anyone you trust.",badgeClickURL:"https://projectbabbage.com/docs/unknown-identity"},qi={protocolID:[1,"identity"],keyID:"1",tokenAmount:1,outputIndex:0},Mi={identiCert:"z40BOInXkI8m7f/wBrv4MJ09bZfzZbTj2fJqCtONqCY=",discordCert:"2TgqRC35B1zehGmB21xveZNc7i5iqHc0uxMb+1NMPW4=",phoneCert:"mffUklUzxbHr65xLohn0hRL0Tq2GjW1GYF/OPfzqJ6A=",xCert:"vdDWvftf1H+5+ZprUw123kjHlywH+v20aPQTuXgMpNc=",registrant:"YoPsbfR6YQczjzPdHCoGC7nJsOdPQR50+SYqcWpJ0y0=",emailCert:"exOl3KM0dIJ04EW5pZgbZmPag6MdJXd3/a1enmUU/BA=",anyone:"mfkOMfLDQmrr3SBxBQ5WeE+6Hy3VJRFq6w4A5Ljtlis=",self:"Hkge6X5JRxt1cWXtHLCrSTg6dCVTxjQJJ48iOYd7n3g=",coolCert:"AGfk/WrT1eBDXpz3mcw386Zww2HmqcIn3uY6x4Af1eo="};class $i{options;originator;authClient;wallet;constructor(e,t=qi,r){this.options=t,this.originator=r,this.wallet=e??new li,this.authClient=new Ni(this.wallet)}async publiclyRevealAttributes(e,t){if(0===Object.keys(e.fields).length)throw new Error("Public reveal failed: Certificate has no fields to reveal!");if(0===t.length)throw new Error("Public reveal failed: You must reveal at least one field!");try{const t=new ii(e.type,e.serialNumber,e.subject,e.certifier,e.revocationOutpoint,e.fields,e.signature);await t.verify()}catch(e){throw new Error("Public reveal failed: Certificate verification failed!")}const{keyringForVerifier:r}=await this.wallet.proveCertificate({certificate:e,fieldsToReveal:t,verifier:new bt(1).toPublicKey().toString()}),i=await new er(this.wallet).lock([Oe(JSON.stringify({...e,keyring:r}))],this.options.protocolID,this.options.keyID,"anyone",!0,!0),{tx:n}=await this.wallet.createAction({description:"Create a new Identity Token",outputs:[{satoshis:this.options.tokenAmount,lockingScript:i.toHex(),outputDescription:"Identity Token"}],options:{randomizeOutputs:!1}});if(void 0!==n){const e=new Ri(["tm_identity"],{networkPreset:(await this.wallet.getNetwork({})).network});return await e.broadcast(mr.fromAtomicBEEF(n))}throw new Error("Public reveal failed: failed to create action!")}async resolveByIdentityKey(e){const{certificates:t}=await this.wallet.discoverByIdentityKey(e,this.originator);return t.map((e=>$i.parseIdentity(e)))}async resolveByAttributes(e){const{certificates:t}=await this.wallet.discoverByAttributes(e,this.originator);return t.map((e=>$i.parseIdentity(e)))}static parseIdentity(e){const{type:t,decryptedFields:r,certifierInfo:i}=e;let n,s,a,o,c;switch(t){case Mi.xCert:n=r.userName,s=r.profilePhoto,a=`X account certified by ${i.name}`,o=i.iconUrl,c="https://socialcert.net";break;case Mi.discordCert:n=r.userName,s=r.profilePhoto,a=`Discord account certified by ${i.name}`,o=i.iconUrl,c="https://socialcert.net";break;case Mi.emailCert:n=r.email,s="XUTZxep7BBghAJbSBwTjNfmcsDdRFs5EaGEgkESGSgjJVYgMEizu",a=`Email certified by ${i.name}`,o=i.iconUrl,c="https://socialcert.net";break;case Mi.phoneCert:n=r.phoneNumber,s="XUTLxtX3ELNUwRhLwL7kWNGbdnFM8WG2eSLv84J7654oH8HaJWrU",a=`Phone certified by ${i.name}`,o=i.iconUrl,c="https://socialcert.net";break;case Mi.identiCert:n=`${r.firstName} ${r.lastName}`,s=r.profilePhoto,a=`Government ID certified by ${i.name}`,o=i.iconUrl,c="https://identicert.me";break;case Mi.registrant:n=r.name,s=r.icon,a=`Entity certified by ${i.name}`,o=i.iconUrl,c="https://projectbabbage.com/docs/registrant";break;case Mi.coolCert:n="true"===r.cool?"Cool Person!":"Not cool!";break;case Mi.anyone:n="Anyone",s="XUT4bpQ6cpBaXi1oMzZsXfpkWGbtp2JTUYAoN7PzhStFJ6wLfoeR",a="Represents the ability for anyone to access this information.",o="XUUV39HVPkpmMzYNTx7rpKzJvXfeiVyQWg2vfSpjBAuhunTCA9uG",c="https://projectbabbage.com/docs/anyone-identity";break;case Mi.self:n="You",s="XUT9jHGk2qace148jeCX5rDsMftkSGYKmigLwU2PLLBc7Hm63VYR",a="Represents your ability to access this information.",o="XUUV39HVPkpmMzYNTx7rpKzJvXfeiVyQWg2vfSpjBAuhunTCA9uG",c="https://projectbabbage.com/docs/self-identity";break;default:n=Hi.name,s=r.profilePhoto,a=Hi.badgeLabel,o=Hi.badgeIconURL,c=Hi.badgeClickURL}return{name:n,avatarURL:s,abbreviatedKey:e.subject.length>0?`${e.subject.substring(0,10)}...`:"",identityKey:e.subject,badgeIconURL:o,badgeLabel:a,badgeClickURL:c}}}class zi{wallet;network;constructor(e=new li){this.wallet=e}async registerDefinition(e){const t=(await this.wallet.getPublicKey({identityKey:!0})).publicKey,r=new er(this.wallet),i=this.buildPushDropFields(e,t),n=this.mapDefinitionTypeToWalletProtocol(e.definitionType),s=await r.lock(i,n,"1","anyone",!0),{tx:a}=await this.wallet.createAction({description:`Register a new ${e.definitionType} item`,outputs:[{satoshis:1,lockingScript:s.toHex(),outputDescription:`New ${e.definitionType} registration token`,basket:this.mapDefinitionTypeToBasketName(e.definitionType)}],options:{randomizeOutputs:!1}});if(void 0===a)throw new Error(`Failed to create ${e.definitionType} registration transaction!`);const o=new Ri([this.mapDefinitionTypeToTopic(e.definitionType)],{networkPreset:this.network??=(await this.wallet.getNetwork({})).network});return await o.broadcast(mr.fromAtomicBEEF(a))}async resolve(e,t){const r=new Ti,i=this.mapDefinitionTypeToServiceName(e),n=await r.query({service:i,query:t});if("output-list"!==n.type)return[];const s=[];for(const t of n.outputs)try{const r=mr.fromBEEF(t.beef).outputs[t.outputIndex].lockingScript,i=await this.parseLockingScript(e,r);s.push(i)}catch{}return s}async listOwnRegistryEntries(e){const t=this.mapDefinitionTypeToBasketName(e),{outputs:r,BEEF:i}=await this.wallet.listOutputs({basket:t,include:"entire transactions"}),n=[];for(const t of r)if(t.spendable)try{const[r,s]=t.outpoint.split("."),a=mr.fromBEEF(i).outputs[s].lockingScript,o=await this.parseLockingScript(e,a);n.push({...o,txid:r,outputIndex:Number(s),satoshis:t.satoshis,lockingScript:a.toHex(),beef:i})}catch{}return n}async revokeOwnRegistryEntry(e){if(void 0===e.txid||void 0===e.outputIndex||void 0===e.lockingScript)throw new Error("Invalid registry record. Missing txid, outputIndex, or lockingScript.");const t=(await this.wallet.getPublicKey({identityKey:!0})).publicKey;if(e.registryOperator!==t)throw new Error("This registry token does not belong to the current wallet.");const r="basket"===e.definitionType?e.basketID:"protocol"===e.definitionType?e.name:"certificate"===e.definitionType?void 0!==e.name?e.name:e.type:"unknown",i=`${e.txid}.${e.outputIndex}`,{signableTransaction:n}=await this.wallet.createAction({description:`Revoke ${e.definitionType} item: ${r}`,inputBEEF:e.beef,inputs:[{outpoint:i,unlockingScriptLength:73,inputDescription:`Revoking ${e.definitionType} token`}]});if(void 0===n)throw new Error("Failed to create signable transaction.");const s=mr.fromBEEF(n.tx),a=new er(this.wallet),o=await a.unlock(this.mapDefinitionTypeToWalletProtocol(e.definitionType),"1","anyone","all",!1,e.satoshis,qt.fromHex(e.lockingScript)),c=await o.sign(s,e.outputIndex),{tx:h}=await this.wallet.signAction({reference:n.reference,spends:{[e.outputIndex]:{unlockingScript:c.toHex()}},options:{acceptDelayedBroadcast:!1}});if(void 0===h)throw new Error("Failed to finalize the transaction signature.");const d=new Ri([this.mapDefinitionTypeToTopic(e.definitionType)],{networkPreset:this.network??=(await this.wallet.getNetwork({})).network});return await d.broadcast(mr.fromAtomicBEEF(h))}buildPushDropFields(e,t){let r;switch(e.definitionType){case"basket":r=[e.basketID,e.name,e.iconURL,e.description,e.documentationURL];break;case"protocol":r=[JSON.stringify(e.protocolID),e.name,e.iconURL,e.description,e.documentationURL];break;case"certificate":r=[e.type,e.name,e.iconURL,e.description,e.documentationURL,JSON.stringify(e.fields)];break;default:throw new Error("Unsupported definition type")}return r.push(t),r.map((e=>Oe(e)))}async parseLockingScript(e,t){const r=er.decode(t);if(0===r.fields.length)throw new Error("Not a valid registry pushdrop script.");let i,n;switch(e){case"basket":{if(7!==r.fields.length)throw new Error("Unexpected field count for basket type.");const[e,t,s,a,o,c]=r.fields;i=xe(c),n={definitionType:"basket",basketID:xe(e),name:xe(t),iconURL:xe(s),description:xe(a),documentationURL:xe(o)};break}case"protocol":{if(7!==r.fields.length)throw new Error("Unexpected field count for protocol type.");const[e,t,s,a,o,c]=r.fields;i=xe(c),n={definitionType:"protocol",protocolID:Wi(xe(e)),name:xe(t),iconURL:xe(s),description:xe(a),documentationURL:xe(o)};break}case"certificate":{if(8!==r.fields.length)throw new Error("Unexpected field count for certificate type.");const[e,t,s,a,o,c,h]=r.fields;i=xe(h);let d={};try{d=JSON.parse(xe(c))}catch{}n={definitionType:"certificate",type:xe(e),name:xe(t),iconURL:xe(s),description:xe(a),documentationURL:xe(o),fields:d};break}default:throw new Error(`Unsupported definition type: ${e}`)}return{...n,registryOperator:i}}mapDefinitionTypeToWalletProtocol(e){switch(e){case"basket":return[1,"basketmap"];case"protocol":return[1,"protomap"];case"certificate":return[1,"certmap"];default:throw new Error(`Unknown definition type: ${e}`)}}mapDefinitionTypeToBasketName(e){switch(e){case"basket":return"basketmap";case"protocol":return"protomap";case"certificate":return"certmap";default:throw new Error(`Unknown definition type: ${e}`)}}mapDefinitionTypeToTopic(e){switch(e){case"basket":return"tm_basketmap";case"protocol":return"tm_protomap";case"certificate":return"tm_certmap";default:throw new Error(`Unknown definition type: ${e}`)}}mapDefinitionTypeToServiceName(e){switch(e){case"basket":return"ls_basketmap";case"protocol":return"ls_protomap";case"certificate":return"ls_certmap";default:throw new Error(`Unknown definition type: ${e}`)}}}function Wi(e){const t=JSON.parse(e);if(!Array.isArray(t)||2!==t.length)throw new Error("Invalid wallet protocol format.");const[r,i]=t;if(![0,1,2].includes(r))throw new Error("Invalid security level.");if("string"!=typeof i)throw new Error("Invalid protocolID");return[r,i]}class ji{wallet;context;encrypt;originator;acceptDelayedBroadcast=!1;keyLocks=new Map;constructor(e=new li,t="kvstore default",r=!0,i,n=!1){if("string"!=typeof t||t.length<1)throw new Error("A context in which to operate is required.");this.wallet=e,this.context=t,this.encrypt=r,this.originator=i,this.acceptDelayedBroadcast=n}async queueOperationOnKey(e){let t=this.keyLocks.get(e);null==t&&(t=[],this.keyLocks.set(e,t));let r=()=>{};const i=new Promise((e=>{r=e,null!=t&&t.push(e)}));return 1===t.length&&r(),await i,t}finishOperationOnKey(e,t){t.shift(),t.length>0&&t[0]()}getProtocol(e){return{protocolID:[2,this.context],keyID:e}}async getOutputs(e,t){return await this.wallet.listOutputs({basket:this.context,tags:[e],tagQueryMode:"all",include:"entire transactions",limit:t})}async get(e,t=void 0){const r=await this.queueOperationOnKey(e);try{return(await this.lookupValue(e,t,5)).value}finally{this.finishOperationOnKey(e,r)}}getLockingScript(e,t){const[r,i]=e.outpoint.split("."),n=t.findTxid(r)?.tx;if(null==n)throw new Error(`beef must contain txid ${r}`);return n.outputs[Number(i)].lockingScript}async lookupValue(e,t,r){const i=await this.getOutputs(e,r),n={value:t,outpoint:void 0,lor:i},{outputs:s}=i;if(0===s.length)return n;const a=s.slice(-1)[0];let o;n.outpoint=a.outpoint;try{if(void 0===i.BEEF)throw new Error("entire transactions listOutputs option must return valid BEEF");const e=this.getLockingScript(a,gr.fromBinary(i.BEEF)),t=er.decode(e);if(t.fields.length<1||t.fields.length>2)throw new Error("Invalid token.");o=t.fields[0]}catch(e){throw new Error(`Invalid value found. You need to call set to collapse the corrupted state (or relinquish the corrupted ${s[0].outpoint} output from the ${this.context} basket) before you can get this value again.`)}if(this.encrypt){const{plaintext:t}=await this.wallet.decrypt({...this.getProtocol(e),ciphertext:o});n.value=xe(t)}else n.value=xe(o);return n}getInputs(e){const t=[];for(let r=0;r<e.length;r++)t.push({outpoint:e[r].outpoint,unlockingScriptLength:74,inputDescription:"Previous key-value token"});return t}async getSpends(e,t,r,i){const n=this.getProtocol(e),s=mr.fromAtomicBEEF(i),a={};for(let e=0;e<t.length;e++){const t=r.unlock(n.protocolID,n.keyID,"self"),i=await t.sign(s,e);a[e]={unlockingScript:i.toHex()}}return a}async set(e,t){const r=await this.queueOperationOnKey(e);try{const r=await this.lookupValue(e,void 0,10);if(r.value===t){if(void 0===r.outpoint)throw new Error("outpoint must be valid when value is valid and unchanged");return r.outpoint}const i=this.getProtocol(e);let n=Oe(t,"utf8");if(this.encrypt){const{ciphertext:e}=await this.wallet.encrypt({...i,plaintext:n});n=e}const s=new er(this.wallet,this.originator),a=await s.lock([n],i.protocolID,i.keyID,"self"),{outputs:o,BEEF:c}=r.lor;let h;try{const t=this.getInputs(o),{txid:r,signableTransaction:i}=await this.wallet.createAction({description:`Update ${e} in ${this.context}`,inputBEEF:c,inputs:t,outputs:[{basket:this.context,tags:[e],lockingScript:a.toHex(),satoshis:1,outputDescription:"Key-value token"}],options:{acceptDelayedBroadcast:this.acceptDelayedBroadcast,randomizeOutputs:!1}});if(o.length>0&&"object"!=typeof i)throw new Error("Wallet did not return a signable transaction when expected.");if(null==i)h=`${r}.0`;else{const t=await this.getSpends(e,o,s,i.tx),{txid:r}=await this.wallet.signAction({reference:i.reference,spends:t});h=`${r}.0`}}catch(t){throw new Error(`There are ${o.length} outputs with tag ${e} that cannot be unlocked.`)}return h}finally{this.finishOperationOnKey(e,r)}}async remove(e){const t=await this.queueOperationOnKey(e);try{const t=[];for(;;){const{outputs:r,BEEF:i,totalOutputs:n}=await this.getOutputs(e);if(r.length>0){const s=new er(this.wallet,this.originator);try{const n=this.getInputs(r),{signableTransaction:a}=await this.wallet.createAction({description:`Remove ${e} in ${this.context}`,inputBEEF:i,inputs:n,options:{acceptDelayedBroadcast:this.acceptDelayedBroadcast}});if("object"!=typeof a)throw new Error("Wallet did not return a signable transaction when expected.");const o=await this.getSpends(e,r,s,a.tx),{txid:c}=await this.wallet.signAction({reference:a.reference,spends:o});if(void 0===c)throw new Error("signAction must return a valid txid");t.push(c)}catch(t){throw new Error(`There are ${n} outputs with tag ${e} that cannot be unlocked.`)}}if(r.length===n)break}return t}finally{this.finishOperationOnKey(e,t)}}}return t})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bsv=t():e.bsv=t()}(this,()=>(()=>{"use strict";let e;var t,r,i,a,n={};n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};n.r(s),n.d(s,{Signature:()=>tu,SHIPCast:()=>iw,BEEF_V1:()=>rh,BEEF_V2:()=>ru,BeefParty:()=>ry,Polynomial:()=>tE,SHIPBroadcaster:()=>iw,KNOWN_IDENTITY_TYPES:()=>i_,Utils:()=>c,KeyDeriver:()=>rW,SignedMessage:()=>d,SymmetricKey:()=>tz,LocalKVStore:()=>iV,WhatsOnChain:()=>rs,IdentityClient:()=>iA,ScriptEvaluationError:()=>tQ,defaultHttpClient:()=>rr,defaultIdentity:()=>iN,RPuzzle:()=>t6,WalletClient:()=>r5,verifyNonce:()=>ii,SatoshisPerKilobyte:()=>t9,PrivateKey:()=>tO,walletErrors:()=>i,KeyShares:()=>tN,XDM:()=>rZ,HTTPSOverlayBroadcastFacilitator:()=>iy,Certificate:()=>rQ,HD:()=>rU,CompletedProtoWallet:()=>it,AuthFetch:()=>ih,NodejsHttpClient:()=>re,ProtoWallet:()=>rG,StorageUtils:()=>f,CachedKeyDeriver:()=>rj,ECIES:()=>rq,HTTPWalletWire:()=>r2,PointInFiniteField:()=>tP,ARC:()=>ra,Curve:()=>th,DRBG:()=>tf,ECDSA:()=>l,MasterCertificate:()=>r9,Random:()=>tx,TOTP:()=>r$,VerifiableCertificate:()=>ie,WindowCWISubstrate:()=>rX,defaultChainTracker:()=>ro,DEFAULT_SLAP_TRACKERS:()=>ip,ReactNativeWebView:()=>r4,DEFAULT_IDENTITY_CLIENT_OPTIONS:()=>iO,WalletErrors:()=>rJ,WalletError:()=>rY,StorageUploader:()=>iP,BlockHeadersService:()=>rx,Spend:()=>t2,Hash:()=>o,validateCertificates:()=>io,Schnorr:()=>tj,Script:()=>tY,TX_DATA_FORMAT:()=>t,WalletWireTransceiver:()=>r1,EncryptedMessage:()=>h,TransactionSignature:()=>tW,fromUtxo:()=>rM,Beef:()=>rp,HTTPWalletJSON:()=>r6,OverlayAdminTokenTemplate:()=>iu,SimplifiedFetchTransport:()=>id,TopicBroadcaster:()=>iw,BeefTx:()=>rl,MerklePath:()=>rc,WhatsOnChainBroadcaster:()=>rw,defaultBroadcaster:()=>rn,getVerifiableCertificates:()=>is,LockingScript:()=>tJ,HTTPSOverlayLookupFacilitator:()=>ig,FetchHttpClient:()=>rt,Peer:()=>ic,LookupResolver:()=>im,PublicKey:()=>tv,binaryHttpClient:()=>rk,StorageDownloader:()=>iE,BigNumber:()=>p,SessionManager:()=>ir,SecurityLevels:()=>r,WalletWireProcessor:()=>r7,createNonce:()=>ia,isBroadcastResponse:()=>rg,OP:()=>tX,P2PKH:()=>t3,WERR_REVIEW_ACTIONS:()=>r3,Teranode:()=>rS,UnlockingScript:()=>tZ,deserializeWalletProtocol:()=>iC,RegistryClient:()=>iT,Point:()=>td,BSM:()=>u,Mnemonic:()=>rB,isBroadcastFailure:()=>rm,Transaction:()=>rb,PushDrop:()=>t7,ATOMIC_BEEF:()=>rf,DEFAULT_TESTNET_SLAP_TRACKERS:()=>ib});var o={};n.r(o),n.d(o,{RIPEMD160:()=>U,SHA1:()=>B,SHA1HMAC:()=>K,SHA256:()=>D,SHA256HMAC:()=>H,SHA512:()=>L,SHA512HMAC:()=>F,hash160:()=>j,hash256:()=>W,pbkdf2:()=>eL,ripemd160:()=>q,sha1:()=>M,sha256:()=>$,sha256hmac:()=>G,sha512:()=>z,sha512hmac:()=>X,toArray:()=>S});var c={};n.r(c),n.d(c,{Reader:()=>eQ,Writer:()=>eZ,encode:()=>ez,fromBase58:()=>eG,fromBase58Check:()=>eJ,minimallyEncode:()=>e0,toArray:()=>eF,toBase58:()=>eX,toBase58Check:()=>eY,toBase64:()=>eW,toHex:()=>eK,toUTF8:()=>e$,zero2:()=>eH});var l={};n.r(l),n.d(l,{sign:()=>tw,verify:()=>tI});var d={};n.r(d),n.d(d,{sign:()=>rE,verify:()=>rN});var h={};n.r(h),n.d(h,{decrypt:()=>rA,encrypt:()=>r_});var u={};n.r(u),n.d(u,{magicHash:()=>rC,sign:()=>rV,verify:()=>rR});var f={};n.r(f),n.d(f,{getHashFromURL:()=>iS,getURLForFile:()=>ik,getURLForHash:()=>iv,isValidURL:()=>ix,normalizeURL:()=>iI});class p{static zeros=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"];static groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5];static groupBases=[0,0,0x2000000,0x290d741,0x1000000,0x2e90edd,0x39aa400,0x267bf47,0x1000000,0x290d741,1e7,0x12959c3,0x222c000,0x3bd7765,7529536,0xadcea1,0x1000000,0x1704f61,0x206fc40,0x2cddcf9,64e6,4084101,5153632,6436343,7962624,9765625,0xb54ba0,0xdaf26b,0x1069c00,0x138f9ad,243e5,0x1b4d89f,0x2000000,0x25528a1,0x2b54a20,0x3216b93,0x39aa400];static wordSize=26;static WORD_SIZE_BIGINT=BigInt(p.wordSize);static WORD_MASK=(1n<<p.WORD_SIZE_BIGINT)-1n;static MAX_SAFE_INTEGER_BIGINT=BigInt(Number.MAX_SAFE_INTEGER);static MIN_SAFE_INTEGER_BIGINT=BigInt(Number.MIN_SAFE_INTEGER);static MAX_IMULN_ARG=0x3ffffff;static MAX_NUMBER_CONSTRUCTOR_MAG_BIGINT=(1n<<53n)-1n;_magnitude;_sign;_nominalWordLength;red;get negative(){return this._sign}set negative(e){this.assert(0===e||1===e,"Negative property must be 0 or 1"),0n===this._magnitude?this._sign=0:this._sign=+(1===e)}get _computedWordsArray(){if(0n===this._magnitude)return[0];let e=[],t=this._magnitude;for(;t>0n;)e.push(Number(t&p.WORD_MASK)),t>>=p.WORD_SIZE_BIGINT;return e.length>0?e:[0]}get words(){let e=this._computedWordsArray;if(this._nominalWordLength<=e.length)return e;let t=Array(this._nominalWordLength).fill(0);for(let r=0;r<e.length;r++)t[r]=e[r];return t}set words(e){let t=this._sign,r=0n,i=e.length>0?e.length:1;for(let t=i-1;t>=0;t--){let i=void 0===e[t]?0:e[t];r=r<<p.WORD_SIZE_BIGINT|BigInt(i&Number(p.WORD_MASK))}this._magnitude=r,this._sign=t,this._nominalWordLength=i,this.normSign()}get length(){return Math.max(1,this._nominalWordLength)}static isBN(e){return e instanceof p||null!==e&&"object"==typeof e&&e.constructor?.wordSize===p.wordSize&&Array.isArray(e.words)}static max(e,t){return e.cmp(t)>0?e:t}static min(e,t){return 0>e.cmp(t)?e:t}constructor(e=0,t=10,r="be"){if(this._magnitude=0n,this._sign=0,this._nominalWordLength=1,this.red=null,void 0===e&&(e=0),null===e)return void this._initializeState(0n,0);if("bigint"==typeof e){this._initializeState(e<0n?-e:e,+(e<0n)),this.normSign();return}let i=t,a=r;if(("le"===t||"be"===t)&&(a=t,i=10),"number"==typeof e)return void this.initNumber(e,a);if(Array.isArray(e))return void this.initArray(e,a);if("string"==typeof e){"hex"===i&&(i=16),this.assert("number"==typeof i&&i===(0|i)&&i>=2&&i<=36,"Base must be an integer between 2 and 36");let t=e.toString().replace(/\s+/g,""),r=0,n=0;t.startsWith("-")?(r++,n=1):t.startsWith("+")&&r++;let s=t.substring(r);if(0===s.length){this._initializeState(0n,1===n&&t.startsWith("-")?1:0),this.normSign();return}if(16===i){let e;if("le"===a){let e=[],t=s;t.length%2!=0&&(t="0"+t);for(let r=0;r<t.length;r+=2){let i=parseInt(t.substring(r,r+2),16);if(isNaN(i))throw Error("Invalid character in "+t);e.push(i)}this.initArray(e,"le"),this._sign=n,this.normSign();return}try{e=BigInt("0x"+s)}catch(e){throw Error("Invalid character in "+s)}this._initializeState(e,n),this.normSign()}else try{if(this._parseBaseString(s,i),this._sign=n,this.normSign(),"le"===a){let e=this._sign;this.initArray(this.toArray("be"),"le"),this._sign=e,this.normSign()}}catch(e){if(e.message.includes("Invalid character in string")||e.message.includes("Invalid digit for base")||e.message.startsWith("Invalid character:"))throw Error("Invalid character");throw e}}else 0!==e?this.assert(!1,"Unsupported input type for BigNumber constructor"):this._initializeState(0n,0)}_bigIntToStringInBase(e,t){if(0n===e)return"0";if(t<2||t>36)throw Error("Base must be between 2 and 36");let r="",i=e>0n?e:-e,a=BigInt(t);for(;i>0n;)r="0123456789abcdefghijklmnopqrstuvwxyz"[Number(i%a)]+r,i/=a;return r}_parseBaseString(e,t){if(0===e.length){this._magnitude=0n,this._finishInitialization();return}this._magnitude=0n;let r=BigInt(t),i=p.groupSizes[t],a=BigInt(p.groupBases[t]);(0===i||0n===a)&&(0===(i=Math.floor(Math.log(0x3ffffff)/Math.log(t)))&&(i=1),a=r**BigInt(i));let n=0,s=e.length,o=s%i;if(0===o&&s>0&&(o=i),o>0){let r=e.substring(n,n+o);this._magnitude=BigInt(this._parseBaseWord(r,t)),n+=o}for(;n<s;){let r=e.substring(n,n+i),s=BigInt(this._parseBaseWord(r,t));this._magnitude=this._magnitude*a+s,n+=i}this._finishInitialization()}_parseBaseWord(e,t){let r=0;for(let i=0;i<e.length;i++){let a,n=e.charCodeAt(i);if(n>=48&&n<=57)a=n-48;else if(n>=65&&n<=90)a=n-65+10;else if(n>=97&&n<=122)a=n-97+10;else throw Error("Invalid character: "+e[i]);if(a>=t)throw Error("Invalid character");r=r*t+a}return r}_initializeState(e,t){this._magnitude=e,this._sign=0n===e?0:t,this._finishInitialization()}_finishInitialization(){if(0n===this._magnitude)this._nominalWordLength=1,this._sign=0;else{let e=this._magnitude.toString(2).length;this._nominalWordLength=Math.max(1,Math.ceil(e/p.wordSize))}}assert(e,t="Assertion failed"){if(!e)throw Error(t)}initNumber(e,t="be"){if(this.assert(BigInt(Math.abs(e))<=p.MAX_NUMBER_CONSTRUCTOR_MAG_BIGINT,"The number is larger than 2 ^ 53 (unsafe)"),this.assert(e%1==0,"Number must be an integer for BigNumber conversion"),this._initializeState(BigInt(Math.abs(e)),+(e<0)),"le"===t){let e=this._sign,t=this.toArray("be");this.initArray(t,"le"),this._sign=e,this.normSign()}return this}initArray(e,t){if(0===e.length)return this._initializeState(0n,0),this;let r=0n;if("be"===t)for(let t=0;t<e.length;t++)r=r<<8n|BigInt(255&e[t]);else for(let t=e.length-1;t>=0;t--)r=r<<8n|BigInt(255&e[t]);return this._initializeState(r,0),this}copy(e){e._magnitude=this._magnitude,e._sign=this._sign,e._nominalWordLength=this._nominalWordLength,e.red=this.red}static move(e,t){e._magnitude=t._magnitude,e._sign=t._sign,e._nominalWordLength=t._nominalWordLength,e.red=t.red}clone(){let e=new p(0n);return this.copy(e),e}expand(e){return this.assert(e>=0,"Expand size must be non-negative"),this._nominalWordLength=Math.max(this._nominalWordLength,e,1),this}strip(){return this._finishInitialization(),this.normSign()}normSign(){return 0n===this._magnitude&&(this._sign=0),this}inspect(){return(null!==this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}_getMinimalHex(){return 0n===this._magnitude?"0":this._magnitude.toString(16)}toString(e=10,t=1){if(16===e||"hex"===e){let e=this._getMinimalHex();if(t>1)for("0"!==e&&e.length%2!=0&&(e="0"+e);e.length%t!=0;)e="0"+e;return(this.isNeg()?"-":"")+e}if("number"!=typeof e||e<2||e>36||e%1!=0)throw Error("Base should be an integer between 2 and 36");return this.toBaseString(e,t)}toBaseString(e,t){if(0n===this._magnitude){let e="0";if(t>1)for(;e.length<t;)e="0"+e;return e}let r=p.groupSizes[e],i=BigInt(p.groupBases[e]);(0===r||0n===i)&&(0===(r=Math.floor(Math.log(Number.MAX_SAFE_INTEGER)/Math.log(e)))&&(r=1),i=BigInt(e)**BigInt(r));let a="",n=this._magnitude;for(;n>0n;){let t=n%i;n/=i;let s=this._bigIntToStringInBase(t,e);if(n>0n){let e=r-s.length;a=e>0&&e<p.zeros.length?p.zeros[e]+s+a:e>0?"0".repeat(e)+s+a:s+a}else a=s+a}if(t>0)for(;a.length<t;)a="0"+a;return(1===this._sign?"-":"")+a}toNumber(){let e=this._getSignedValue();if(e>p.MAX_SAFE_INTEGER_BIGINT||e<p.MIN_SAFE_INTEGER_BIGINT)throw Error("Number can only safely store up to 53 bits");return Number(e)}toJSON(){let e=this._getMinimalHex();return(this.isNeg()?"-":"")+e}toArrayLikeGeneric(e,t){let r=this._magnitude,i=t?0:e.length-1,a=t?1:-1;for(let t=0;t<e.length;++t){if(0n===r&&i>=0&&i<e.length)e[i]=0;else if(i>=0&&i<e.length)e[i]=Number(255n&r);else break;r>>=8n,i+=a}}toArray(e="be",t){this.strip();let r=this.byteLength(),i=t??Math.max(1,r);this.assert(r<=i,"byte array longer than desired length"),this.assert(i>0,"Requested array length <= 0");let a=Array(i).fill(0);return 0n===this._magnitude&&i>0?a:0n===this._magnitude&&0===i?[]:(this.toArrayLikeGeneric(a,"le"===e),a)}bitLength(){return 0n===this._magnitude?0:this._magnitude.toString(2).length}static toBitArray(e){let t=e.bitLength();if(0===t)return[];let r=Array(t),i=e._magnitude;for(let e=0;e<t;e++)r[e]=+((i>>BigInt(e)&1n)!==0n);return r}toBitArray(){return p.toBitArray(this)}zeroBits(){if(0n===this._magnitude)return 0;let e=0,t=this._magnitude;for(;(1n&t)===0n&&0n!==t;)e++,t>>=1n;return e}byteLength(){return 0n===this._magnitude?0:Math.ceil(this.bitLength()/8)}_getSignedValue(){return 1===this._sign?-this._magnitude:this._magnitude}_setValueFromSigned(e){e<0n?(this._magnitude=-e,this._sign=1):(this._magnitude=e,this._sign=0),this._finishInitialization(),this.normSign()}toTwos(e){this.assert(e>=0);let t=BigInt(e),r=this._getSignedValue();1===this._sign&&0n!==this._magnitude&&(r=(1n<<t)+r),r&=(1n<<t)-1n;let i=new p(0n);return i._initializeState(r,0),i}fromTwos(e){this.assert(e>=0);let t=BigInt(e),r=this._magnitude;if(e>0&&(r>>t-1n&1n)!==0n&&0===this._sign){let e=new p(0n);return e._setValueFromSigned(r-(1n<<t)),e}return this.clone()}isNeg(){return 1===this._sign&&0n!==this._magnitude}neg(){return this.clone().ineg()}ineg(){return 0n!==this._magnitude&&(this._sign=+(1!==this._sign)),this}_iuop(e,t){let r=t(this._magnitude,e._magnitude),i=t===((e,t)=>e^t),a=this._nominalWordLength;return i&&(a=Math.max(this.length,e.length)),this._magnitude=r,this._finishInitialization(),i&&(this._nominalWordLength=Math.max(this._nominalWordLength,a)),this.strip()}iuor(e){return this._iuop(e,(e,t)=>e|t)}iuand(e){return this._iuop(e,(e,t)=>e&t)}iuxor(e){return this._iuop(e,(e,t)=>e^t)}_iop(e,t){return this.assert(0===this._sign&&0===e._sign),this._iuop(e,t)}ior(e){return this._iop(e,(e,t)=>e|t)}iand(e){return this._iop(e,(e,t)=>e&t)}ixor(e){return this._iop(e,(e,t)=>e^t)}_uop_new(e,t){return this.length>=e.length?this.clone()[t](e):e.clone()[t](this)}or(e){return this.assert(0===this._sign&&0===e._sign),this._uop_new(e,"iuor")}uor(e){return this._uop_new(e,"iuor")}and(e){return this.assert(0===this._sign&&0===e._sign),this._uop_new(e,"iuand")}uand(e){return this._uop_new(e,"iuand")}xor(e){return this.assert(0===this._sign&&0===e._sign),this._uop_new(e,"iuxor")}uxor(e){return this._uop_new(e,"iuxor")}inotn(e){this.assert("number"==typeof e&&e>=0);let t=BigInt(e);this._magnitude=~this._magnitude&(1n<<t)-1n;let r=0===e?1:Math.ceil(e/p.wordSize);return this._nominalWordLength=Math.max(1,r),this.strip(),this._nominalWordLength=Math.max(this._nominalWordLength,Math.max(1,r)),this}notn(e){return this.clone().inotn(e)}setn(e,t){this.assert("number"==typeof e&&e>=0);let r=BigInt(e);1===t||!0===t?this._magnitude|=1n<<r:this._magnitude&=~(1n<<r);let i=Math.floor(e/p.wordSize)+1;return this._nominalWordLength=Math.max(this._nominalWordLength,i),this._finishInitialization(),this.strip()}iadd(e){return this._setValueFromSigned(this._getSignedValue()+e._getSignedValue()),this}add(e){let t=new p(0n);return t._setValueFromSigned(this._getSignedValue()+e._getSignedValue()),t}isub(e){return this._setValueFromSigned(this._getSignedValue()-e._getSignedValue()),this}sub(e){let t=new p(0n);return t._setValueFromSigned(this._getSignedValue()-e._getSignedValue()),t}mul(e){let t=new p(0n);return t._magnitude=this._magnitude*e._magnitude,t._sign=0n===t._magnitude?0:this._sign^e._sign,t._nominalWordLength=this.length+e.length,t.red=null,t.normSign()}imul(e){return this._magnitude*=e._magnitude,this._sign=0n===this._magnitude?0:this._sign^e._sign,this._nominalWordLength=this.length+e.length,this.red=null,this.normSign()}imuln(e){return this.assert("number"==typeof e,"Assertion failed"),this.assert(Math.abs(e)<=p.MAX_IMULN_ARG,"Assertion failed"),this._setValueFromSigned(this._getSignedValue()*BigInt(e)),this}muln(e){return this.clone().imuln(e)}sqr(){let e=new p(0n);return e._magnitude=this._magnitude*this._magnitude,e._sign=0,e._nominalWordLength=2*this.length,e.red=null,e}isqr(){return this._magnitude*=this._magnitude,this._sign=0,this._nominalWordLength=2*this.length,this.red=null,this}pow(e){if(this.assert(0===e._sign,"Exponent for pow must be non-negative"),e.isZero())return new p(1n);let t=new p(1n),r=this.clone(),i=e.clone(),a=r.isNeg(),n=i.isOdd();for(a&&r.ineg();!i.isZero();)i.isOdd()&&t.imul(r),r.isqr(),i.iushrn(1);return a&&n&&t.ineg(),t}iushln(e){return(this.assert("number"==typeof e&&e>=0),0===e)?this:(this._magnitude<<=BigInt(e),this._finishInitialization(),this.strip())}ishln(e){return this.assert(0===this._sign,"ishln requires positive number"),this.iushln(e)}iushrn(e,t,r){if(this.assert("number"==typeof e&&e>=0),0===e)return null!=r&&r._initializeState(0n,0),this;if(null!=r){let t=(1n<<BigInt(e))-1n,i=this._magnitude&t;r._initializeState(i,0)}return this._magnitude>>=BigInt(e),this._finishInitialization(),this.strip()}ishrn(e,t,r){return this.assert(0===this._sign,"ishrn requires positive number"),this.iushrn(e,t,r)}shln(e){return this.clone().ishln(e)}ushln(e){return this.clone().iushln(e)}shrn(e){return this.clone().ishrn(e)}ushrn(e){return this.clone().iushrn(e)}testn(e){return this.assert("number"==typeof e&&e>=0),(this._magnitude>>BigInt(e)&1n)!==0n}imaskn(e){this.assert("number"==typeof e&&e>=0),this.assert(0===this._sign,"imaskn works only with positive numbers");let t=BigInt(e);this._magnitude&=0n===t?0n:(1n<<t)-1n;let r=0===e?1:Math.max(1,Math.ceil(e/p.wordSize));return this._nominalWordLength=r,this._finishInitialization(),this._nominalWordLength=Math.max(this._nominalWordLength,r),this.strip()}maskn(e){return this.clone().imaskn(e)}iaddn(e){return this.assert("number"==typeof e),this.assert(Math.abs(e)<=p.MAX_IMULN_ARG,"num is too large"),this._setValueFromSigned(this._getSignedValue()+BigInt(e)),this}_iaddn(e){return this.iaddn(e)}isubn(e){return this.assert("number"==typeof e),this.assert(Math.abs(e)<=p.MAX_IMULN_ARG,"Assertion failed"),this._setValueFromSigned(this._getSignedValue()-BigInt(e)),this}addn(e){return this.clone().iaddn(e)}subn(e){return this.clone().isubn(e)}iabs(){return this._sign=0,this}abs(){return this.clone().iabs()}divmod(e,t,r){if(this.assert(!e.isZero(),"Division by zero"),this.isZero()){let e=new p(0n);return{div:"mod"!==t?e:null,mod:"div"!==t?e:null}}let i=this._getSignedValue(),a=e._getSignedValue(),n=null,s=null;"mod"!==t&&(n=i/a),"div"!==t&&(s=i%a,!0===r&&s<0n&&(s+=a<0n?-a:a));let o=null!==n?new p(0n):null;null!==o&&null!==n&&o._setValueFromSigned(n);let c=null!==s?new p(0n):null;return null!==c&&null!==s&&c._setValueFromSigned(s),{div:o,mod:c}}div(e){return this.divmod(e,"div",!1).div}mod(e){return this.divmod(e,"mod",!1).mod}umod(e){return this.divmod(e,"mod",!0).mod}divRound(e){this.assert(!e.isZero());let t=this._getSignedValue(),r=e._getSignedValue(),i=t/r,a=t%r;if(0n===a){let e=new p(0n);return e._setValueFromSigned(i),e}2n*(a<0n?-a:a)>=(r<0n?-r:r)&&(t>0n&&r>0n||t<0n&&r<0n?i+=1n:i-=1n);let n=new p(0n);return n._setValueFromSigned(i),n}modrn(e){this.assert(0!==e,"Division by zero in modrn");let t=BigInt(Math.abs(e));if(0n===t)throw Error("Division by zero in modrn");let r=this._magnitude%t;return e<0?Number(-r):Number(r)}idivn(e){return this.assert(0!==e),this.assert(Math.abs(e)<=p.MAX_IMULN_ARG,"num is too large"),this._setValueFromSigned(this._getSignedValue()/BigInt(e)),this}divn(e){return this.clone().idivn(e)}egcd(e){this.assert(0===e._sign,"p must not be negative"),this.assert(!e.isZero(),"p must not be zero");let t=this._getSignedValue(),r=e._magnitude,i=1n,a=0n,n=0n,s=1n;for(;0n!==r;){let e=t/r,o=r;r=t%r,t=o,o=a,a=i-e*a,i=o,o=s,s=n-e*s,n=o}let o=new p(0n);o._setValueFromSigned(i);let c=new p(0n);c._setValueFromSigned(n);let l=new p(0n);return l._initializeState(t<0n?-t:t,0),{a:o,b:c,gcd:l}}gcd(e){let t=this._magnitude,r=e._magnitude;if(0n===t){let e=new p(0n);return e._setValueFromSigned(r),e.iabs()}if(0n===r){let e=new p(0n);return e._setValueFromSigned(t),e.iabs()}for(;0n!==r;){let e=t%r;t=r,r=e}let i=new p(0n);return i._initializeState(t,0),i}invm(e){this.assert(!e.isZero()&&0===e._sign,"Modulus for invm must be positive and non-zero");let t=this.egcd(e);if(!t.gcd.eqn(1))throw Error("Inverse does not exist (numbers are not coprime).");return t.a.umod(e)}isEven(){return this._magnitude%2n===0n}isOdd(){return this._magnitude%2n===1n}andln(e){return this.assert(e>=0),Number(this._magnitude&BigInt(e))}bincn(e){this.assert("number"==typeof e&&e>=0);let t=1n<<BigInt(e);return this._setValueFromSigned(this._getSignedValue()+t),this}isZero(){return 0n===this._magnitude}cmpn(e){this.assert(Math.abs(e)<=p.MAX_IMULN_ARG,"Number is too big");let t=this._getSignedValue(),r=BigInt(e);return t<r?-1:+(t>r)}cmp(e){let t=this._getSignedValue(),r=e._getSignedValue();return t<r?-1:+(t>r)}ucmp(e){return this._magnitude<e._magnitude?-1:+(this._magnitude>e._magnitude)}gtn(e){return 1===this.cmpn(e)}gt(e){return 1===this.cmp(e)}gten(e){return this.cmpn(e)>=0}gte(e){return this.cmp(e)>=0}ltn(e){return -1===this.cmpn(e)}lt(e){return -1===this.cmp(e)}lten(e){return 0>=this.cmpn(e)}lte(e){return 0>=this.cmp(e)}eqn(e){return 0===this.cmpn(e)}eq(e){return 0===this.cmp(e)}toRed(e){return this.assert(null==this.red,"Already a number in reduction context"),this.assert(0===this._sign,"toRed works only with positives"),e.convertTo(this).forceRed(e)}fromRed(){return this.assert(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)}forceRed(e){return this.red=e,this}redAdd(e){return this.assert(this.red,"redAdd works only with red numbers"),this.red.add(this,e)}redIAdd(e){return this.assert(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)}redSub(e){return this.assert(this.red,"redSub works only with red numbers"),this.red.sub(this,e)}redISub(e){return this.assert(this.red,"redISub works only with red numbers"),this.red.isub(this,e)}redShl(e){return this.assert(this.red,"redShl works only with red numbers"),this.red.shl(this,e)}redMul(e){return this.assert(this.red,"redMul works only with red numbers"),this.red.verify2(this,e),this.red.mul(this,e)}redIMul(e){return this.assert(this.red,"redIMul works only with red numbers"),this.red.verify2(this,e),this.red.imul(this,e)}redSqr(){return this.assert(this.red,"redSqr works only with red numbers"),this.red.verify1(this),this.red.sqr(this)}redISqr(){return this.assert(this.red,"redISqr works only with red numbers"),this.red.verify1(this),this.red.isqr(this)}redSqrt(){return this.assert(this.red,"redSqrt works only with red numbers"),this.red.verify1(this),this.red.sqrt(this)}redInvm(){return this.assert(this.red,"redInvm works only with red numbers"),this.red.verify1(this),this.red.invm(this)}redNeg(){return this.assert(this.red,"redNeg works only with red numbers"),this.red.verify1(this),this.red.neg(this)}redPow(e){return this.assert(null!=this.red&&null==e.red,"redPow(normalNum)"),this.red.verify1(this),this.red.pow(this,e)}static fromHex(e,t){let r="be";return("little"===t||"le"===t)&&(r="le"),new p(e,16,r)}toHex(e=0){if(this.isZero()&&0===e)return"";let t=this._getMinimalHex();"0"!==t&&t.length%2!=0&&(t="0"+t);let r=2*e;for(;t.length<r;)t="0"+t;return(this.isNeg()?"-":"")+t}static fromJSON(e){return new p(e,16)}static fromNumber(e){return new p(e)}static fromString(e,t){return new p(e,t)}static fromSm(e,t="big"){if(0===e.length)return new p(0n);let r=0,i="";if("little"===t){let t=e.length-1,a=e[t];(128&a)!=0&&(r=1,a&=127),i+=(a<16?"0":"")+a.toString(16);for(let r=t-1;r>=0;r--){let t=e[r];i+=(t<16?"0":"")+t.toString(16)}}else{let t=e[0];(128&t)!=0&&(r=1,t&=127),i+=(t<16?"0":"")+t.toString(16);for(let t=1;t<e.length;t++){let r=e[t];i+=(r<16?"0":"")+r.toString(16)}}let a=""===i?0n:BigInt("0x"+i),n=new p(0n);return n._initializeState(a,r),n}toSm(e="big"){if(0n===this._magnitude)return 1===this._sign?[128]:[];let t=this._getMinimalHex();t.length%2!=0&&(t="0"+t);let r=Array(t.length/2);for(let e=0,i=0;e<t.length;e+=2)r[i++]=parseInt(t.slice(e,e+2),16);return 1===this._sign?(128&r[0])!=0?r.unshift(128):r[0]|=128:(128&r[0])!=0&&r.unshift(0),"little"===e?r.reverse():r}static fromBits(e,t=!1){let r=e>>>24,i=8388607&e,a=(8388608&e)!=0;if(t&&a)throw Error("negative bit set");if(0===r&&0===i){if(a&&t)throw Error("negative bit set for zero value");return new p(0n)}let n=new p(i);return r<=3?n.iushrn((3-r)*8):n.iushln((r-3)*8),a&&n.ineg(),n}toBits(){let e;if(this.strip(),this.isZero()&&!this.isNeg())return 0;let t=this.isNeg(),r=this.abs(),i=r.toArray("be"),a=0;for(;a<i.length-1&&0===i[a];)a++;let n=(i=i.slice(a)).length;if(0!==n||r.isZero()||(i=[0],n=1),r.isZero()&&(n=0,i=[]),0===n)e=0;else if(n<=3){e=0;for(let t=0;t<n;t++)e=e<<8|i[t]}else e=i[0]<<16|i[1]<<8|i[2];(8388608&e)!=0&&n<=255&&(e>>>=8,n++);let s=n<<24|e;return t&&(s|=8388608),s>>>0}static fromScriptNum(e,t=!1,r){if(void 0!==r&&e.length>r)throw Error("script number overflow");if(0===e.length)return new p(0n);if(t&&(127&e[e.length-1])==0&&(e.length<=1||(128&e[e.length-2])==0))throw Error("non-minimally encoded script number");return p.fromSm(e,"little")}toScriptNum(){return this.toSm("little")}_invmp(e){let t;this.assert(0===e._sign,"p must not be negative for _invmp"),this.assert(!e.isZero(),"p must not be zero for _invmp");let r=this.umod(e)._magnitude,i=e._magnitude,a=1n,n=0n,s=e._magnitude;for(;r>1n&&i>1n;){let e=0;for(;(r>>BigInt(e)&1n)===0n;)e++;if(e>0){r>>=BigInt(e);for(let t=0;t<e;++t)(1n&a)!==0n&&(a+=s),a>>=1n}let t=0;for(;(i>>BigInt(t)&1n)===0n;)t++;if(t>0){i>>=BigInt(t);for(let e=0;e<t;++e)(1n&n)!==0n&&(n+=s),n>>=1n}r>=i?(r-=i,a-=n):(i-=r,n-=a)}if(1n===r)t=a;else if(1n===i)t=n;else if(0n===r&&1n===i)t=n;else if(0n===i&&1n===r)t=a;else throw Error("_invmp: GCD is not 1, inverse does not exist. aVal="+r+", bVal="+i);(t%=s)<0n&&(t+=s);let o=new p(0n);return o._initializeState(t,0),o}mulTo(e,t){return t._magnitude=this._magnitude*e._magnitude,t._sign=0n===t._magnitude?0:this._sign^e._sign,t._nominalWordLength=this.length+e.length,t.red=null,t.normSign(),t}}class b{name;p;k;n;tmp;constructor(e,t){this.name=e,this.p=new p(t,16),this.n=this.p.bitLength(),this.k=new p(BigInt(1)).iushln(this.n).isub(this.p),this.tmp=this._tmp()}_tmp(){let e=new p(BigInt(0)),t=Math.ceil(this.n/p.wordSize);return e.expand(Math.max(1,t)),e}ireduce(e){let t;do this.split(e,this.tmp),this.imulK(e),e.iadd(this.tmp),t=e.bitLength();while(t>this.n);let r=t<this.n?-1:e.ucmp(this.p);return 0===r?e.words=[0]:r>0&&e.isub(this.p),e.strip(),e}split(e,t){e.iushrn(this.n,0,t)}imulK(e){return e.imul(this.k)}}class g extends b{constructor(){super("k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}split(e,t){let r=e.words,i=e.length,a=Math.min(i,9),n=Array(a+ +(i>9)).fill(0);for(let e=0;e<a;e++)n[e]=r[e];let s=a;if(i<=9){let r=Array(s);for(let e=0;e<s;++e)r[e]=n[e];t.words=r,e.words=[0];return}let o=r[9];n[s++]=4194303&o;let c=Array(s);for(let e=0;e<s;++e)c[e]=n[e];t.words=c;let l=Array(Math.max(1,i-9)).fill(0),d=0;for(let e=10;e<i;e++){let t=0|r[e];d<l.length&&(l[d++]=(4194303&t)<<4|o>>>22),o=t}o>>>=22,d<l.length?l[d++]=o:0!==o&&l.length;let h=Array(d);for(let e=0;e<d;++e)h[e]=l[e];e.words=h}imulK(e){let t=e.words,r=e.length,i=r+2,a=Array(i).fill(0);for(let e=0;e<r;e++)a[e]=t[e];let n=0;for(let e=0;e<i;e++){let t=0|a[e];n+=977*t,a[e]=0x3ffffff&n,n=64*t+(n/0x4000000|0)}return e.words=a,e}}class m{prime;m;constructor(e){if("k256"===e){let e=new g;this.m=e.p,this.prime=e}else this.assert(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}assert(e,t="Assertion failed"){if(!e)throw Error(t)}verify1(e){this.assert(0===e.negative,"red works only with positives"),this.assert(e.red,"red works only with red numbers")}verify2(e,t){this.assert((e.negative|t.negative)==0,"red works only with positives"),this.assert(null!=e.red&&e.red===t.red,"red works only with red numbers")}imod(e){return null!=this.prime?this.prime.ireduce(e).forceRed(this):(p.move(e,e.umod(this.m).forceRed(this)),e)}neg(e){return e.isZero()?e.clone():this.m.sub(e).forceRed(this)}add(e,t){this.verify2(e,t);let r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r.forceRed(this)}iadd(e,t){this.verify2(e,t);let r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r}sub(e,t){this.verify2(e,t);let r=e.sub(t);return 0>r.cmpn(0)&&r.iadd(this.m),r.forceRed(this)}isub(e,t){this.verify2(e,t);let r=e.isub(t);return 0>r.cmpn(0)&&r.iadd(this.m),r}shl(e,t){return this.verify1(e),this.imod(e.ushln(t))}imul(e,t){return this.verify2(e,t),this.imod(e.imul(t))}mul(e,t){return this.verify2(e,t),this.imod(e.mul(t))}isqr(e){return this.imul(e,e.clone())}sqr(e){return this.mul(e,e)}sqrt(e){if(e.isZero())return e.clone();let t=this.m.andln(3);if(this.assert(t%2==1),3===t){let t=this.m.add(new p(1)).iushrn(2);return this.pow(e,t)}let r=this.m.subn(1),i=0;for(;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);this.assert(!r.isZero());let a=new p(1).toRed(this),n=a.redNeg(),s=this.m.subn(1).iushrn(1),o=this.m.bitLength(),c=new p(2*o*o).toRed(this);for(;0!==this.pow(c,s).cmp(n);)c.redIAdd(n);let l=this.pow(c,r),d=this.pow(e,r.addn(1).iushrn(1)),h=this.pow(e,r),u=i;for(;0!==h.cmp(a);){let e=h,t=0;for(;0!==e.cmp(a);t++)e=e.redSqr();this.assert(t<u);let r=this.pow(l,new p(1).iushln(u-t-1));d=d.redMul(r),l=r.redSqr(),h=h.redMul(l),u=t}return d}invm(e){let t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)}pow(e,t){if(t.isZero())return new p(1).toRed(this);if(0===t.cmpn(1))return e.clone();let r=Array(16);r[0]=new p(1).toRed(this),r[1]=e;let i=2;for(;i<r.length;i++)r[i]=this.mul(r[i-1],e);let a=r[0],n=0,s=0,o=t.bitLength()%26;for(0===o&&(o=26),i=t.length-1;i>=0;i--){let e=t.words[i];for(let t=o-1;t>=0;t--){let o=e>>t&1;if(a!==r[0]&&(a=this.sqr(a)),0===o&&0===n){s=0;continue}n<<=1,n|=o,(4==++s||0===i&&0===t)&&(a=this.mul(a,r[n]),s=0,n=0)}o=26}return a}convertTo(e){let t=e.umod(this.m);return t===e?t.clone():t}convertFrom(e){let t=e.clone();return t.red=null,t}}class y extends m{shift;r;r2;rinv;minv;constructor(e){super(e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new p(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}convertTo(e){return this.imod(e.ushln(this.shift))}convertFrom(e){let t=this.imod(e.mul(this.rinv));return t.red=null,t}imul(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;let r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(i).iushrn(this.shift),n=a;return a.cmp(this.m)>=0?n=a.isub(this.m):0>a.cmpn(0)&&(n=a.iadd(this.m)),n.forceRed(this)}mul(e,t){if(e.isZero()||t.isZero())return new p(0).forceRed(this);let r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(i).iushrn(this.shift),n=a;return a.cmp(this.m)>=0?n=a.isub(this.m):0>a.cmpn(0)&&(n=a.iadd(this.m)),n.forceRed(this)}invm(e){return this.imod(e._invmp(this.m).mul(this.r2)).forceRed(this)}}class w{curve;type;precomputed;constructor(e){this.curve=new th,this.type=e,this.precomputed=null}}class I extends w{x;y;z;zOne;constructor(e,t,r){super("jacobian"),null===e&&null===t&&null===r?(this.x=this.curve.one,this.y=this.curve.one,this.z=new p(0)):(p.isBN(e)||(e=new p(e,16)),this.x=e,p.isBN(t)||(t=new p(t,16)),this.y=t,p.isBN(r)||(r=new p(r,16)),this.z=r),null==this.x.red&&(this.x=this.x.toRed(this.curve.red)),null==this.y.red&&(this.y=this.y.toRed(this.curve.red)),null==this.z.red&&(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}toP(){if(this.isInfinity())return new td(null,null);let e=this.z.redInvm(),t=e.redSqr();return new td(this.x.redMul(t),this.y.redMul(t).redMul(e))}neg(){return new I(this.x,this.y.redNeg(),this.z)}add(e){if(this.isInfinity())return e;if(e.isInfinity())return this;let t=e.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(t),a=e.x.redMul(r),n=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(r.redMul(this.z)),o=i.redSub(a),c=n.redSub(s);if(0===o.cmpn(0))if(0!==c.cmpn(0))return new I(null,null,null);else return this.dbl();let l=o.redSqr(),d=l.redMul(o),h=i.redMul(l),u=c.redSqr().redIAdd(d).redISub(h).redISub(h),f=c.redMul(h.redISub(u)).redISub(n.redMul(d));return new I(u,f,this.z.redMul(e.z).redMul(o))}mixedAdd(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;if(null===e.x||null===e.y)throw Error("Point coordinates cannot be null");let t=this.z.redSqr(),r=this.x,i=e.x.redMul(t),a=this.y,n=e.y.redMul(t).redMul(this.z),s=r.redSub(i),o=a.redSub(n);if(0===s.cmpn(0))if(0!==o.cmpn(0))return new I(null,null,null);else return this.dbl();let c=s.redSqr(),l=c.redMul(s),d=r.redMul(c),h=o.redSqr().redIAdd(l).redISub(d).redISub(d),u=o.redMul(d.redISub(h)).redISub(a.redMul(l));return new I(h,u,this.z.redMul(s))}dblp(e){if(0===e||this.isInfinity())return this;if(void 0===e)return this.dbl();let t=this;for(let r=0;r<e;r++)t=t.dbl();return t}dbl(){let e,t,r;if(this.isInfinity())return this;if(this.zOne){let i=this.x.redSqr(),a=this.y.redSqr(),n=a.redSqr(),s=this.x.redAdd(a).redSqr().redISub(i).redISub(n);s=s.redIAdd(s);let o=i.redAdd(i).redIAdd(i),c=o.redSqr().redISub(s).redISub(s),l=n.redIAdd(n);l=(l=l.redIAdd(l)).redIAdd(l),e=c,t=o.redMul(s.redISub(c)).redISub(l),r=this.y.redAdd(this.y)}else{let i=this.x.redSqr(),a=this.y.redSqr(),n=a.redSqr(),s=this.x.redAdd(a).redSqr().redISub(i).redISub(n);s=s.redIAdd(s);let o=i.redAdd(i).redIAdd(i),c=o.redSqr(),l=n.redIAdd(n);l=(l=l.redIAdd(l)).redIAdd(l),e=c.redISub(s).redISub(s),t=o.redMul(s.redISub(e)).redISub(l),r=(r=this.y.redMul(this.z)).redIAdd(r)}return new I(e,t,r)}eq(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;let t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;let i=t.redMul(this.z),a=r.redMul(e.z);return 0===this.y.redMul(a).redISub(e.y.redMul(i)).cmpn(0)}eqXToP(e){let t=this.z.redSqr(),r=e.toRed(this.curve?.red).redMul(t);if(0===this.x.cmp(r))return!0;let i=e.clone();if(null===this.curve||null==this.curve.redN)throw Error("Curve or redN is not initialized.");let a=this.curve.redN.redMul(t);for(;0>i.cmp(this.curve.p)&&(i.iadd(this.curve.n),!(i.cmp(this.curve.p)>=0));)if(r.redIAdd(a),0===this.x.cmp(r))return!0;return!1}inspect(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"}isInfinity(){return 0===this.z.cmpn(0)}}let v=(e,t="Hash assertion failed")=>{if(!e)throw Error(t)};class k{pending;pendingTotal;blockSize;outSize;endian;_delta8;_delta32;padLength;hmacStrength;constructor(e,t,r,i){this.pending=null,this.pendingTotal=0,this.blockSize=e,this.outSize=t,this.hmacStrength=r,this.padLength=i/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}_update(e,t){throw Error("Not implemented")}_digest(){throw Error("Not implemented")}_digestHex(){throw Error("Not implemented")}update(e,t){if(e=S(e,t),null==this.pending?this.pending=e:this.pending=this.pending.concat(e),this.pendingTotal+=e.length,this.pending.length>=this._delta8){let t=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-t,e.length),0===this.pending.length&&(this.pending=null),e=function(e,t,r,i){let a=r-0;v(a%4==0);let n=Array(a/4);for(let r=0,a=t;r<n.length;r++,a+=4){let t;t="big"===i?e[a]<<24|e[a+1]<<16|e[a+2]<<8|e[a+3]:e[a+3]<<24|e[a+2]<<16|e[a+1]<<8|e[a],n[r]=t>>>0}return n}(e,0,e.length-t,this.endian);for(let t=0;t<e.length;t+=this._delta32)this._update(e,t)}return this}digest(){return this.update(this._pad()),v(null===this.pending),this._digest()}digestHex(){return this.update(this._pad()),v(null===this.pending),this._digestHex()}_pad(){let e,t,r=this.pendingTotal,i=this._delta8,a=i-(r+this.padLength)%i,n=Array(a+this.padLength);for(e=1,n[0]=128;e<a;e++)n[e]=0;if(r<<=3,"big"===this.endian){for(t=8;t<this.padLength;t++)n[e++]=0;n[e++]=0,n[e++]=0,n[e++]=0,n[e++]=0,n[e++]=r>>>24&255,n[e++]=r>>>16&255,n[e++]=r>>>8&255,n[e++]=255&r}else for(t=8,n[e++]=255&r,n[e++]=r>>>8&255,n[e++]=r>>>16&255,n[e++]=r>>>24&255,n[e++]=0,n[e++]=0,n[e++]=0,n[e++]=0;t<this.padLength;t++)n[e++]=0;return n}}function S(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];let r=[];if("string"==typeof e)if("hex"!==t){let t=0;for(let n=0;n<e.length;n++){let s=e.charCodeAt(n);if(s<128)r[t++]=s;else if(s<2048)r[t++]=s>>6|192,r[t++]=63&s|128;else{var i,a;(i=e,a=n,(64512&i.charCodeAt(a))!=55296||a<0||a+1>=i.length?1:(64512&i.charCodeAt(a+1))!=56320)?r[t++]=s>>12|224:(s=65536+((1023&s)<<10)+(1023&e.charCodeAt(++n)),r[t++]=s>>18|240,r[t++]=s>>12&63|128),r[t++]=s>>6&63|128,r[t++]=63&s|128}}}else{(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);for(let t=0;t<e.length;t+=2)r.push(parseInt(e[t]+e[t+1],16))}else for(let t=0;t<e.length;t++)r[t]=0|e[t];return r}function x(e,t){let r="";for(let a=0;a<e.length;a++){var i;let n=e[a];"little"===t&&(n=((i=n)>>>24|i>>>8&65280|i<<8&0xff0000|(255&i)<<24)>>>0),r+=function(e){if(7===e.length)return"0"+e;if(6===e.length)return"00"+e;if(5===e.length)return"000"+e;if(4===e.length)return"0000"+e;if(3===e.length)return"00000"+e;else if(2===e.length)return"000000"+e;else if(1===e.length)return"0000000"+e;else return e}(n.toString(16))}return r}function P(e){let t="";for(let r of e)t+=r.toString(16).padStart(2,"0");return t}function E(e,t){let r=Array(4*e.length);for(let i=0,a=0;i<e.length;i++,a+=4){let n=e[i];"big"===t?(r[a]=n>>>24,r[a+1]=n>>>16&255,r[a+2]=n>>>8&255,r[a+3]=255&n):(r[a+3]=n>>>24,r[a+2]=n>>>16&255,r[a+1]=n>>>8&255,r[a]=255&n)}return r}function N(e,t){return e>>>t|e<<32-t}function O(e,t){return e<<t|e>>>32-t}function _(e,t){return e+t>>>0}let A=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],T=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],C=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],V=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11];function R(e,t,r,i){return e<=15?t^r^i:e<=31?t&r|~t&i:e<=47?(t|~r)^i:e<=63?t&i|r&~i:t^(r|~i)}class U extends k{h;constructor(){super(512,160,192,64),this.endian="little",this.h=[0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0],this.endian="little"}_update(e,t){var r,i,a,n,s,o;let c,l=this.h[0],d=this.h[1],h=this.h[2],u=this.h[3],f=this.h[4],p=l,b=d,g=h,m=u,y=f;for(let w=0;w<80;w++){c=_(O((r=l,i=R(w,d,h,u),r+i+e[A[w]+t]+((s=w)<=15?0:s<=31?0x5a827999:s<=47?0x6ed9eba1:s<=63?0x8f1bbcdc:0xa953fd4e)>>>0),C[w]),f),l=f,f=u,u=O(h,10),h=d,d=c,c=_(O((a=p,n=R(79-w,b,g,m),a+n+e[T[w]+t]+((o=w)<=15?0x50a28be6:o<=31?0x5c4dd124:o<=47?0x6d703ef3:0x7a6d76e9*!!(o<=63))>>>0),V[w]),y),p=y,y=m,m=O(g,10),g=b,b=c}c=this.h[1]+h+m>>>0,this.h[1]=this.h[2]+u+y>>>0,this.h[2]=this.h[3]+f+p>>>0,this.h[3]=this.h[4]+l+b>>>0,this.h[4]=this.h[0]+d+g>>>0,this.h[0]=c}_digest(){return E(this.h,"little")}_digestHex(){return x(this.h,"little")}}class D{h;constructor(){this.h=new eE}update(e,t){let r=Uint8Array.from(S(e,t));return this.h.update(r),this}digest(){return Array.from(this.h.digest())}digestHex(){return P(this.h.digest())}}class B extends k{h;W;k;constructor(){super(512,160,80,64),this.k=[0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6],this.h=[0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0],this.W=Array(80)}_update(e,t){let r,i=this.W;for(void 0===t&&(t=0),r=0;r<16;r++)i[r]=e[t+r];for(;r<i.length;r++)i[r]=O(i[r-3]^i[r-8]^i[r-14]^i[r-16],1);let a=this.h[0],n=this.h[1],s=this.h[2],o=this.h[3],c=this.h[4];for(r=0;r<i.length;r++){var l,d,h,u,f,p,b,g,m;let e=~~(r/20),t=(u=O(a,5),l=n,d=s,h=o,f=0===e?(p=l)&d^~p&h:1===e||3===e?l^d^h:2===e?(b=l)&(g=d)^b&(m=h)^g&m:0,u+f+c+i[r]+this.k[e]>>>0);c=o,o=s,s=O(n,30),n=a,a=t}this.h[0]=_(this.h[0],a),this.h[1]=_(this.h[1],n),this.h[2]=_(this.h[2],s),this.h[3]=_(this.h[3],o),this.h[4]=_(this.h[4],c)}_digest(){return E(this.h,"big")}_digestHex(){return x(this.h,"big")}}class L{h;constructor(){this.h=new eR}update(e,t){let r=Uint8Array.from(S(e,t));return this.h.update(r),this}digest(){return Array.from(this.h.digest())}digestHex(){return P(this.h.digest())}}class H{h;blockSize=64;outSize=32;constructor(e){let t=Uint8Array.from(S(e,"hex"));this.h=new eD(eN,t)}update(e,t){return this.h.update(Uint8Array.from(S(e,t))),this}digest(){return Array.from(this.h.digest())}digestHex(){return P(this.h.digest())}}class K{inner;outer;blockSize=64;constructor(e){let t;for((e=S(e,"hex")).length>this.blockSize&&(e=new B().update(e).digest()),t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(t=0,this.inner=new B().update(e);t<e.length;t++)e[t]^=106;this.outer=new B().update(e)}update(e,t){return this.inner.update(e,t),this}digest(){return this.outer.update(this.inner.digest()),this.outer.digest()}digestHex(){return this.outer.update(this.inner.digest()),this.outer.digestHex()}}class F{h;blockSize=128;outSize=32;constructor(e){let t=Uint8Array.from(S(e,"hex"));this.h=new eD(eU,t)}update(e,t){return this.h.update(Uint8Array.from(S(e,t))),this}digest(){return Array.from(this.h.digest())}digestHex(){return P(this.h.digest())}}let q=(e,t)=>new U().update(e,t).digest(),M=(e,t)=>new B().update(e,t).digest(),$=(e,t)=>new D().update(e,t).digest(),z=(e,t)=>new L().update(e,t).digest(),W=(e,t)=>{let r=new D().update(e,t).digest();return new D().update(r).digest()},j=(e,t)=>{let r=new D().update(e,t).digest();return new U().update(r).digest()},G=(e,t,r)=>new H(e).update(t,r).digest(),X=(e,t,r)=>new F(e).update(t,r).digest();function Y(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`positive integer expected, got ${e}`)}function J(e,...t){if(!(e instanceof Uint8Array||ArrayBuffer.isView(e)&&"Uint8Array"===e.constructor.name))throw Error("Uint8Array expected");if(t.length>0&&!t.includes(e.length)){let r=t.join(",");throw Error(`Uint8Array expected of length ${r}, got length=${e.length}`)}}function Z(e){if("function"!=typeof e||"function"!=typeof e.create)throw Error("Hash should be wrapped by utils.createHasher");Y(e.outputLen),Y(e.blockLen)}function Q(e,t=!0){if(!0===e.destroyed)throw Error("Hash instance has been destroyed");if(t&&!0===e.finished)throw Error("Hash#digest() has already been called")}function ee(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function et(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function er(e){return"string"==typeof e&&(e=ei(e)),J(e),e}function ei(e){if("string"!=typeof e)throw Error("string expected");return new Uint8Array(new TextEncoder().encode(e))}function ea(e){return"string"==typeof e&&(e=ei(e)),J(e),e}class en{}function es(e){let t=t=>e().update(er(t)).digest(),r=e();return t.outputLen=r.outputLen,t.blockLen=r.blockLen,t.create=()=>e(),t}let eo=BigInt(0x100000000-1),ec=BigInt(32),el=(e,t,r)=>e>>>r,ed=(e,t,r)=>e<<32-r|t>>>r,eh=(e,t,r)=>e>>>r|t<<32-r,eu=(e,t,r)=>e<<32-r|t>>>r,ef=(e,t,r)=>e<<64-r|t>>>r-32,ep=(e,t,r)=>e>>>r-32|t<<64-r;function eb(e,t,r,i){let a=(t>>>0)+(i>>>0);return{h:e+r+(a/0x100000000|0)|0,l:0|a}}let eg=(e,t,r)=>(e>>>0)+(t>>>0)+(r>>>0),em=(e,t,r,i)=>t+r+i+(e/0x100000000|0)|0,ey=(e,t,r,i)=>(e>>>0)+(t>>>0)+(r>>>0)+(i>>>0),ew=(e,t,r,i,a)=>t+r+i+a+(e/0x100000000|0)|0,eI=(e,t,r,i,a)=>(e>>>0)+(t>>>0)+(r>>>0)+(i>>>0)+(a>>>0),ev=(e,t,r,i,a,n)=>t+r+i+a+n+(e/0x100000000|0)|0;class ek extends en{blockLen;outputLen;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,r,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=r,this.isLE=i,this.buffer=new Uint8Array(e),this.view=et(this.buffer)}update(e){Q(this),J(e=er(e));let{view:t,buffer:r,blockLen:i}=this,a=e.length;for(let n=0;n<a;){let s=Math.min(i-this.pos,a-n);if(s===i){let t=et(e);for(;i<=a-n;n+=i)this.process(t,n);continue}r.set(e.subarray(n,n+s),this.pos),this.pos+=s,n+=s,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Q(this);J(e);let t=this.outputLen;if(e.length<t)throw Error(`digestInto() expects output buffer of length at least ${t}`);this.finished=!0;let{buffer:r,view:i,blockLen:a,isLE:n}=this,{pos:s}=this;r[s++]=128,ee(this.buffer.subarray(s)),this.padOffset>a-s&&(this.process(i,0),s=0);for(let e=s;e<a;e++)r[e]=0;(function(e,t,r,i){if("function"==typeof e.setBigUint64)return e.setBigUint64(t,r,i);let a=BigInt(32),n=BigInt(0xffffffff),s=Number(r>>a&n),o=Number(r&n),c=4*!!i,l=4*!i;e.setUint32(t+c,s,i),e.setUint32(t+l,o,i)})(i,a-8,BigInt(8*this.length),n),this.process(i,0);let o=et(e),c=this.outputLen;if(c%4!=0)throw Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,d=this.get();if(l>d.length)throw Error("_sha2: outputLen bigger than state");for(let e=0;e<l;e++)o.setUint32(4*e,d[e],n)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let r=e.slice(0,t);return this.destroy(),r}_cloneInto(e){(e||=new this.constructor).set(...this.get());let{blockLen:t,buffer:r,length:i,finished:a,destroyed:n,pos:s}=this;return e.destroyed=n,e.finished=a,e.length=i,e.pos=s,i%t!=0&&e.buffer.set(r),e}clone(){return this._cloneInto()}}let eS=Uint32Array.from([0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19]),ex=Uint32Array.from([0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,0xe49b69c1,0xefbe4786,0xfc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x6ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2]),eP=new Uint32Array(64);class eE extends ek{A=0|eS[0];B=0|eS[1];C=0|eS[2];D=0|eS[3];E=0|eS[4];F=0|eS[5];G=0|eS[6];H=0|eS[7];constructor(e=32){super(64,e,8,!1)}get(){let{A:e,B:t,C:r,D:i,E:a,F:n,G:s,H:o}=this;return[e,t,r,i,a,n,s,o]}set(e,t,r,i,a,n,s,o){this.A=0|e,this.B=0|t,this.C=0|r,this.D=0|i,this.E=0|a,this.F=0|n,this.G=0|s,this.H=0|o}process(e,t){var r,i,a,n,s,o,c,l,d;for(let r=0;r<16;r++,t+=4)eP[r]=e.getUint32(t);for(let e=16;e<64;e++){let t=eP[e-15],r=eP[e-2],i=N(t,7)^N(t,18)^t>>>3,a=N(r,17)^N(r,19)^r>>>10;eP[e]=_(_(i,eP[e-7]),_(a,eP[e-16]))}let{A:h,B:u,C:f,D:p,E:b,F:g,G:m,H:y}=this;for(let e=0;e<64;e++){let t=(a=y,n=N(r=b,6)^N(r,11)^N(r,25),s=(i=b)&g^~i&m,a+n+s+ex[e]+eP[e]>>>0),w=_(N(o=h,2)^N(o,13)^N(o,22),(c=h)&(l=u)^c&(d=f)^l&d);y=m,m=g,g=b,b=_(p,t),p=f,f=u,u=h,h=_(t,w)}this.A=_(this.A,h),this.B=_(this.B,u),this.C=_(this.C,f),this.D=_(this.D,p),this.E=_(this.E,b),this.F=_(this.F,g),this.G=_(this.G,m),this.H=_(this.H,y)}roundClean(){ee(eP)}destroy(){ee(this.buffer),this.set(0,0,0,0,0,0,0,0)}}let eN=es(()=>new eE),eO=Uint32Array.from([0x6a09e667,0xf3bcc908,0xbb67ae85,0x84caa73b,0x3c6ef372,0xfe94f82b,0xa54ff53a,0x5f1d36f1,0x510e527f,0xade682d1,0x9b05688c,0x2b3e6c1f,0x1f83d9ab,0xfb41bd6b,0x5be0cd19,0x137e2179]),e_=function(e,t=!1){let r=e.length,i=new Uint32Array(r),a=new Uint32Array(r);for(let n=0;n<r;n++){let{h:r,l:s}=function(e,t=!1){return t?{h:Number(e&eo),l:Number(e>>ec&eo)}:{h:0|Number(e>>ec&eo),l:0|Number(e&eo)}}(e[n],t);i[n]=r,a[n]=s}return[i,a]}(["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(e=>BigInt(e))),eA=e_[0],eT=e_[1],eC=new Uint32Array(80),eV=new Uint32Array(80);class eR extends ek{Ah=0|eO[0];Al=0|eO[1];Bh=0|eO[2];Bl=0|eO[3];Ch=0|eO[4];Cl=0|eO[5];Dh=0|eO[6];Dl=0|eO[7];Eh=0|eO[8];El=0|eO[9];Fh=0|eO[10];Fl=0|eO[11];Gh=0|eO[12];Gl=0|eO[13];Hh=0|eO[14];Hl=0|eO[15];constructor(e=64){super(128,e,16,!1)}get(){let{Ah:e,Al:t,Bh:r,Bl:i,Ch:a,Cl:n,Dh:s,Dl:o,Eh:c,El:l,Fh:d,Fl:h,Gh:u,Gl:f,Hh:p,Hl:b}=this;return[e,t,r,i,a,n,s,o,c,l,d,h,u,f,p,b]}set(e,t,r,i,a,n,s,o,c,l,d,h,u,f,p,b){this.Ah=0|e,this.Al=0|t,this.Bh=0|r,this.Bl=0|i,this.Ch=0|a,this.Cl=0|n,this.Dh=0|s,this.Dl=0|o,this.Eh=0|c,this.El=0|l,this.Fh=0|d,this.Fl=0|h,this.Gh=0|u,this.Gl=0|f,this.Hh=0|p,this.Hl=0|b}process(e,t){for(let r=0;r<16;r++,t+=4)eC[r]=e.getUint32(t),eV[r]=e.getUint32(t+=4);for(let e=16;e<80;e++){let t=0|eC[e-15],r=0|eV[e-15],i=eh(t,r,1)^eh(t,r,8)^el(t,r,7),a=eu(t,r,1)^eu(t,r,8)^ed(t,r,7),n=0|eC[e-2],s=0|eV[e-2],o=eh(n,s,19)^ef(n,s,61)^el(n,s,6),c=ey(a,eu(n,s,19)^ep(n,s,61)^ed(n,s,6),eV[e-7],eV[e-16]),l=ew(c,i,o,eC[e-7],eC[e-16]);eC[e]=0|l,eV[e]=0|c}let{Ah:r,Al:i,Bh:a,Bl:n,Ch:s,Cl:o,Dh:c,Dl:l,Eh:d,El:h,Fh:u,Fl:f,Gh:p,Gl:b,Hh:g,Hl:m}=this;for(let e=0;e<80;e++){let t=eh(d,h,14)^eh(d,h,18)^ef(d,h,41),y=eu(d,h,14)^eu(d,h,18)^ep(d,h,41),w=d&u^~d&p,I=eI(m,y,h&f^~h&b,eT[e],eV[e]),v=ev(I,g,t,w,eA[e],eC[e]),k=0|I,S=eh(r,i,28)^ef(r,i,34)^ef(r,i,39),x=eu(r,i,28)^ep(r,i,34)^ep(r,i,39),P=r&a^r&s^a&s,E=i&n^i&o^n&o;g=0|p,m=0|b,p=0|u,b=0|f,u=0|d,f=0|h,({h:d,l:h}=eb(0|c,0|l,0|v,0|k)),c=0|s,l=0|o,s=0|a,o=0|n,a=0|r,n=0|i;let N=eg(x,E,k);r=em(N,S,P,v),i=0|N}({h:r,l:i}=eb(r,i,this.Ah,this.Al)),({h:a,l:n}=eb(a,n,this.Bh,this.Bl)),({h:s,l:o}=eb(s,o,this.Ch,this.Cl)),({h:c,l:l}=eb(c,l,this.Dh,this.Dl)),({h:d,l:h}=eb(d,h,this.Eh,this.El)),({h:u,l:f}=eb(u,f,this.Fh,this.Fl)),({h:p,l:b}=eb(p,b,this.Gh,this.Gl)),({h:g,l:m}=eb(g,m,this.Hh,this.Hl)),this.set(r,i,a,n,s,o,c,l,d,h,u,f,p,b,g,m)}roundClean(){ee(eC,eV)}destroy(){ee(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}let eU=es(()=>new eR);class eD extends en{oHash;iHash;blockLen;outputLen;finished=!1;destroyed=!1;constructor(e,t){super(),Z(e);let r=er(t);if(this.iHash=e.create(),"function"!=typeof this.iHash.update)throw Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,a=new Uint8Array(i);a.set(r.length>i?e.create().update(r).digest():r);for(let e=0;e<a.length;e++)a[e]^=54;this.iHash.update(a),this.oHash=e.create();for(let e=0;e<a.length;e++)a[e]^=106;this.oHash.update(a),ee(a)}update(e){return Q(this),this.iHash.update(e),this}digestInto(e){Q(this),J(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||=Object.create(Object.getPrototypeOf(this),{});let{oHash:t,iHash:r,finished:i,destroyed:a,blockLen:n,outputLen:s}=this;return e.finished=i,e.destroyed=a,e.blockLen=n,e.outputLen=s,e.oHash=t._cloneInto(e.oHash??void 0),e.iHash=r._cloneInto(e.iHash??void 0),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}let eB=(e,t,r)=>new eD(e,t).update(r).digest();function eL(e,t,r,i,a="sha512"){if("sha512"!==a)throw Error("Only sha512 is supported in this PBKDF2 implementation");try{let n=require("crypto");if("function"==typeof n.pbkdf2Sync){let s=Buffer.from(e),o=Buffer.from(t);return[...n.pbkdf2Sync(s,o,r,i,a)]}}catch{}return Array.from(function(e,t,r,i){let a;Z(e);let{c:n,dkLen:s}=Object.assign({dkLen:32},i);if(Y(n),Y(s),n<1)throw Error("iterations (c) should be >= 1");let o=ea(t),c=ea(r),l=new Uint8Array(s),d=eB.create(e,o),h=d._cloneInto().update(c),u=new Uint8Array(4),f=et(u),p=new Uint8Array(d.outputLen);for(let e=1,t=0;t<s;e++,t+=d.outputLen){let r=l.subarray(t,t+d.outputLen);f.setInt32(0,e,!1),(a=h._cloneInto(a)).update(u).digestInto(p),r.set(p.subarray(0,r.length));for(let e=1;e<n;e++){d._cloneInto(a).update(p).digestInto(p);for(let e=0;e<r.length;e++)r[e]^=p[e]}}return d.destroy(),h.destroy(),null!=a&&a.destroy(),ee(p),l}(eU,Uint8Array.from(e),Uint8Array.from(t),{c:r,dkLen:i}))}eB.create=(e,t)=>new eD(e,t);let eH=e=>e.length%2==1?"0"+e:e,eK=e=>{let t="";for(let r of e)t+=eH(r.toString(16));return t},eF=(e,t)=>{if(Array.isArray(e))return e.slice();if(void 0===e)return[];if("string"!=typeof e)return Array.from(e,e=>0|e);switch(t){case"hex":return eq(e);case"base64":return eM(e);default:return function(e){let t=[];for(let r=0;r<e.length;r++){let i=e.codePointAt(r);if(void 0===i)throw Error(`Index out of range: ${r}`);let a=i;a>65535?r++:a>=55296&&a<=57343&&(a=65533),a<=127?t.push(a):a<=2047?t.push(192|a>>6,128|63&a):a<=65535?t.push(224|a>>12,128|a>>6&63,128|63&a):t.push(240|a>>18,128|a>>12&63,128|a>>6&63,128|63&a)}return t}(e)}},eq=e=>{(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);let t=[];for(let r=0;r<e.length;r+=2)t.push(parseInt(e[r]+e[r+1],16));return t},eM=e=>{let t=[],r=0,i=0;for(let a of e.replace(/=+$/,""))r=r<<6|"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a),(i+=6)>=8&&(i-=8,t.push(r>>i&255),r&=(1<<i)-1);return t},e$=e=>{let t="",r=0;for(let i=0;i<e.length;i++){let a=e[i];if(r>0){r--;continue}if(a<=127)t+=String.fromCharCode(a);else if(a>=192&&a<=223)r=1,t+=String.fromCharCode((31&a)<<6|63&e[i+1]);else if(a>=224&&a<=239){let n=e[i+1];r=2,t+=String.fromCharCode((15&a)<<12|(63&n)<<6|63&e[i+2])}else if(a>=240&&a<=247){let n=e[i+1],s=e[i+2],o=e[i+3];r=3;let c=(7&a)<<18|(63&n)<<12|(63&s)<<6|63&o;t+=String.fromCharCode(55296+(c-65536>>10),56320+(c-65536&1023))}}return t},ez=(e,t)=>{switch(t){case"hex":return eK(e);case"utf8":return e$(e);default:return e}};function eW(e){let t,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i="";for(t=0;t<e.length;t+=3){let a=e[t],n=t+1<e.length?e[t+1]:0,s=t+2<e.length?e[t+2]:0,o=a>>2,c=(3&a)<<4|n>>4,l=(15&n)<<2|s>>6,d=63&s;i+=r.charAt(o)+r.charAt(c),i+=t+1<e.length?r.charAt(l):"=",i+=t+2<e.length?r.charAt(d):"="}return i}let ej="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",eG=e=>{if(""===e||"string"!=typeof e)throw Error(`Expected base58 string but got “${e}”`);let t=e.match(/[IOl0]/gmu);if(null!==t)throw Error(`Invalid base58 character “${t.join("")}”`);let r=e.match(/^1+/gmu),i=null!==r?r[0].length:0,a=(e.length-i)*(Math.log(58)/Math.log(256))+1>>>0;return[...new Uint8Array([...new Uint8Array(i),...(e.match(/./gmu)??[]).map(e=>ej.indexOf(e)).reduce((e,t)=>e=e.map(e=>{let r=58*e+t;return t=r>>8,r}),new Uint8Array(a)).reverse().filter((e=>t=>e=e||t)(!1))])]},eX=e=>{let t=Array(256).fill(-1);for(let e=0;e<ej.length;++e)t[ej.charCodeAt(e)]=e;let r=[];for(let i of e){let e=i;for(let i=0;i<r.length;++i){let a=(t[r[i]]<<8)+e;r[i]=ej.charCodeAt(a%58),e=a/58|0}for(;0!==e;)r.push(ej.charCodeAt(e%58)),e=e/58|0}for(let t of e)if(0!==t)break;else r.push(49);return r.reverse(),String.fromCharCode(...r)},eY=(e,t=[0])=>{let r=W([...t,...e]);return eX(r=[...t,...e,...r.slice(0,4)])},eJ=(e,t,r=1)=>{let i=eG(e),a=i.slice(0,r),n=i.slice(r,-4),s=[...a,...n];return s=W(s),i.slice(-4).forEach((e,t)=>{if(e!==s[t])throw Error("Invalid checksum")}),"hex"===t&&(a=eK(a),n=eK(n)),{prefix:a,data:n}};class eZ{bufs;length;constructor(e){for(let t of(this.bufs=void 0!==e?e:[],this.length=0,this.bufs))this.length+=t.length}getLength(){return this.length}toArray(){let e=Array(this.length),t=0;for(let r of this.bufs)for(let i of r)e[t++]=i;return e}write(e){return this.bufs.push(e),this.length+=e.length,this}writeReverse(e){let t=Array(e.length);for(let r=0;r<t.length;r++)t[r]=e[e.length-1-r];return this.bufs.push(t),this.length+=t.length,this}writeUInt8(e){let t=[,];return t[0]=e,this.write(t),this}writeInt8(e){let t=[,];return t[0]=255&e,this.write(t),this}writeUInt16BE(e){return this.bufs.push([e>>8&255,255&e]),this.length+=2,this}writeInt16BE(e){return this.writeUInt16BE(65535&e)}writeUInt16LE(e){return this.bufs.push([255&e,e>>8&255]),this.length+=2,this}writeInt16LE(e){return this.writeUInt16LE(65535&e)}writeUInt32BE(e){return this.bufs.push([e>>24&255,e>>16&255,e>>8&255,255&e]),this.length+=4,this}writeInt32BE(e){return this.writeUInt32BE(e>>>0)}writeUInt32LE(e){return this.bufs.push([255&e,e>>8&255,e>>16&255,e>>24&255]),this.length+=4,this}writeInt32LE(e){return this.writeUInt32LE(e>>>0)}writeUInt64BEBn(e){let t=e.toArray("be",8);return this.write(t),this}writeUInt64LEBn(e){let t=e.toArray("be",8);return this.writeReverse(t),this}writeUInt64LE(e){let t=new p(e).toArray("be",8);return this.writeReverse(t),this}writeVarIntNum(e){let t=eZ.varIntNum(e);return this.write(t),this}writeVarIntBn(e){let t=eZ.varIntBn(e);return this.write(t),this}static varIntNum(e){let t;if(e<0)return this.varIntBn(new p(e));if(e<253)t=[e];else if(e<65536)t=[253,255&e,e>>8&255];else if(e<0x100000000)t=[254,255&e,e>>8&255,e>>16&255,e>>24&255];else{let r=0|e,i=0|Math.floor(e/0x100000000);t=[255,255&r,r>>8&255,r>>16&255,r>>24&255,255&i,i>>8&255,i>>16&255,i>>24&255]}return t}static varIntBn(e){let t;if(e.isNeg()&&(e=e.add(e2)),e.ltn(253))t=[e.toNumber()];else if(e.ltn(65536)){let r=e.toNumber();t=[253,255&r,r>>8&255]}else if(e.lt(new p(0x100000000))){let r=e.toNumber();t=[254,255&r,r>>8&255,r>>16&255,r>>24&255]}else{let r=new eZ;r.writeUInt8(255),r.writeUInt64LEBn(e),t=r.toArray()}return t}}class eQ{bin;pos;length;constructor(e=[],t=0){this.bin=e,this.pos=t,this.length=e.length}eof(){return this.pos>=this.length}read(e=this.length){let t=this.pos,r=this.pos+e;return this.pos=r,this.bin.slice(t,r)}readReverse(e=this.length){let t=Array(e);for(let r=0;r<e;r++)t[r]=this.bin[this.pos+e-1-r];return this.pos+=e,t}readUInt8(){let e=this.bin[this.pos];return this.pos+=1,e}readInt8(){let e=this.bin[this.pos];return this.pos+=1,(128&e)!=0?e-256:e}readUInt16BE(){let e=this.bin[this.pos]<<8|this.bin[this.pos+1];return this.pos+=2,e}readInt16BE(){let e=this.readUInt16BE();return(32768&e)!=0?e-65536:e}readUInt16LE(){let e=this.bin[this.pos]|this.bin[this.pos+1]<<8;return this.pos+=2,e}readInt16LE(){let e=this.readUInt16LE();return(32768&e)!=0?e-65536:e}readUInt32BE(){let e=0x1000000*this.bin[this.pos]+(this.bin[this.pos+1]<<16|this.bin[this.pos+2]<<8|this.bin[this.pos+3]);return this.pos+=4,e}readInt32BE(){let e=this.readUInt32BE();return(0x80000000&e)!=0?e-0x100000000:e}readUInt32LE(){let e=(this.bin[this.pos]|this.bin[this.pos+1]<<8|this.bin[this.pos+2]<<16|this.bin[this.pos+3]<<24)>>>0;return this.pos+=4,e}readInt32LE(){let e=this.readUInt32LE();return(0x80000000&e)!=0?e-0x100000000:e}readUInt64BEBn(){let e=new p(this.bin.slice(this.pos,this.pos+8));return this.pos=this.pos+8,e}readUInt64LEBn(){return new p(this.readReverse(8))}readInt64LEBn(){let e=new p(this.readReverse(8));return e.gte(e1)&&(e=e.sub(e2)),e}readVarIntNum(e=!0){let t,r=this.readUInt8();switch(r){case 253:return this.readUInt16LE();case 254:return this.readUInt32LE();case 255:if((t=e?this.readInt64LEBn():this.readUInt64LEBn()).lte(new p(2).pow(new p(53))))return t.toNumber();throw Error("number too large to retain precision - use readVarIntBn");default:return r}}readVarInt(){switch(this.bin[this.pos]){case 253:return this.read(3);case 254:return this.read(5);case 255:return this.read(9);default:return this.read(1)}}readVarIntBn(){let e=this.readUInt8();switch(e){case 253:return new p(this.readUInt16LE());case 254:return new p(this.readUInt32LE());case 255:return this.readUInt64LEBn();default:return new p(e)}}}let e0=e=>{if(0===e.length)return e;let t=e[e.length-1];if((127&t)!=0)return e;if(1===e.length)return[];if((128&e[e.length-2])!=0)return e;for(let r=e.length-1;r>0;r--)if(0!==e[r-1])if((128&e[r-1])!=0)return e[r]=t,e.slice(0,r+1);else return e[r-1]|=t,e.slice(0,r);return[]},e1=new p(2).pow(new p(63)),e2=new p(2).pow(new p(64)),e8=(1n<<256n)-1n;function e3(e){let t=e>>256n;return t=(e=(e&e8)+(t<<32n)+977n*t)>>256n,(e=(e&e8)+(t<<32n)+977n*t)>=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn&&(e-=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn),e}let e6=e=>e3((e%0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn+0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn)%0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn),e4=(e,t)=>e>=t?e-t:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn-(t-e),e5=(e,t)=>e3(e*t),e7=e=>{let t=1n,r=0n,i=e6(e),a=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn;for(;i>1n;){let e=a/i;[t,r]=[r-t*e,t],[i,a]=[a-i*e,i]}return e6(t)},e9=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn+1n>>2n,te=BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),tt=BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"),tr=new Map,ti=e=>{let{X:t,Y:r,Z:i}=e;if(0n===r)return{X:0n,Y:1n,Z:0n};let a=e5(r,r),n=e5(4n,e5(t,a)),s=e5(3n,e5(t,t)),o=e4(e5(s,s),e5(2n,n)),c=e4(e5(s,e4(n,o)),e5(8n,e5(a,a)));return{X:o,Y:c,Z:e5(2n,e5(r,i))}},ta=(e,t)=>{if(0n===e.Z)return t;if(0n===t.Z)return e;let r=e5(e.Z,e.Z),i=e5(t.Z,t.Z),a=e5(e.X,i),n=e5(t.X,r),s=e5(e.Y,e5(i,t.Z)),o=e5(t.Y,e5(r,e.Z)),c=e4(n,a),l=e4(o,s);if(0n===c)return 0n===l?ti(e):{X:0n,Y:1n,Z:0n};let d=e5(c,c),h=e5(c,d),u=e5(a,d),f=e4(e4(e5(l,l),h),e5(2n,u)),p=e4(e5(l,e4(u,f)),e5(s,h));return{X:f,Y:p,Z:e5(c,e5(e.Z,t.Z))}},tn=e=>0n===e.Z?e:{X:e.X,Y:0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn-e.Y,Z:e.Z},ts=(e,t,r=5)=>{let i,a=`${r}:${t.x.toString(16)}:${t.y.toString(16)}`,n=tr.get(a);if(void 0===n){let e=1<<r-1;n=Array(e),i={X:t.x,Y:t.y,Z:1n},n[0]=i;let s=ti(i);for(let t=1;t<e;t++)n[t]=ta(n[t-1],s);tr.set(a,n)}else i=n[0];let s=[],o=1n<<BigInt(r),c=o>>1n,l=e;for(;l>0n;)if((1n&l)===0n)s.push(0),l>>=1n;else{let e=l&o-1n;e>c&&(e-=o),s.push(Number(e)),l-=e,l>>=1n}let d={X:0n,Y:1n,Z:0n};for(let e=s.length-1;e>=0;e--){d=ti(d);let t=s[e];if(0!==t){let e=Math.abs(t)>>1;d=ta(d,t>0?n[e]:tn(n[e]))}}return d},to=e=>{let t=e%0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;return t<0n&&(t+=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n),t},tc=(e,t)=>to(e*t),tl=e=>{let t=1n,r=0n,i=to(e),a=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;for(;i>1n;){let e=a/i;[t,r]=[r-t*e,t],[i,a]=[a-i*e,i]}return to(t)};class td extends w{x;y;inf;static fromDER(e){if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==64){if(6===e[0]){if(e[e.length-1]%2!=0)throw Error("Point string value is wrong length")}else if(7===e[0]&&e[e.length-1]%2!=1)throw Error("Point string value is wrong length");return new td(e.slice(1,33),e.slice(33,65))}if((2===e[0]||3===e[0])&&e.length-1==32)return td.fromX(e.slice(1,33),3===e[0]);throw Error("Unknown point format")}static fromString(e){let t=eF(e,"hex");return td.fromDER(t)}static fromX(e,t){let r,i=p.isBN(e)?BigInt("0x"+e.toString(16)):"string"==typeof e?BigInt("0x"+e):Array.isArray(e)?BigInt("0x"+eK(e)):BigInt(e),a=(e=>{let t=((e,t)=>{let r=1n;e=e6(e);let i=t;for(;i>0n;)(1n&i)===1n&&(r=e5(r,e)),e=e5(e,e),i>>=1n;return r})(e,e9);return e5(t,t)===e6(e)?t:null})(e3(e5(e5(r=i=e6(i),r),i)+7n));if(null===a)throw Error("Invalid point");let n=a;return(1n&n)!==(t?1n:0n)&&(n=e4(0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,n)),new td(new p(i.toString(16),16),new p(n.toString(16),16))}static fromJSON(e,t){"string"==typeof e&&(e=JSON.parse(e));let r=new td(e[0],e[1],t);if("object"!=typeof e[2])return r;let i=e=>new td(e[0],e[1],t),a=e[2];return r.precomputed={beta:null,doubles:"object"==typeof a.doubles&&null!==a.doubles?{step:a.doubles.step,points:[r].concat(a.doubles.points.map(i))}:void 0,naf:"object"==typeof a.naf&&null!==a.naf?{wnd:a.naf.wnd,points:[r].concat(a.naf.points.map(i))}:void 0},r}constructor(e,t,r=!0){super("affine"),this.precomputed=null,null===e&&null===t?(this.x=null,this.y=null,this.inf=!0):(p.isBN(e)||(e=new p(e,16)),this.x=e,p.isBN(t)||(t=new p(t,16)),this.y=t,r&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),null===this.x.red&&(this.x=this.x.toRed(this.curve.red)),null===this.y.red&&(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}validate(){return this.curve.validate(this)}encode(e=!0,t){let r,i=this.curve.p.byteLength(),a=this.getX().toArray("be",i);return(r=e?[this.getY().isEven()?2:3].concat(a):[4].concat(a,this.getY().toArray("be",i)),"hex"!==t)?r:eK(r)}toString(){return this.encode(!0,"hex")}toJSON(){return null==this.precomputed?[this.x,this.y]:[this.x,this.y,"object"==typeof this.precomputed&&null!==this.precomputed?{doubles:null!=this.precomputed.doubles?{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)}:void 0,naf:null!=this.precomputed.naf?{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}:void 0}:void 0]}inspect(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+(this.x?.fromRed()?.toString(16,2)??"undefined")+" y: "+(this.y?.fromRed()?.toString(16,2)??"undefined")+">"}isInfinity(){return this.inf}add(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e)||this.x?.cmp(e.x??new p(0))===0)return new td(null,null);let t=ta({X:BigInt("0x"+this.x.fromRed().toString(16)),Y:BigInt("0x"+this.y.fromRed().toString(16)),Z:1n},{X:BigInt("0x"+e.x.fromRed().toString(16)),Y:BigInt("0x"+e.y.fromRed().toString(16)),Z:1n});if(0n===t.Z)return new td(null,null);let r=e7(t.Z),i=e5(r,r),a=e5(t.X,i),n=e5(t.Y,e5(i,r));return new td(a.toString(16),n.toString(16))}dbl(){if(this.inf)return this;if(null===this.x||null===this.y)throw Error("Point coordinates cannot be null");let e=BigInt("0x"+this.x.fromRed().toString(16)),t=BigInt("0x"+this.y.fromRed().toString(16));if(0n===t)return new td(null,null);let r=ti({X:e,Y:t,Z:1n}),i=e7(r.Z),a=e5(i,i),n=e5(r.X,a),s=e5(r.Y,e5(a,i));return new td(n.toString(16),s.toString(16))}getX(){return(this.x??new p(0)).fromRed()}getY(){return(this.y??new p(0)).fromRed()}mul(e){let t,r;if(p.isBN(e)||(e=new p(e,16)),this.inf)return this;let i=BigInt("0x"+e.toString(16)),a=i<0n;if(a&&(i=-i),0n===(i=e6(i)))return new td(null,null);if(null===this.x||null===this.y)throw Error("Point coordinates cannot be null");this===this.curve.g?(t=te,r=tt):(t=BigInt("0x"+this.x.fromRed().toString(16)),r=BigInt("0x"+this.y.fromRed().toString(16)));let n=ts(i,{x:t,y:r});if(0n===n.Z)return new td(null,null);let s=e7(n.Z),o=e5(s,s),c=e5(n.X,o),l=e5(n.Y,e5(o,s)),d=new td(new p(c.toString(16),16),new p(l.toString(16),16));return a?d.neg():d}mulAdd(e,t,r){return this._endoWnafMulAdd([this,t],[e,r])}jmulAdd(e,t,r){return this._endoWnafMulAdd([this,t],[e,r],!0)}eq(e){return this===e||this.inf===e.inf&&(this.inf||0===(this.x??new p(0)).cmp(e.x??new p(0))&&0===(this.y??new p(0)).cmp(e.y??new p(0)))}neg(e){if(this.inf)return this;let t=new td(this.x,(this.y??new p(0)).redNeg());if(!0===e&&null!=this.precomputed){let e=this.precomputed;t.precomputed={naf:null!=e.naf?{wnd:e.naf.wnd,points:e.naf.points.map(e=>e.neg())}:void 0,doubles:null!=e.doubles?{step:e.doubles.step,points:e.doubles.points.map(e=>e.neg())}:void 0,beta:void 0}}return t}dblp(e){let t=this;for(let r=0;r<e;r++)t=t.dbl();return t}toJ(){return this.inf?new I(null,null,null):new I(this.x,this.y,this.curve.one)}_getBeta(){if("object"!=typeof this.curve.endo)return;let e=this.precomputed;if("object"==typeof e&&null!==e&&"object"==typeof e.beta&&null!==e.beta)return e.beta;let t=new td((this.x??new p(0)).redMul(this.curve.endo.beta),this.y);if(null!=e){let r=this.curve,i=e=>{if(null===e.x)throw Error("p.x is null");if(void 0===r.endo||null===r.endo)throw Error("curve.endo is undefined");return new td(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:null!=e.naf?{wnd:e.naf.wnd,points:e.naf.points.map(i)}:void 0,doubles:null!=e.doubles?{step:e.doubles.step,points:e.doubles.points.map(i)}:void 0}}return t}_fixedNafMul(e){if("object"!=typeof this.precomputed||null===this.precomputed)throw Error("_fixedNafMul requires precomputed values for the point");let t=this._getDoubles(),r=this.curve.getNAF(e,1,this.curve._bitLength),i=(1<<t.step+1)-(t.step%2==0?2:1);i/=3;let a=[];for(let e=0;e<r.length;e+=t.step){let i=0;for(let a=e+t.step-1;a>=e;a--)i=(i<<1)+r[a];a.push(i)}let n=new I(null,null,null),s=new I(null,null,null);for(let e=i;e>0;e--){for(let r=0;r<a.length;r++){let i=a[r];i===e?s=s.mixedAdd(t.points[r]):i===-e&&(s=s.mixedAdd(t.points[r].neg()))}n=n.add(s)}return n.toP()}_wnafMulAdd(e,t,r,i,a){let n=this.curve._wnafT1.map(e=>e.toNumber()),s=this.curve._wnafT2.map(()=>[]),o=this.curve._wnafT3.map(()=>[]),c=0;for(let r=0;r<i;r++){let i=t[r]._getNAFPoints(e);n[r]=i.wnd,s[r]=i.points}for(let e=i-1;e>=1;e-=2){let i=e-1,a=e;if(1!==n[i]||1!==n[a]){o[i]=this.curve.getNAF(r[i],n[i],this.curve._bitLength),o[a]=this.curve.getNAF(r[a],n[a],this.curve._bitLength),c=Math.max(o[i].length,c),c=Math.max(o[a].length,c);continue}let l=[t[i],null,null,t[a]];0===(t[i].y??new p(0)).cmp(t[a].y??new p(0))?(l[1]=t[i].add(t[a]),l[2]=t[i].toJ().mixedAdd(t[a].neg())):0===(t[i].y??new p(0)).cmp((t[a].y??new p(0)).redNeg())?(l[1]=t[i].toJ().mixedAdd(t[a]),l[2]=t[i].add(t[a].neg())):(l[1]=t[i].toJ().mixedAdd(t[a]),l[2]=t[i].toJ().mixedAdd(t[a].neg()));let d=[-3,-1,-5,-7,0,7,5,1,3],h=this.curve.getJSF(r[i],r[a]);c=Math.max(h[0].length,c),o[i]=Array(c),o[a]=Array(c);for(let e=0;e<c;e++){let t=0|h[0][e],r=0|h[1][e];o[i][e]=d[(t+1)*3+(r+1)],o[a][e]=0,s[i]=l}}let l=new I(null,null,null),d=this.curve._wnafT4;for(let e=c;e>=0;e--){let t=0;for(;e>=0;){let r=!0;for(let t=0;t<i;t++)d[t]=new p("number"==typeof o[t][e]?o[t][e]:0),d[t].isZero()||(r=!1);if(!r)break;t++,e--}if(e>=0&&t++,l=l.dblp(t),e<0)break;let r=new p(1),a=new p(2);for(let e=0;e<i;e++){let t,i=d[e];0!==i.cmpn(0)&&(l="affine"===(t=i.isNeg()?s[e][i.neg().sub(r).div(a).toNumber()].neg():s[e][i.sub(r).div(a).toNumber()]).type?l.mixedAdd(t):l.add(t))}}for(let e=0;e<i;e++)s[e]=[];return!0===a?l:l.toP()}_endoWnafMulAdd(e,t,r){let i,a=Array(2*e.length),n=Array(2*e.length);for(i=0;i<e.length;i++){let r=this.curve._endoSplit(t[i]),s=e[i],o=s._getBeta()??new td(null,null);0!==r.k1.negative&&(r.k1.ineg(),s=s.neg(!0)),0!==r.k2.negative&&(r.k2.ineg(),o=o.neg(!0)),a[2*i]=s,a[2*i+1]=o,n[2*i]=r.k1,n[2*i+1]=r.k2}let s=this._wnafMulAdd(1,a,n,2*i,r);for(let e=0;e<2*i;e++)a[e]=null,n[e]=null;return s}_hasDoubles(e){if(null==this.precomputed)return!1;let t=this.precomputed.doubles;return"object"==typeof t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)}_getDoubles(e,t){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.doubles&&null!==this.precomputed.doubles)return this.precomputed.doubles;let r=[this],i=this;for(let a=0;a<(t??0);a+=e??1){for(let t=0;t<(e??1);t++)i=i.dbl();r.push(i)}return{step:e??1,points:r}}_getNAFPoints(e){if("object"==typeof this.precomputed&&null!==this.precomputed&&"object"==typeof this.precomputed.naf&&null!==this.precomputed.naf)return this.precomputed.naf;let t=[this],r=(1<<e)-1,i=1===r?null:this.dbl();for(let e=1;e<r;e++)null!==i&&(t[e]=t[e-1].add(i));return{wnd:e,points:t}}}class th{p;red;redN;zero;one;two;g;n;a;b;tinv;zeroA;threeA;endo;_endoWnafT1;_endoWnafT2;_wnafT1;_wnafT2;_wnafT3;_wnafT4;_bitLength;static assert(e,t="Elliptic curve assertion failed"){if(!e)throw Error(t)}getNAF(e,t,r){let i=Array(Math.max(e.bitLength(),r)+1);i.fill(0);let a=1<<t+1,n=e.clone();for(let e=0;e<i.length;e++){let t,r=n.andln(a-1);n.isOdd()?(t=r>(a>>1)-1?(a>>1)-r:r,n.isubn(t)):t=0,i[e]=t,n.iushrn(1)}return i}getJSF(e,t){let r=[[],[]];e=e.clone(),t=t.clone();let i=0,a=0;for(;e.cmpn(-i)>0||t.cmpn(-a)>0;){let n,s,o=e.andln(3)+i&3,c=t.andln(3)+a&3;if(3===o&&(o=-1),3===c&&(c=-1),(1&o)==0)n=0;else{let t=e.andln(7)+i&7;n=(3===t||5===t)&&2===c?-o:o}if(r[0].push(n),(1&c)==0)s=0;else{let e=t.andln(7)+a&7;s=(3===e||5===e)&&2===o?-c:c}r[1].push(s),2*i===n+1&&(i=1-i),2*a===s+1&&(a=1-a),e.iushrn(1),t.iushrn(1)}return r}static cachedProperty(e,t,r){let i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}}static parseBytes(e){return"string"==typeof e?eF(e,"hex"):e}static intFromLE(e){return new p(e,"hex","le")}constructor(){if(void 0!==e)return e;e=this;let t={prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",{doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}]};this.p=new p(t.p,16),this.red=new m(t.prime),this.zero=new p(0).toRed(this.red),this.one=new p(1).toRed(this.red),this.two=new p(2).toRed(this.red),this.n=new p(t.n,16),this.g=td.fromJSON(t.g,t.gRed),this._wnafT1=[,,,,],this._wnafT2=[,,,,],this._wnafT3=[,,,,],this._wnafT4=[,,,,],this._bitLength=this.n.bitLength(),this.redN=this.n.toRed(this.red),this.a=new p(t.a,16).toRed(this.red),this.b=new p(t.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(t),this._endoWnafT1=[,,,,],this._endoWnafT2=[,,,,]}_getEndomorphism(e){let t,r,i;if(this.zeroA&&1===this.p.modrn(3)){if(void 0!==e.beta)t=new p(e.beta,16).toRed(this.red);else{let e=this._getEndoRoots(this.p);if(null===e)throw Error("Failed to get endomorphism roots for beta.");t=(t=0>e[0].cmp(e[1])?e[0]:e[1]).toRed(this.red)}if(void 0!==e.lambda)r=new p(e.lambda,16);else{let e=this._getEndoRoots(this.n);if(null===e)throw Error("Failed to get endomorphism roots for lambda.");if(null==this.g)throw Error("Curve generator point (g) is not defined.");let i=this.g.mul(e[0])?.x,a=null!=this.g.x?this.g.x.redMul(t):void 0;if(null!=i&&null!=a&&0===i.cmp(a))r=e[0];else{if(r=e[1],null==this.g)throw Error("Curve generator point (g) is not defined.");let i=this.g.mul(r)?.x,a=null!=this.g.x?this.g.x.redMul(t):void 0;if(null==i||null==a)throw Error("Lambda computation failed: g.mul(lambda).x or g.x.redMul(beta) is undefined.");th.assert(0===i.cmp(a),"Lambda selection does not match computed beta.")}}return i="object"==typeof e.basis&&null!==e.basis?e.basis.map(function(e){return{a:new p(e.a,16),b:new p(e.b,16)}}):this._getEndoBasis(r),{beta:t,lambda:r,basis:i}}}_getEndoRoots(e){let t=e===this.p?this.red:new y(e),r=new p(2).toRed(t).redInvm(),i=r.redNeg(),a=new p(3).toRed(t).redNeg().redSqrt().redMul(r);return[i.redAdd(a).fromRed(),i.redSub(a).fromRed()]}_getEndoBasis(e){let t,r,i,a,n,s,o=this.n.ushrn(Math.floor(this.n.bitLength()/2)),c=e,l=this.n.clone(),d=new p(1),h=new p(0),u=new p(0),f=new p(1),b=new p(0),g=0,m=new p(0),y=new p(0);for(;0!==c.cmpn(0);){let e=l.div(c);m=l.sub(e.mul(c)),y=u.sub(e.mul(d));let n=f.sub(e.mul(h));if(void 0===i&&0>m.cmp(o))t=b.neg(),r=d,i=m.neg(),a=y;else if(void 0!==i&&2==++g)break;b=m,l=c,c=m,u=d,d=y,f=h,h=n}if(void 0===t||void 0===r||void 0===i||void 0===a)throw Error("Failed to compute Endo Basis values");n=m.neg(),s=y;let w=i.sqr().add(a.sqr());return n.sqr().add(s.sqr()).cmp(w)>=0&&(n=t,s=r),0!==i.negative&&(i=i.neg(),a=a.neg()),0!==n.negative&&(n=n.neg(),s=s.neg()),[{a:i,b:a},{a:n,b:s}]}_endoSplit(e){if(null==this.endo)throw Error("Endomorphism is not defined.");let t=this.endo.basis,r=t[0],i=t[1],a=i.b.mul(e).divRound(this.n),n=r.b.neg().mul(e).divRound(this.n),s=a.mul(r.a),o=n.mul(i.a),c=a.mul(r.b),l=n.mul(i.b);return{k1:e.sub(s).sub(o),k2:c.add(l).neg()}}validate(e){if(e.inf)return!0;let t=e.x,r=e.y;if(null===t||null===r)throw Error("Point coordinates cannot be null");let i=this.a.redMul(t),a=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(a).cmpn(0)}}class tu{r;s;static fromDER(e,t){let r=(e,t)=>{let r=e[t.place++];if((128&r)==0)return r;throw Error("Invalid DER entity length")};e=eF(e,t);let i=new class{place;constructor(){this.place=0}};if(48!==e[i.place++])throw Error("Signature DER must start with 0x30");if(r(e,i)+i.place!==e.length||2!==e[i.place++])throw Error("Signature DER invalid");let a=r(e,i),n=e.slice(i.place,a+i.place);if(i.place+=a,2!==e[i.place++])throw Error("Signature DER invalid");let s=r(e,i);if(e.length!==s+i.place)throw Error("Invalid R-length in signature DER");let o=e.slice(i.place,s+i.place);if(0===n[0])if((128&n[1])!=0)n=n.slice(1);else throw Error("Invalid R-value in signature DER");if(0===o[0])if((128&o[1])!=0)o=o.slice(1);else throw Error("Invalid S-value in signature DER");return new tu(new p(n),new p(o))}static fromCompact(e,t){if(65!==(e=eF(e,t)).length)throw Error("Invalid Compact Signature");let r=e[0];if(r<27||r>=35)throw Error("Invalid Compact Byte");return new tu(new p(e.slice(1,33)),new p(e.slice(33,65)))}constructor(e,t){this.r=e,this.s=t}verify(e,t,r){return tI(new p($(e,r),16),this,t)}toString(e){return this.toDER(e)}toDER(e){let t=(e,t)=>{if(t<128)e.push(t);else throw Error("len must be < 0x80")},r=e=>{let t=0,r=e.length-1;for(;0===e[t]&&(128&e[t+1])==0&&t<r;)t++;return 0===t?e:e.slice(t)},i=this.r.toArray(),a=this.s.toArray();for((128&i[0])!=0&&(i=[0].concat(i)),(128&a[0])!=0&&(a=[0].concat(a)),i=r(i),a=r(a);0===a[0]&&(128&a[1])==0;)a=a.slice(1);let n=[2];t(n,i.length),(n=n.concat(i)).push(2),t(n,a.length);let s=n.concat(a),o=[48];return(t(o,s.length),o=o.concat(s),"hex"===e)?eK(o):"base64"===e?eW(o):o}toCompact(e,t,r){if(e<0||e>3)throw Error("Invalid recovery param");if("boolean"!=typeof t)throw Error("Invalid compressed param");let i=27+e;t&&(i+=4);let a=[i];return(a=(a=a.concat(this.r.toArray("be",32))).concat(this.s.toArray("be",32)),"hex"===r)?eK(a):"base64"===r?eW(a):a}RecoverPublicKey(e,t){let r=this.r,i=this.s,a=new th,n=a.n,s=a.g,o=0!=e>>1?r.add(n):r,c=td.fromX(o,(1&e)!=0);if(!c.mul(n).isInfinity())throw Error("nR is not at infinity");let l=t.neg().umod(n),d=r.invm(n),h=d.mul(i).umod(n),u=d.mul(l).umod(n),f=new tv(s.mul(u).add(c.mul(h)));return f.validate(),f}CalculateRecoveryFactor(e,t){for(let r=0;r<4;r++){let i;try{i=this.RecoverPublicKey(r,t)}catch{continue}if(e.eq(i))return r}throw Error("Unable to find valid recovery factor")}}class tf{K;V;constructor(e,t){if(e=eF(e,"hex"),t=eF(t,"hex"),e.length<32)throw Error("Not enough entropy. Minimum is 256 bits");let r=e.concat(t);this.K=Array(32),this.V=Array(32);for(let e=0;e<32;e++)this.K[e]=0,this.V[e]=1;this.update(r)}hmac(){return new H(this.K)}update(e){let t=this.hmac().update(this.V).update([0]);void 0!==e&&(t=t.update(e)),this.K=t.digest(),this.V=this.hmac().update(this.V).digest(),void 0!==e&&(this.K=this.hmac().update(this.V).update([1]).update(e).digest(),this.V=this.hmac().update(this.V).digest())}generate(e){let t=[];for(;t.length<e;)this.V=this.hmac().update(this.V).digest(),t=t.concat(this.V);let r=t.slice(0,e);return this.update(),eK(r)}}function tp(e,t,r=new th){let i=8*e.byteLength()-r.n.bitLength();return(i>0&&e.iushrn(i),null===t&&e.cmp(r.n)>=0)?e.sub(r.n):e}let tb=new th,tg=tb.n.byteLength(),tm=tb.n.subn(1),ty=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n>>1n,tw=(e,t,r=!1,i)=>{let a=BigInt("0x"+(e=tp(e)).toString(16)),n=BigInt("0x"+t.toString(16)),s=new tf(t.toArray("be",tg),e.toArray("be",tg));for(let e=0;;e++){let t="function"==typeof i?i(e):p.isBN(i)?i:new p(s.generate(tg),16);if(null==t)throw Error("k is undefined");if(0>=(t=tp(t,!0)).cmpn(1)||t.cmp(tm)>=0){if(p.isBN(i))throw Error("Invalid fixed custom K value (must be >1 and <N‑1)");continue}let o=BigInt("0x"+t.toString(16)),c=ts(o,{x:te,y:tt});if(0n===c.Z){if(p.isBN(i))throw Error("Invalid fixed custom K value (k\xb7G at infinity)");continue}let l=e7(c.Z),d=e5(l,l),h=to(e5(c.X,d));if(0n===h){if(p.isBN(i))throw Error("Invalid fixed custom K value (r == 0)");continue}let u=tl(o),f=to(a+tc(h,n)),b=tc(u,f);if(0n===b){if(p.isBN(i))throw Error("Invalid fixed custom K value (s == 0)");continue}return r&&b>ty&&(b=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n-b),new tu(new p(h.toString(16),16),new p(b.toString(16),16))}},tI=(e,t,r)=>{let i=BigInt("0x"+e.toString(16));if(null==r.x||null==r.y)throw Error("Invalid public key: missing coordinates.");let a={x:BigInt("0x"+r.x.toString(16)),y:BigInt("0x"+r.y.toString(16))},{r:n,s}={r:BigInt("0x"+t.r.toString(16)),s:BigInt("0x"+t.s.toString(16))};if(n<=0n||n>=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n||s<=0n||s>=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n)return!1;let o=tl(s);if(0n===o)return!1;let c=tc(i,o),l=tc(n,o),d=ta(ts(c,{x:te,y:tt}),ts(l,a));if(0n===d.Z)return!1;let h=e7(d.Z),u=e5(h,h);return to(e5(d.X,u))===n};class tv extends td{static fromPrivateKey(e){let t=new th().g.mul(e);return new tv(t.x,t.y)}static fromString(e){let t=td.fromString(e);return new tv(t.x,t.y)}static fromDER(e){let t=td.fromDER(e);return new tv(t.x,t.y)}constructor(e,t=null,r=!0){if(e instanceof td)super(e.getX(),e.getY());else{if(null===t&&r&&"string"==typeof e&&(66===e.length||130===e.length))throw Error('You are using the "new PublicKey()" constructor with a DER hex string. You need to use "PublicKey.fromString()" instead.');super(e,t,r)}}deriveSharedSecret(e){if(!this.validate())throw Error("Public key not valid for ECDH secret derivation");return this.mul(e)}verify(e,t,r){return tI(new p($(e,r),16),t,this)}toDER(e){return"hex"===e?this.encode(!0,e):this.encode(!0)}toHash(e){let t=j(this.encode(!0));return"hex"===e?eK(t):t}toAddress(e=[0]){if("string"==typeof e)if("testnet"===e||"test"===e)e=[111];else if("mainnet"===e||"main"===e)e=[0];else throw Error(`Invalid prefix ${e}`);return eY(this.toHash(),e)}deriveChild(e,t,r,i){let a;if("function"==typeof i){let t=i(e,this);void 0!==t?a=t:(a=this.deriveSharedSecret(e),"function"==typeof r&&r(e,this,a))}else a=this.deriveSharedSecret(e);let n=eF(t,"utf8"),s=G(a.encode(!0),n),o=new th().g.mul(new p(s)),c=this.add(o);return new tv(c.x,c.y)}static fromMsgHashAndCompactSignature(e,t,r){let i=eF(t,r);if(65!==i.length)throw Error("Invalid Compact Signature");let a=i[0];if(a<27||a>=35)throw Error("Invalid Compact Byte");let n=i[0]-27;return n>3&&(n-=4),new tu(new p(i.slice(1,33)),new p(i.slice(33,65))).RecoverPublicKey(n,e)}}class tk{_rand;constructor(){let e=()=>{throw Error("No secure random number generator is available in this environment.")};if(this._rand=e,"object"==typeof self)self.crypto?.getRandomValues?this._rand=e=>{let t=new Uint8Array(e);return self.crypto.getRandomValues(t),[...t]}:this._rand=e;else try{let e=require("crypto");"function"==typeof e.randomBytes&&(this._rand=t=>[...e.randomBytes(t)])}catch{this._rand=e}}generate(e){return this._rand(e)}}let tS=null,tx=e=>(null==tS&&(tS=new tk),tS.generate(e));class tP{x;y;constructor(e,t){let r=new th().p;this.x=e.umod(r),this.y=t.umod(r)}toString(){return eX(this.x.toArray())+"."+eX(this.y.toArray())}static fromString(e){let[t,r]=e.split(".");return new tP(new p(eG(t)),new p(eG(r)))}}class tE{points;threshold;constructor(e,t){this.points=e,this.threshold=t??e.length}static fromPrivateKey(e,t){let r=new th().p,i=[new tP(new p(0),new p(e.toArray()))];for(let e=1;e<t;e++){let e=new p(tx(32)).umod(r),t=new p(tx(32)).umod(r);i.push(new tP(e,t))}return new tE(i)}valueAt(e){let t=new th().p,r=new p(0);for(let i=0;i<this.threshold;i++){let a=this.points[i].y;for(let r=0;r<this.threshold;r++)if(i!==r){let n=this.points[r].x,s=this.points[i].x,o=e.sub(n).umod(t),c=s.sub(n).umod(t).invm(t),l=o.mul(c).umod(t);a=a.mul(l).umod(t)}r=r.add(a).umod(t)}return r}}class tN{points;threshold;integrity;constructor(e,t,r){this.points=e,this.threshold=t,this.integrity=r}static fromBackupFormat(e){let t=0,r="";return new tN(e.map((e,i)=>{let a=e.split(".");if(4!==a.length)throw Error("Invalid share format in share "+i.toString()+'. Expected format: "x.y.t.i" - received '+e);let[n,s,o,c]=a;if(void 0===o)throw Error("Threshold not found in share "+i.toString());if(void 0===c)throw Error("Integrity not found in share "+i.toString());let l=parseInt(o);if(0!==i&&t!==l)throw Error("Threshold mismatch in share "+i.toString());if(0!==i&&r!==c)throw Error("Integrity mismatch in share "+i.toString());return t=l,r=c,tP.fromString([n,s].join("."))}),t,r)}toBackupFormat(){return this.points.map(e=>e.toString()+"."+this.threshold.toString()+"."+this.integrity)}}class tO extends p{static fromRandom(){return new tO(tx(32))}static fromString(e,t="hex"){return new tO(super.fromString(e,t).toArray())}static fromHex(e){return new tO(super.fromHex(e,"big"))}static fromWif(e,t=1){let r=eJ(e,void 0,t);if(33!==r.data.length)throw Error("Invalid WIF length");if(1!==r.data[32])throw Error("Invalid WIF padding");return new tO(r.data.slice(0,32))}constructor(e=0,t=10,r="be",i="apply"){if(e instanceof p?(super(),e.copy(this)):super(e,t,r),"nocheck"!==i){let e=this.checkInField();if(!e.inField){if("error"===i)throw Error("Input is out of field");p.move(this,e.modN)}}}checkInField(){let e=new th,t=this.mod(e.n);return{inField:0===this.cmp(t),modN:t}}isValid(){return this.checkInField().inField}sign(e,t,r=!0,i){return tw(new p($(e,t),16),this,r,i)}verify(e,t,r){return tI(new p($(e,r),16),t,this.toPublicKey())}toPublicKey(){let e=new th().g.mul(this);return new tv(e.x,e.y)}toWif(e=[128]){if(!this.isValid())throw Error("Value is out of field");return eY([...this.toArray("be",32),1],e)}toAddress(e=[0]){return this.toPublicKey().toAddress(e)}toHex(){return super.toHex(32)}toString(e="hex",t=64){return super.toString(e,t)}deriveSharedSecret(e){if(!e.validate())throw Error("Public key not valid for ECDH secret derivation");return e.mul(this)}deriveChild(e,t,r,i){let a;if("function"==typeof i){let t=i(this,e);void 0!==t?a=t:(a=this.deriveSharedSecret(e),"function"==typeof r&&r(this,e,a))}else a=this.deriveSharedSecret(e);let n=eF(t,"utf8"),s=G(a.encode(!0),n),o=new th;return new tO(this.add(new p(s)).mod(o.n).toArray())}toKeyShares(e,t){if("number"!=typeof e||"number"!=typeof t)throw Error("threshold and totalShares must be numbers");if(e<2)throw Error("threshold must be at least 2");if(t<2)throw Error("totalShares must be at least 2");if(e>t)throw Error("threshold should be less than or equal to totalShares");let r=tE.fromPrivateKey(this,e),i=[];for(let e=0;e<t;e++){let e=new p(tO.fromRandom().toArray()),t=r.valueAt(e);i.push(new tP(e,t))}return new tN(i,e,this.toPublicKey().toHash("hex").slice(0,8))}toBackupShares(e,t){return this.toKeyShares(e,t).toBackupFormat()}static fromBackupShares(e){return tO.fromKeyShares(tN.fromBackupFormat(e))}static fromKeyShares(e){let{points:t,threshold:r,integrity:i}=e;if(r<2)throw Error("threshold must be at least 2");if(t.length<r)throw Error(`At least ${r} shares are required to reconstruct the private key`);for(let e=0;e<r;e++)for(let i=e+1;i<r;i++)if(t[e].x.eq(t[i].x))throw Error("Duplicate share detected, each must be unique.");let a=new tO(new tE(t,r).valueAt(new p(0)).toArray());if(a.toPublicKey().toHash("hex").slice(0,8)!==i)throw Error("Integrity hash mismatch");return a}}let t_=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),tA=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]].map(e=>new Uint8Array(e)),tT=new Uint8Array(256),tC=new Uint8Array(256);for(let e=0;e<256;e++){let t=(e<<1^27*((128&e)!=0))&255;tT[e]=t,tC[e]=t^e}function tV(e,t,r){for(let i=0;i<4;i++){let a=t[r+i];for(let t=0;t<4;t++)e[t][i]^=a[t]}}function tR(e){for(let t=0;t<4;t++)e[t]=t_[e[t]]}function tU(e,t){let r,i,a,n,s=[[],[],[],[]],o=[],c=Array.from(t);if(c.length<=16){for(;c.length<16;)c.unshift(0);n=11}else if(c.length<=24){for(;c.length<24;)c.unshift(0);n=13}else if(t.length<=32){for(;c.length<32;)c.unshift(0);n=15}else throw Error("Illegal key length: "+String(t.length));let l=function(e,t){let r=t.length/4,i=[];for(let e=0;e<t.length;e++)e%4==0&&i.push([]),i[e>>2].push(t[e]);for(let t=r;t<4*e;t++){i[t]=[];let e=i[t-1].slice();if(t%r==0){let i=e[0];e[0]=e[1],e[1]=e[2],e[2]=e[3],e[3]=i,tR(e);let a=tA[t/r];for(let t=0;t<4;t++)e[t]^=a[t]}else r>6&&t%r==4&&tR(e);for(let a=0;a<4;a++)i[t][a]=i[t-r][a]^e[a]}return i}(n,c);for(let t=0;t<4;t++)s[0][t]=e[4*t],s[1][t]=e[4*t+1],s[2][t]=e[4*t+2],s[3][t]=e[4*t+3];for(tV(s,l,0),a=1;a<n;a++){for(let e=0;e<4;e++)for(let t=0;t<4;t++)s[e][t]=t_[s[e][t]];!function(e){let t=e[1][0];e[1][0]=e[1][1],e[1][1]=e[1][2],e[1][2]=e[1][3],e[1][3]=t,t=e[2][0];let r=e[2][1];e[2][0]=e[2][2],e[2][1]=e[2][3],e[2][2]=t,e[2][3]=r,t=e[3][3],e[3][3]=e[3][2],e[3][2]=e[3][1],e[3][1]=e[3][0],e[3][0]=t}(s),a+1<n&&function(e){for(let t=0;t<4;t++){let r=e[0][t],i=e[1][t],a=e[2][t],n=e[3][t];e[0][t]=tT[r]^tC[i]^a^n,e[1][t]=r^tT[i]^tC[a]^n,e[2][t]=r^i^tT[a]^tC[n],e[3][t]=tC[r]^i^a^tT[n]}}(s),tV(s,l,4*a)}for(r=0;r<4;r++)for(i=0;i<4;i++)o.push(s[i][r]);return o}let tD=function(e){return[(0xff000000&e)>>>24,(0xff0000&e)>>16,(65280&e)>>8,255&e]},tB=function(e){return Array(e).fill(0)},tL=[225].concat(tB(15)),tH=function(e,t){for(let r=0;r<e.length;r++)e[r]^=t[r]},tK=function(e){let t,r=0,i=0;for(t=0;t<e.length;t++)i=r,r=1&e[t],e[t]=e[t]>>1,0!==i&&(e[t]=128|e[t]);return e},tF=function(e,t){let r=t.slice(),i=tB(16);for(let t=0;t<16;t++)for(let a=7;a>=0;a--)(e[t]&1<<a)!=0&&tH(i,r),(1&r[15])!=0?(tK(r),tH(r,tL)):tK(r);return i},tq=function(e){let t,r=e.slice();for(t=15;11!==t;t--)if(r[t]=r[t]+1,256===r[t])r[t]=0;else break;return r};function tM(e,t){let r=tB(16);for(let i=0;i<e.length;i+=16){let a=r.slice();for(let t=0;t<16;t++)a[t]^=e[i+t]??0;r=tF(a,t)}return r}function t$(e,t,r){if(0===e.length)return[];let i=Array(e.length),a=t,n=0,s=Math.ceil(e.length/16);for(let t=0;t<s;t++){let o=tU(a,r),c=Math.min(16,e.length-n);for(let t=0;t<c;t++)i[n]=e[n]^o[t],n++;t+1<s&&(a=tq(a))}return i}class tz extends p{static fromRandom(){return new tz(tx(32))}encrypt(e,t){let r=tx(32),{result:i,authenticationTag:a}=function(e,t,r,i){let a,n,s=tU(tB(16),i);a=[...r],12===r.length?a=a.concat(tB(3)).concat([1]):(r.length%16!=0&&(a=a.concat(tB(16-r.length%16))),a=tM((a=a.concat(tB(8))).concat(tB(4)).concat(tD(8*r.length)),s));let o=t$(e,tq(a),i);return n=t.slice(),0===t.length?n=n.concat(tB(16)):t.length%16!=0&&(n=n.concat(tB(16-t.length%16))),n=n.concat(o),0===o.length?n=n.concat(tB(16)):o.length%16!=0&&(n=n.concat(tB(16-o.length%16))),n=n.concat(tB(4)).concat(tD(8*t.length)).concat(tB(4)).concat(tD(8*o.length)),{result:o,authenticationTag:t$(tM(n,s),a,i)}}(e=eF(e,t),[],r,this.toArray("be",32));return ez([...r,...i,...a],t)}decrypt(e,t){let r=(e=eF(e,t)).slice(0,32),i=e.slice(32),a=i.slice(-16),n=function(e,t,r,i,a){let n,s,o=tU(tB(16),a);n=[...r],12===r.length?n=n.concat(tB(3)).concat([1]):(r.length%16!=0&&(n=n.concat(tB(16-r.length%16))),n=tM((n=n.concat(tB(8))).concat(tB(4)).concat(tD(8*r.length)),o));let c=t$(e,tq(n),a);return(s=t.slice(),0===t.length?s=s.concat(tB(16)):t.length%16!=0&&(s=s.concat(tB(16-t.length%16))),s=s.concat(e),0===e.length?s=s.concat(tB(16)):e.length%16!=0&&(s=s.concat(tB(16-e.length%16))),t$(tM(s=s.concat(tB(4)).concat(tD(8*t.length)).concat(tB(4)).concat(tD(8*e.length)),o),n,a).join()!==i.join())?null:c}(i.slice(0,-16),[],r,a,this.toArray());if(null===n)throw Error("Decryption failed!");return ez(n,t)}}class tW extends tu{static SIGHASH_ALL=1;static SIGHASH_NONE=2;static SIGHASH_SINGLE=3;static SIGHASH_FORKID=64;static SIGHASH_ANYONECANPAY=128;scope;static format(e){let t={sourceTXID:e.sourceTXID,sourceOutputIndex:e.sourceOutputIndex,sequence:e.inputSequence},r=[...e.otherInputs];function i(t){let r=new eZ;if(void 0===t)for(let t of e.outputs){let e=t.satoshis??0;r.writeUInt64LE(e);let i=t.lockingScript?.toBinary()??[];r.writeVarIntNum(i.length),r.write(i)}else{let i=e.outputs[t];if(void 0===i)throw Error(`Output at index ${t} does not exist`);let a=i.satoshis??0;r.writeUInt64LE(a);let n=i.lockingScript?.toBinary()??[];r.writeVarIntNum(n.length),r.write(n)}return W(r.toArray())}r.splice(e.inputIndex,0,t);let a=Array(32).fill(0),n=Array(32).fill(0),s=Array(32).fill(0);(e.scope&tW.SIGHASH_ANYONECANPAY)==0&&(a=(()=>{let e=new eZ;for(let t of r){if(void 0===t.sourceTXID){if(null==t.sourceTransaction)throw Error("Missing sourceTransaction for input");e.write(t.sourceTransaction.hash())}else e.writeReverse(eF(t.sourceTXID,"hex"));e.writeUInt32LE(t.sourceOutputIndex)}return W(e.toArray())})()),(e.scope&tW.SIGHASH_ANYONECANPAY)==0&&(31&e.scope)!==tW.SIGHASH_SINGLE&&(31&e.scope)!==tW.SIGHASH_NONE&&(n=(()=>{let e=new eZ;for(let t of r){let r=t.sequence??0xffffffff;e.writeUInt32LE(r)}return W(e.toArray())})()),(31&e.scope)!==tW.SIGHASH_SINGLE&&(31&e.scope)!==tW.SIGHASH_NONE?s=i():(31&e.scope)===tW.SIGHASH_SINGLE&&e.inputIndex<e.outputs.length&&(s=i(e.inputIndex));let o=new eZ;o.writeInt32LE(e.transactionVersion),o.write(a),o.write(n),o.writeReverse(eF(e.sourceTXID,"hex")),o.writeUInt32LE(e.sourceOutputIndex);let c=e.subscript.toBinary();o.writeVarIntNum(c.length),o.write(c),o.writeUInt64LE(e.sourceSatoshis);let l=t.sequence;return o.writeUInt32LE(l),o.write(s),o.writeUInt32LE(e.lockTime),o.writeUInt32LE(e.scope>>>0),o.toArray()}static fromChecksigFormat(e){if(0===e.length){let e=new p(1);return new tW(e,new p(1),1)}let t=e[e.length-1],r=e.slice(0,e.length-1),i=tu.fromDER(r);return new tW(i.r,i.s,t)}constructor(e,t,r){super(e,t),this.scope=r}hasLowS(){return!(this.s.ltn(1)||this.s.gt(new p("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex")))}toChecksigFormat(){return[...this.toDER(),this.scope]}}class tj{curve;constructor(){this.curve=new th}generateProof(e,t,r,i){let a=tO.fromRandom(),n=a.toPublicKey(),s=r.mul(a),o=this.computeChallenge(t,r,i,s,n);return{R:n,SPrime:s,z:a.add(o.mul(e)).umod(this.curve.n)}}verifyProof(e,t,r,i){let{R:a,SPrime:n,z:s}=i,o=this.computeChallenge(e,t,r,n,a),c=this.curve.g.mul(s),l=a.add(e.mul(o));if(!c.eq(l))return!1;let d=t.mul(s),h=n.add(r.mul(o));return!!d.eq(h)}computeChallenge(e,t,r,i,a){return new p($([...e.encode(!0),...t.encode(!0),...r.encode(!0),...i.encode(!0),...a.encode(!0)])).umod(this.curve.n)}}let tG={OP_FALSE:0,OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_SPLIT:127,OP_LEFT:128,OP_NUM2BIN:128,OP_RIGHT:129,OP_BIN2NUM:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_NOP1:176,OP_NOP2:177,OP_NOP3:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_NOP11:186,OP_NOP12:187,OP_NOP13:188,OP_NOP14:189,OP_NOP15:190,OP_NOP16:191,OP_NOP17:192,OP_NOP18:193,OP_NOP19:194,OP_NOP20:195,OP_NOP21:196,OP_NOP22:197,OP_NOP23:198,OP_NOP24:199,OP_NOP25:200,OP_NOP26:201,OP_NOP27:202,OP_NOP28:203,OP_NOP29:204,OP_NOP30:205,OP_NOP31:206,OP_NOP32:207,OP_NOP33:208,OP_NOP34:209,OP_NOP35:210,OP_NOP36:211,OP_NOP37:212,OP_NOP38:213,OP_NOP39:214,OP_NOP40:215,OP_NOP41:216,OP_NOP42:217,OP_NOP43:218,OP_NOP44:219,OP_NOP45:220,OP_NOP46:221,OP_NOP47:222,OP_NOP48:223,OP_NOP49:224,OP_NOP50:225,OP_NOP51:226,OP_NOP52:227,OP_NOP53:228,OP_NOP54:229,OP_NOP55:230,OP_NOP56:231,OP_NOP57:232,OP_NOP58:233,OP_NOP59:234,OP_NOP60:235,OP_NOP61:236,OP_NOP62:237,OP_NOP63:238,OP_NOP64:239,OP_NOP65:240,OP_NOP66:241,OP_NOP67:242,OP_NOP68:243,OP_NOP69:244,OP_NOP70:245,OP_NOP71:246,OP_NOP72:247,OP_NOP73:248,OP_NOP77:252,OP_SMALLDATA:249,OP_SMALLINTEGER:250,OP_PUBKEYS:251,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255};for(let e in tG)tG[tG[e]]=e;let tX=tG;class tY{chunks;static fromASM(e){let t=[],r=e.split(" "),i=0;for(;i<r.length;){let e,a=r[i],n=0;if(a.startsWith("OP_")&&void 0!==tX[a]&&(e=a,n=tX[a]),"0"===a)n=0,t.push({op:n}),i+=1;else if("-1"===a)n=tX.OP_1NEGATE,t.push({op:n}),i+=1;else if(void 0===e){let e=r[i];e.length%2!=0&&(e="0"+e);let a=eF(e,"hex");if(ez(a,"hex")!==e)throw Error("invalid hex string in script");let s=a.length;s>=0&&s<tX.OP_PUSHDATA1?n=s:s<256?n=tX.OP_PUSHDATA1:s<65536?n=tX.OP_PUSHDATA2:s<0x100000000&&(n=tX.OP_PUSHDATA4),t.push({data:a,op:n}),i+=1}else n===tX.OP_PUSHDATA1||n===tX.OP_PUSHDATA2||n===tX.OP_PUSHDATA4?(t.push({data:eF(r[i+2],"hex"),op:n}),i+=3):(t.push({op:n}),i+=1)}return new tY(t)}static fromHex(e){if(0===e.length)return tY.fromBinary([]);if(e.length%2!=0)throw Error("There is an uneven number of characters in the string which suggests it is not hex encoded.");if(!/^[0-9a-fA-F]+$/.test(e))throw Error("Some elements in this string are not hex encoded.");return tY.fromBinary(eF(e,"hex"))}static fromBinary(e){let t=[],r=0,i=new eQ(e=[...e]);for(;!i.eof();){let e=i.readUInt8();if(e===tX.OP_RETURN&&0===r){t.push({op:e,data:i.read()});break}e===tX.OP_IF||e===tX.OP_NOTIF||e===tX.OP_VERIF||e===tX.OP_VERNOTIF?r++:e===tX.OP_ENDIF&&r--;let a=0,n=[];if(e>0&&e<tX.OP_PUSHDATA1)a=e,t.push({data:i.read(a),op:e});else if(e===tX.OP_PUSHDATA1){try{a=i.readUInt8(),n=i.read(a)}catch{i.read()}t.push({data:n,op:e})}else if(e===tX.OP_PUSHDATA2){try{a=i.readUInt16LE(),n=i.read(a)}catch{i.read()}t.push({data:n,op:e})}else if(e===tX.OP_PUSHDATA4){try{a=i.readUInt32LE(),n=i.read(a)}catch{i.read()}t.push({data:n,op:e})}else t.push({op:e})}return new tY(t)}constructor(e=[]){this.chunks=e}toASM(){let e="";for(let t=0;t<this.chunks.length;t++){let r=this.chunks[t];e+=this._chunkToString(r)}return e.slice(1)}toHex(){return ez(this.toBinary(),"hex")}toBinary(){let e=new eZ;for(let t=0;t<this.chunks.length;t++){let r=this.chunks[t],i=r.op;if(e.writeUInt8(i),i===tX.OP_RETURN&&null!=r.data){e.write(r.data);break}null!=r.data&&(i<tX.OP_PUSHDATA1?e.write(r.data):i===tX.OP_PUSHDATA1?(e.writeUInt8(r.data.length),e.write(r.data)):i===tX.OP_PUSHDATA2?(e.writeUInt16LE(r.data.length),e.write(r.data)):i===tX.OP_PUSHDATA4&&(e.writeUInt32LE(r.data.length),e.write(r.data)))}return e.toArray()}writeScript(e){return this.chunks=this.chunks.concat(e.chunks),this}writeOpCode(e){return this.chunks.push({op:e}),this}setChunkOpCode(e,t){return this.chunks[e]={op:t},this}writeBn(e){if(e.cmpn(0)===tX.OP_0)this.chunks.push({op:tX.OP_0});else if(0===e.cmpn(-1))this.chunks.push({op:tX.OP_1NEGATE});else if(e.cmpn(1)>=0&&0>=e.cmpn(16))this.chunks.push({op:e.toNumber()+tX.OP_1-1});else{let t=e.toSm("little");this.writeBin(t)}return this}writeBin(e){let t;if(e.length>0&&e.length<tX.OP_PUSHDATA1)t=e.length;else if(0===e.length)t=tX.OP_0;else if(e.length<256)t=tX.OP_PUSHDATA1;else if(e.length<65536)t=tX.OP_PUSHDATA2;else if(e.length<0x100000000)t=tX.OP_PUSHDATA4;else throw Error("You can't push that much data");return this.chunks.push({data:e,op:t}),this}writeNumber(e){return this.writeBn(new p(e)),this}removeCodeseparators(){let e=[];for(let t=0;t<this.chunks.length;t++)this.chunks[t].op!==tX.OP_CODESEPARATOR&&e.push(this.chunks[t]);return this.chunks=e,this}findAndDelete(e){let t=e.toHex();for(let e=0;e<this.chunks.length;e++)t===new tY([this.chunks[e]]).toHex()&&this.chunks.splice(e,1);return this}isPushOnly(){for(let e=0;e<this.chunks.length;e++)if(this.chunks[e].op>tX.OP_16)return!1;return!0}isLockingScript(){throw Error("Not implemented")}isUnlockingScript(){throw Error("Not implemented")}_chunkToString(e){let t=e.op,r="";if(void 0===e.data){let e=tX[t];r=`${r} ${e}`}else r=`${r} ${eK(e.data)}`;return r}}class tJ extends tY{isLockingScript(){return!0}isUnlockingScript(){return!1}}class tZ extends tY{isLockingScript(){return!1}isUnlockingScript(){return!0}}class tQ extends Error{txid;outputIndex;context;programCounter;stackState;altStackState;ifStackState;stackMem;altStackMem;constructor(e){let t=e.stackState.map(e=>null!=e&&void 0!==e.length?eK(e):null==e?"null/undef":"INVALID_STACK_ITEM").join(", "),r=e.altStackState.map(e=>null!=e&&void 0!==e.length?eK(e):null==e?"null/undef":"INVALID_STACK_ITEM").join(", "),i=`Context: ${e.context}, PC: ${e.programCounter}`,a=`Stack: [${t}] (len: ${e.stackState.length}, mem: ${e.stackMem})`,n=`AltStack: [${r}] (len: ${e.altStackState.length}, mem: ${e.altStackMem})`;super(`Script evaluation error: ${e.message}
|
|
2
|
+
TXID: ${e.txid}, OutputIdx: ${e.outputIndex}
|
|
3
|
+
${i}
|
|
4
|
+
${a}
|
|
5
|
+
${n}
|
|
6
|
+
IfStack: [${e.ifStackState.join(", ")}]`),this.name=this.constructor.name,this.txid=e.txid,this.outputIndex=e.outputIndex,this.context=e.context,this.programCounter=e.programCounter,this.stackState=e.stackState.map(e=>e.slice()),this.altStackState=e.altStackState.map(e=>e.slice()),this.ifStackState=e.ifStackState.slice(),this.stackMem=e.stackMem,this.altStackMem=e.altStackMem}}let t0=Object.freeze(new p(-1).toScriptNum()),t1=Object.freeze(Array.from({length:17},(e,t)=>Object.freeze(new p(t).toScriptNum())));class t2{sourceTXID;sourceOutputIndex;sourceSatoshis;lockingScript;transactionVersion;otherInputs;outputs;inputIndex;unlockingScript;inputSequence;lockTime;context;programCounter;lastCodeSeparator;stack;altStack;ifStack;memoryLimit;stackMem;altStackMem;constructor(e){this.sourceTXID=e.sourceTXID,this.sourceOutputIndex=e.sourceOutputIndex,this.sourceSatoshis=e.sourceSatoshis,this.lockingScript=e.lockingScript,this.transactionVersion=e.transactionVersion,this.otherInputs=e.otherInputs,this.outputs=e.outputs,this.inputIndex=e.inputIndex,this.unlockingScript=e.unlockingScript,this.inputSequence=e.inputSequence,this.lockTime=e.lockTime,this.memoryLimit=e.memoryLimit??32e6,this.stack=[],this.altStack=[],this.ifStack=[],this.stackMem=0,this.altStackMem=0,this.reset()}reset(){this.context="UnlockingScript",this.programCounter=0,this.lastCodeSeparator=null,this.stack=[],this.altStack=[],this.ifStack=[],this.stackMem=0,this.altStackMem=0}ensureStackMem(e){this.stackMem+e>this.memoryLimit&&this.scriptEvaluationError("Stack memory usage has exceeded "+String(this.memoryLimit)+" bytes")}ensureAltStackMem(e){this.altStackMem+e>this.memoryLimit&&this.scriptEvaluationError("Alt stack memory usage has exceeded "+String(this.memoryLimit)+" bytes")}pushStack(e){this.ensureStackMem(e.length),this.stack.push(e),this.stackMem+=e.length}pushStackCopy(e){this.ensureStackMem(e.length);let t=e.slice();this.stack.push(t),this.stackMem+=t.length}popStack(){0===this.stack.length&&this.scriptEvaluationError("Attempted to pop from an empty stack.");let e=this.stack.pop();return this.stackMem-=e.length,e}stackTop(e=-1){return(0===this.stack.length||this.stack.length<Math.abs(e)||e>=0&&e>=this.stack.length)&&this.scriptEvaluationError(`Stack underflow accessing element at index ${e}. Stack length is ${this.stack.length}.`),this.stack[this.stack.length+e]}pushAltStack(e){this.ensureAltStackMem(e.length),this.altStack.push(e),this.altStackMem+=e.length}popAltStack(){0===this.altStack.length&&this.scriptEvaluationError("Attempted to pop from an empty alt stack.");let e=this.altStack.pop();return this.altStackMem-=e.length,e}checkSignatureEncoding(e){if(0===e.length)return!0;if(!function(e){if(e.length<9||e.length>73||48!==e[0]||e[1]!==e.length-3)return!1;let t=e[2],r=e[3];if(2!==t||0===r||5+r>=e.length)return!1;let i=4+r,a=e[i],n=e[i+1];if(2!==a||0===n||(128&e[4])!=0||r>1&&0===e[4]&&(128&e[5])==0)return!1;let s=i+2;return(128&e[s])==0&&(!(n>1)||0!==e[s]||(128&e[s+1])!=0)&&r+n+7===e.length}(e))return this.scriptEvaluationError("The signature format is invalid."),!1;try{let t=tW.fromChecksigFormat(e);if(!t.hasLowS())return this.scriptEvaluationError("The signature must have a low S value."),!1;if((t.scope&tW.SIGHASH_FORKID)==0)return this.scriptEvaluationError("The signature must use SIGHASH_FORKID."),!1}catch(e){return this.scriptEvaluationError("The signature format is invalid."),!1}return!0}checkPublicKeyEncoding(e){if(0===e.length)return this.scriptEvaluationError("Public key is empty."),!1;if(e.length<33)return this.scriptEvaluationError("The public key is too short, it must be at least 33 bytes."),!1;if(4===e[0]){if(65!==e.length)return this.scriptEvaluationError("The non-compressed public key must be 65 bytes."),!1}else if(2!==e[0]&&3!==e[0])return this.scriptEvaluationError("The public key is in an unknown format."),!1;else if(33!==e.length)return this.scriptEvaluationError("The compressed public key must be 33 bytes."),!1;try{tv.fromDER(e)}catch(e){return this.scriptEvaluationError("The public key is in an unknown format."),!1}return!0}verifySignature(e,t,r){return tI(new p(W(tW.format({sourceTXID:this.sourceTXID,sourceOutputIndex:this.sourceOutputIndex,sourceSatoshis:this.sourceSatoshis,transactionVersion:this.transactionVersion,otherInputs:this.otherInputs,outputs:this.outputs,inputIndex:this.inputIndex,subscript:r,inputSequence:this.inputSequence,lockTime:this.lockTime,scope:e.scope}))),e,t)}step(){if(this.stackMem>this.memoryLimit)return this.scriptEvaluationError("Stack memory usage has exceeded "+String(this.memoryLimit)+" bytes"),!1;if(this.altStackMem>this.memoryLimit)return this.scriptEvaluationError("Alt stack memory usage has exceeded "+String(this.memoryLimit)+" bytes"),!1;"UnlockingScript"===this.context&&this.programCounter>=this.unlockingScript.chunks.length&&(this.context="LockingScript",this.programCounter=0);let e="UnlockingScript"===this.context?this.unlockingScript:this.lockingScript;if(this.programCounter>=e.chunks.length)return!1;let t=e.chunks[this.programCounter],r=t.op;void 0===r&&this.scriptEvaluationError(`Missing opcode in ${this.context} at pc=${this.programCounter}.`),Array.isArray(t.data)&&t.data.length>0x40000000&&this.scriptEvaluationError(`Data push > 1073741824 bytes (pc=${this.programCounter}).`);let i=!this.ifStack.includes(!1);if(i&&(r===tX.OP_2MUL||r===tX.OP_2DIV||r===tX.OP_VERIF||r===tX.OP_VERNOTIF||r===tX.OP_VER)&&this.scriptEvaluationError(`This opcode is currently disabled. (Opcode: ${tX[r]}, PC: ${this.programCounter})`),i&&r>=0&&r<=tX.OP_PUSHDATA4)!function(e){let t=e.data,r=e.op;return!Array.isArray(t)||(0===t.length?r===tX.OP_0:1===t.length&&t[0]>=1&&t[0]<=16?r===tX.OP_1+(t[0]-1):1===t.length&&129===t[0]?r===tX.OP_1NEGATE:t.length<=75?r===t.length:t.length<=255?r===tX.OP_PUSHDATA1:!(t.length<=65535)||r===tX.OP_PUSHDATA2)}(t)&&this.scriptEvaluationError(`This data is not minimally-encoded. (PC: ${this.programCounter})`),this.pushStack(Array.isArray(t.data)?t.data:[]);else if(i||r>=tX.OP_IF&&r<=tX.OP_ENDIF){let e,t,a,n,s,o,c,l,d,h,u,f,b,g,m,y,w,I,v,k,S,x,P,E,N,O;switch(r){case tX.OP_1NEGATE:this.pushStackCopy(t0);break;case tX.OP_0:this.pushStackCopy(t1[0]);break;case tX.OP_1:case tX.OP_2:case tX.OP_3:case tX.OP_4:case tX.OP_5:case tX.OP_6:case tX.OP_7:case tX.OP_8:case tX.OP_9:case tX.OP_10:case tX.OP_11:case tX.OP_12:case tX.OP_13:case tX.OP_14:case tX.OP_15:case tX.OP_16:f=r-(tX.OP_1-1),this.pushStackCopy(t1[f]);break;case tX.OP_NOP:case tX.OP_NOP2:case tX.OP_NOP3:case tX.OP_NOP1:case tX.OP_NOP4:case tX.OP_NOP5:case tX.OP_NOP6:case tX.OP_NOP7:case tX.OP_NOP8:case tX.OP_NOP9:case tX.OP_NOP10:case tX.OP_NOP11:case tX.OP_NOP12:case tX.OP_NOP13:case tX.OP_NOP14:case tX.OP_NOP15:case tX.OP_NOP16:case tX.OP_NOP17:case tX.OP_NOP18:case tX.OP_NOP19:case tX.OP_NOP20:case tX.OP_NOP21:case tX.OP_NOP22:case tX.OP_NOP23:case tX.OP_NOP24:case tX.OP_NOP25:case tX.OP_NOP26:case tX.OP_NOP27:case tX.OP_NOP28:case tX.OP_NOP29:case tX.OP_NOP30:case tX.OP_NOP31:case tX.OP_NOP32:case tX.OP_NOP33:case tX.OP_NOP34:case tX.OP_NOP35:case tX.OP_NOP36:case tX.OP_NOP37:case tX.OP_NOP38:case tX.OP_NOP39:case tX.OP_NOP40:case tX.OP_NOP41:case tX.OP_NOP42:case tX.OP_NOP43:case tX.OP_NOP44:case tX.OP_NOP45:case tX.OP_NOP46:case tX.OP_NOP47:case tX.OP_NOP48:case tX.OP_NOP49:case tX.OP_NOP50:case tX.OP_NOP51:case tX.OP_NOP52:case tX.OP_NOP53:case tX.OP_NOP54:case tX.OP_NOP55:case tX.OP_NOP56:case tX.OP_NOP57:case tX.OP_NOP58:case tX.OP_NOP59:case tX.OP_NOP60:case tX.OP_NOP61:case tX.OP_NOP62:case tX.OP_NOP63:case tX.OP_NOP64:case tX.OP_NOP65:case tX.OP_NOP66:case tX.OP_NOP67:case tX.OP_NOP68:case tX.OP_NOP69:case tX.OP_NOP70:case tX.OP_NOP71:case tX.OP_NOP72:case tX.OP_NOP73:case tX.OP_NOP77:break;case tX.OP_IF:case tX.OP_NOTIF:g=!1,i&&(this.stack.length<1&&this.scriptEvaluationError("OP_IF and OP_NOTIF require at least one item on the stack when they are used!"),e=this.popStack(),g=this.castToBool(e),r===tX.OP_NOTIF&&(g=!g)),this.ifStack.push(g);break;case tX.OP_ELSE:0===this.ifStack.length&&this.scriptEvaluationError("OP_ELSE requires a preceeding OP_IF."),this.ifStack[this.ifStack.length-1]=!this.ifStack[this.ifStack.length-1];break;case tX.OP_ENDIF:0===this.ifStack.length&&this.scriptEvaluationError("OP_ENDIF requires a preceeding OP_IF."),this.ifStack.pop();break;case tX.OP_VERIFY:this.stack.length<1&&this.scriptEvaluationError("OP_VERIFY requires at least one item to be on the stack."),t=this.stackTop(),(g=this.castToBool(t))||this.scriptEvaluationError("OP_VERIFY requires the top stack value to be truthy."),this.popStack();break;case tX.OP_RETURN:"UnlockingScript"===this.context?this.programCounter=this.unlockingScript.chunks.length:this.programCounter=this.lockingScript.chunks.length,this.ifStack=[],this.programCounter--;break;case tX.OP_TOALTSTACK:this.stack.length<1&&this.scriptEvaluationError("OP_TOALTSTACK requires at oeast one item to be on the stack."),this.pushAltStack(this.popStack());break;case tX.OP_FROMALTSTACK:this.altStack.length<1&&this.scriptEvaluationError("OP_FROMALTSTACK requires at least one item to be on the stack."),this.pushStack(this.popAltStack());break;case tX.OP_2DROP:this.stack.length<2&&this.scriptEvaluationError("OP_2DROP requires at least two items to be on the stack."),this.popStack(),this.popStack();break;case tX.OP_2DUP:this.stack.length<2&&this.scriptEvaluationError("OP_2DUP requires at least two items to be on the stack."),t=this.stackTop(-2),a=this.stackTop(-1),this.pushStackCopy(t),this.pushStackCopy(a);break;case tX.OP_3DUP:this.stack.length<3&&this.scriptEvaluationError("OP_3DUP requires at least three items to be on the stack."),t=this.stackTop(-3),a=this.stackTop(-2),n=this.stackTop(-1),this.pushStackCopy(t),this.pushStackCopy(a),this.pushStackCopy(n);break;case tX.OP_2OVER:this.stack.length<4&&this.scriptEvaluationError("OP_2OVER requires at least four items to be on the stack."),t=this.stackTop(-4),a=this.stackTop(-3),this.pushStackCopy(t),this.pushStackCopy(a);break;case tX.OP_2ROT:{this.stack.length<6&&this.scriptEvaluationError("OP_2ROT requires at least six items to be on the stack.");let e=this.popStack(),t=this.popStack(),r=this.popStack(),i=this.popStack(),a=this.popStack(),n=this.popStack();this.pushStack(i),this.pushStack(r),this.pushStack(t),this.pushStack(e),this.pushStack(n),this.pushStack(a);break}case tX.OP_2SWAP:{this.stack.length<4&&this.scriptEvaluationError("OP_2SWAP requires at least four items to be on the stack.");let e=this.popStack(),t=this.popStack(),r=this.popStack(),i=this.popStack();this.pushStack(t),this.pushStack(e),this.pushStack(i),this.pushStack(r);break}case tX.OP_IFDUP:this.stack.length<1&&this.scriptEvaluationError("OP_IFDUP requires at least one item to be on the stack."),t=this.stackTop(),this.castToBool(t)&&this.pushStackCopy(t);break;case tX.OP_DEPTH:this.pushStack(new p(this.stack.length).toScriptNum());break;case tX.OP_DROP:this.stack.length<1&&this.scriptEvaluationError("OP_DROP requires at least one item to be on the stack."),this.popStack();break;case tX.OP_DUP:this.stack.length<1&&this.scriptEvaluationError("OP_DUP requires at least one item to be on the stack."),this.pushStackCopy(this.stackTop());break;case tX.OP_NIP:this.stack.length<2&&this.scriptEvaluationError("OP_NIP requires at least two items to be on the stack."),a=this.popStack(),this.popStack(),this.pushStack(a);break;case tX.OP_OVER:this.stack.length<2&&this.scriptEvaluationError("OP_OVER requires at least two items to be on the stack."),this.pushStackCopy(this.stackTop(-2));break;case tX.OP_PICK:case tX.OP_ROLL:{this.stack.length<2&&this.scriptEvaluationError(`${tX[r]} requires at least two items to be on the stack.`),((f=(l=p.fromScriptNum(this.popStack(),!0)).toNumber())<0||f>=this.stack.length)&&this.scriptEvaluationError(`${tX[r]} requires the top stack element to be 0 or a positive number less than the current size of the stack.`);let e=this.stack[this.stack.length-1-f];r===tX.OP_ROLL?(this.stack.splice(this.stack.length-1-f,1),this.stackMem-=e.length,this.pushStack(e)):this.pushStackCopy(e);break}case tX.OP_ROT:this.stack.length<3&&this.scriptEvaluationError("OP_ROT requires at least three items to be on the stack."),c=this.popStack(),o=this.popStack(),s=this.popStack(),this.pushStack(o),this.pushStack(c),this.pushStack(s);break;case tX.OP_SWAP:this.stack.length<2&&this.scriptEvaluationError("OP_SWAP requires at least two items to be on the stack."),o=this.popStack(),s=this.popStack(),this.pushStack(o),this.pushStack(s);break;case tX.OP_TUCK:this.stack.length<2&&this.scriptEvaluationError("OP_TUCK requires at least two items to be on the stack."),t=this.stackTop(-1),this.ensureStackMem(t.length),this.stack.splice(this.stack.length-2,0,t.slice()),this.stackMem+=t.length;break;case tX.OP_SIZE:this.stack.length<1&&this.scriptEvaluationError("OP_SIZE requires at least one item to be on the stack."),this.pushStack(new p(this.stackTop().length).toScriptNum());break;case tX.OP_AND:case tX.OP_OR:case tX.OP_XOR:{this.stack.length<2&&this.scriptEvaluationError(`${tX[r]} requires at least two items on the stack.`),a=this.popStack(),(t=this.popStack()).length!==a.length&&this.scriptEvaluationError(`${tX[r]} requires the top two stack items to be the same size.`);let e=Array(t.length);for(let i=0;i<t.length;i++)r===tX.OP_AND?e[i]=t[i]&a[i]:r===tX.OP_OR?e[i]=t[i]|a[i]:e[i]=t[i]^a[i];this.pushStack(e);break}case tX.OP_INVERT:{this.stack.length<1&&this.scriptEvaluationError("OP_INVERT requires at least one item to be on the stack.");let t=Array((e=this.popStack()).length);for(let r=0;r<e.length;r++)t[r]=255&~e[r];this.pushStack(t);break}case tX.OP_LSHIFT:case tX.OP_RSHIFT:{if(this.stack.length<2&&this.scriptEvaluationError(`${tX[r]} requires at least two items to be on the stack.`),h=p.fromScriptNum(this.popStack(),!0),t=this.popStack(),(f=h.toNumber())<0&&this.scriptEvaluationError(`${tX[r]} requires the top item on the stack not to be negative.`),0===t.length){this.pushStack([]);break}d=new p(t);let e=(r===tX.OP_LSHIFT?d.ushln(f):d.ushrn(f)).toArray("le",t.length);this.pushStack(e);break}case tX.OP_EQUAL:case tX.OP_EQUALVERIFY:this.stack.length<2&&this.scriptEvaluationError(`${tX[r]} requires at least two items to be on the stack.`),a=this.popStack(),g=function(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}(t=this.popStack(),a),this.pushStack(g?[1]:[]),r===tX.OP_EQUALVERIFY&&(g||this.scriptEvaluationError("OP_EQUALVERIFY requires the top two stack items to be equal."),this.popStack());break;case tX.OP_1ADD:case tX.OP_1SUB:case tX.OP_NEGATE:case tX.OP_ABS:case tX.OP_NOT:case tX.OP_0NOTEQUAL:switch(this.stack.length<1&&this.scriptEvaluationError(`${tX[r]} requires at least one item to be on the stack.`),l=p.fromScriptNum(this.popStack(),!0),r){case tX.OP_1ADD:l=l.add(new p(1));break;case tX.OP_1SUB:l=l.sub(new p(1));break;case tX.OP_NEGATE:l=l.neg();break;case tX.OP_ABS:l.isNeg()&&(l=l.neg());break;case tX.OP_NOT:l=new p(+(0===l.cmpn(0)));break;case tX.OP_0NOTEQUAL:l=new p(+(0!==l.cmpn(0)))}this.pushStack(l.toScriptNum());break;case tX.OP_ADD:case tX.OP_SUB:case tX.OP_MUL:case tX.OP_DIV:case tX.OP_MOD:case tX.OP_BOOLAND:case tX.OP_BOOLOR:case tX.OP_NUMEQUAL:case tX.OP_NUMEQUALVERIFY:case tX.OP_NUMNOTEQUAL:case tX.OP_LESSTHAN:case tX.OP_GREATERTHAN:case tX.OP_LESSTHANOREQUAL:case tX.OP_GREATERTHANOREQUAL:case tX.OP_MIN:case tX.OP_MAX:{this.stack.length<2&&this.scriptEvaluationError(`${tX[r]} requires at least two items to be on the stack.`),a=this.popStack(),t=this.popStack(),h=p.fromScriptNum(a,!0),d=p.fromScriptNum(t,!0);let e=0;switch(r){case tX.OP_MUL:e=d.byteLength()+h.byteLength();break;case tX.OP_ADD:case tX.OP_SUB:e=Math.max(d.byteLength(),h.byteLength())+1;break;default:e=Math.max(d.byteLength(),h.byteLength())}this.ensureStackMem(e);let i=new p(0);switch(r){case tX.OP_ADD:i=d.add(h);break;case tX.OP_SUB:i=d.sub(h);break;case tX.OP_MUL:i=d.mul(h);break;case tX.OP_DIV:0===h.cmpn(0)&&this.scriptEvaluationError("OP_DIV cannot divide by zero!"),i=d.div(h);break;case tX.OP_MOD:0===h.cmpn(0)&&this.scriptEvaluationError("OP_MOD cannot divide by zero!"),i=d.mod(h);break;case tX.OP_BOOLAND:i=new p(+(0!==d.cmpn(0)&&0!==h.cmpn(0)));break;case tX.OP_BOOLOR:i=new p(+(0!==d.cmpn(0)||0!==h.cmpn(0)));break;case tX.OP_NUMEQUAL:case tX.OP_NUMEQUALVERIFY:i=new p(+(0===d.cmp(h)));break;case tX.OP_NUMNOTEQUAL:i=new p(+(0!==d.cmp(h)));break;case tX.OP_LESSTHAN:i=new p(+(0>d.cmp(h)));break;case tX.OP_GREATERTHAN:i=new p(+(d.cmp(h)>0));break;case tX.OP_LESSTHANOREQUAL:i=new p(+(0>=d.cmp(h)));break;case tX.OP_GREATERTHANOREQUAL:i=new p(+(d.cmp(h)>=0));break;case tX.OP_MIN:i=0>d.cmp(h)?d:h;break;case tX.OP_MAX:i=d.cmp(h)>0?d:h}this.pushStack(i.toScriptNum()),r===tX.OP_NUMEQUALVERIFY&&(this.castToBool(this.stackTop())||this.scriptEvaluationError("OP_NUMEQUALVERIFY requires the top stack item to be truthy."),this.popStack());break}case tX.OP_WITHIN:this.stack.length<3&&this.scriptEvaluationError("OP_WITHIN requires at least three items to be on the stack."),u=p.fromScriptNum(this.popStack(),!0),h=p.fromScriptNum(this.popStack(),!0),g=(d=p.fromScriptNum(this.popStack(),!0)).cmp(h)>=0&&0>d.cmp(u),this.pushStack(g?[1]:[]);break;case tX.OP_RIPEMD160:case tX.OP_SHA1:case tX.OP_SHA256:case tX.OP_HASH160:case tX.OP_HASH256:{this.stack.length<1&&this.scriptEvaluationError(`${tX[r]} requires at least one item to be on the stack.`),e=this.popStack();let t=[];r===tX.OP_RIPEMD160?t=q(e):r===tX.OP_SHA1?t=M(e):r===tX.OP_SHA256?t=$(e):r===tX.OP_HASH160?t=j(e):r===tX.OP_HASH256&&(t=W(e)),this.pushStack(t);break}case tX.OP_CODESEPARATOR:this.lastCodeSeparator=this.programCounter;break;case tX.OP_CHECKSIG:case tX.OP_CHECKSIGVERIFY:if(this.stack.length<2&&this.scriptEvaluationError(`${tX[r]} requires at least two items to be on the stack.`),I=this.popStack(),w=this.popStack(),this.checkSignatureEncoding(w)&&this.checkPublicKeyEncoding(I)||this.scriptEvaluationError(`${tX[r]} requires correct encoding for the public key and signature.`),(y=new tY(("UnlockingScript"===this.context?this.unlockingScript:this.lockingScript).chunks.slice(null===this.lastCodeSeparator?0:this.lastCodeSeparator+1))).findAndDelete(new tY().writeBin(w)),m=!1,w.length>0)try{v=tW.fromChecksigFormat(w),k=tv.fromDER(I),m=this.verifySignature(v,k,y)}catch(e){m=!1}this.pushStack(m?[1]:[]),r===tX.OP_CHECKSIGVERIFY&&(m||this.scriptEvaluationError("OP_CHECKSIGVERIFY requires that a valid signature is provided."),this.popStack());break;case tX.OP_CHECKMULTISIG:case tX.OP_CHECKMULTISIGVERIFY:{S=1,this.stack.length<S&&this.scriptEvaluationError(`${tX[r]} requires at least 1 item for nKeys.`),((E=p.fromScriptNum(this.stackTop(-S),!0).toNumber())<0||E>0x7fffffff)&&this.scriptEvaluationError(`${tX[r]} requires a key count between 0 and 2147483647.`),x=++S,S+=E,this.stack.length<S&&this.scriptEvaluationError(`${tX[r]} stack too small for nKeys and keys. Need ${S}, have ${this.stack.length}.`),((N=p.fromScriptNum(this.stackTop(-S),!0).toNumber())<0||N>E)&&this.scriptEvaluationError(`${tX[r]} requires the number of signatures to be no greater than the number of keys.`),P=++S,S+=N,this.stack.length<S&&this.scriptEvaluationError(`${tX[r]} stack too small for N, keys, M, sigs, and dummy. Need ${S}, have ${this.stack.length}.`),y=new tY(("UnlockingScript"===this.context?this.unlockingScript:this.lockingScript).chunks.slice(null===this.lastCodeSeparator?0:this.lastCodeSeparator+1));for(let e=0;e<N;e++)w=this.stackTop(-P-e),y.findAndDelete(new tY().writeBin(w));for(m=!0;m&&N>0;){if(0===E){m=!1;break}if(w=this.stackTop(-P),I=this.stackTop(-x),this.checkSignatureEncoding(w)&&this.checkPublicKeyEncoding(I)||this.scriptEvaluationError(`${tX[r]} requires correct encoding for the public key and signature.`),O=!1,w.length>0)try{v=tW.fromChecksigFormat(w),k=tv.fromDER(I),O=this.verifySignature(v,k,y)}catch(e){O=!1}O&&(P++,N--),x++,N>--E&&(m=!1)}let e=1+p.fromScriptNum(this.stackTop(-1),!1).toNumber()+1+p.fromScriptNum(this.stackTop(-(1+p.fromScriptNum(this.stackTop(-1),!1).toNumber()+1)),!1).toNumber()+1-1;for(;e>0;)this.popStack(),e--;this.stack.length<1&&this.scriptEvaluationError(`${tX[r]} requires an extra item (dummy) to be on the stack.`),this.popStack().length>0&&this.scriptEvaluationError(`${tX[r]} requires the extra stack item (dummy) to be empty.`),this.pushStack(m?[1]:[]),r===tX.OP_CHECKMULTISIGVERIFY&&(m||this.scriptEvaluationError("OP_CHECKMULTISIGVERIFY requires that a sufficient number of valid signatures are provided."),this.popStack());break}case tX.OP_CAT:{this.stack.length<2&&this.scriptEvaluationError("OP_CAT requires at least two items to be on the stack."),a=this.popStack();let e=(t=this.popStack()).concat(a);e.length>0x40000000&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes."),this.pushStack(e);break}case tX.OP_SPLIT:{this.stack.length<2&&this.scriptEvaluationError("OP_SPLIT requires at least two items to be on the stack.");let e=this.popStack(),t=this.popStack();((f=p.fromScriptNum(e,!0).toNumber())<0||f>t.length)&&this.scriptEvaluationError("OP_SPLIT requires the first stack item to be a non-negative number less than or equal to the size of the second-from-top stack item."),this.pushStack(t.slice(0,f)),this.pushStack(t.slice(f));break}case tX.OP_NUM2BIN:{this.stack.length<2&&this.scriptEvaluationError("OP_NUM2BIN requires at least two items to be on the stack."),((b=p.fromScriptNum(this.popStack(),!0).toNumber())>0x40000000||b<0)&&this.scriptEvaluationError("It's not currently possible to push data larger than 1073741824 bytes or negative size.");let e=this.popStack();if((e=e0(e)).length>b&&this.scriptEvaluationError("OP_NUM2BIN requires that the size expressed in the top stack item is large enough to hold the value expressed in the second-from-top stack item."),e.length===b){this.pushStack(e);break}let t=Array(b).fill(0),r=0;e.length>0&&(r=128&e[e.length-1],e[e.length-1]&=127);for(let r=0;r<e.length;r++)t[r]=e[r];0!==r&&(t[b-1]|=128),this.pushStack(t);break}case tX.OP_BIN2NUM:{this.stack.length<1&&this.scriptEvaluationError("OP_BIN2NUM requires at least one item to be on the stack.");let e=e0(t=this.popStack());!function(e,t=Number.MAX_SAFE_INTEGER){return!(e.length>t)&&(!(e.length>0)||(127&e[e.length-1])!=0||!(e.length<=1)&&(128&e[e.length-2])!=0)}(e)&&this.scriptEvaluationError("OP_BIN2NUM requires that the resulting number is valid."),this.pushStack(e);break}default:this.scriptEvaluationError(`Invalid opcode ${r} (pc=${this.programCounter}).`)}}return this.programCounter++,!0}validate(){for(this.unlockingScript.isPushOnly()||this.scriptEvaluationError("Unlocking scripts can only contain push operations, and no other opcodes.");this.step()&&("LockingScript"!==this.context||!(this.programCounter>=this.lockingScript.chunks.length)););return this.ifStack.length>0&&this.scriptEvaluationError("Every OP_IF, OP_NOTIF, or OP_ELSE must be terminated with OP_ENDIF prior to the end of the script."),1!==this.stack.length&&this.scriptEvaluationError(`The clean stack rule requires exactly one item to be on the stack after script execution, found ${this.stack.length}.`),0===this.stack.length?this.scriptEvaluationError("The top stack element must be truthy after script evaluation (stack is empty)."):this.castToBool(this.stackTop())||this.scriptEvaluationError("The top stack element must be truthy after script evaluation."),!0}castToBool(e){if(0===e.length)return!1;for(let t=0;t<e.length;t++)if(0!==e[t])return t!==e.length-1||128!==e[t];return!1}scriptEvaluationError(e){throw new tQ({message:e,txid:this.sourceTXID,outputIndex:this.sourceOutputIndex,context:this.context,programCounter:this.programCounter,stackState:this.stack,altStackState:this.altStack,ifStackState:this.ifStack,stackMem:this.stackMem,altStackMem:this.altStackMem})}}function t8(e){if(null==e)throw Error("must have value");return e}class t3{lock(e){let t;if("string"==typeof e){let r=eJ(e);if(0!==r.prefix[0]&&111!==r.prefix[0])throw Error("only P2PKH is supported");t=r.data}else t=e;if(20!==t.length)throw Error("P2PKH hash length must be 20 bytes");return new tJ([{op:tX.OP_DUP},{op:tX.OP_HASH160},{op:t.length,data:t},{op:tX.OP_EQUALVERIFY},{op:tX.OP_CHECKSIG}])}unlock(e,t="all",r=!1,i,a){return{sign:async(n,s)=>{let o=tW.SIGHASH_FORKID;"all"===t&&(o|=tW.SIGHASH_ALL),"none"===t&&(o|=tW.SIGHASH_NONE),"single"===t&&(o|=tW.SIGHASH_SINGLE),r&&(o|=tW.SIGHASH_ANYONECANPAY);let c=n.inputs[s],l=n.inputs.filter((e,t)=>t!==s),d=c.sourceTXID??c.sourceTransaction?.id("hex");if(null==d||void 0===d||""===d)throw Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(null==(i||=c.sourceTransaction?.outputs[c.sourceOutputIndex].satoshis)||void 0===i)throw Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(null==(a||=c.sourceTransaction?.outputs[c.sourceOutputIndex].lockingScript))throw Error("The lockingScript or input sourceTransaction is required for transaction signing.");let h=tW.format({sourceTXID:d,sourceOutputIndex:t8(c.sourceOutputIndex),sourceSatoshis:i,transactionVersion:n.version,otherInputs:l,inputIndex:s,outputs:n.outputs,inputSequence:t8(c.sequence),subscript:a,lockTime:n.lockTime,scope:o}),u=e.sign($(h)),f=new tW(u.r,u.s,o).toChecksigFormat(),p=e.toPublicKey().encode(!0);return new tZ([{op:f.length,data:f},{op:p.length,data:p}])},estimateLength:async()=>108}}}class t6{type="raw";constructor(e="raw"){this.type=e}lock(e){let t=[{op:tX.OP_OVER},{op:tX.OP_3},{op:tX.OP_SPLIT},{op:tX.OP_NIP},{op:tX.OP_1},{op:tX.OP_SPLIT},{op:tX.OP_SWAP},{op:tX.OP_SPLIT},{op:tX.OP_DROP}];return"raw"!==this.type&&t.push({op:tX["OP_"+this.type]}),t.push({op:e.length,data:e}),t.push({op:tX.OP_EQUALVERIFY}),t.push({op:tX.OP_CHECKSIG}),new tJ(t)}unlock(e,t,r="all",i=!1){return{sign:async(a,n)=>{void 0===t&&(t=tO.fromRandom());let s=tW.SIGHASH_FORKID;"all"===r&&(s|=tW.SIGHASH_ALL),"none"===r&&(s|=tW.SIGHASH_NONE),"single"===r&&(s|=tW.SIGHASH_SINGLE),i&&(s|=tW.SIGHASH_ANYONECANPAY);let o=[...a.inputs],[c]=o.splice(n,1);if("object"!=typeof c.sourceTransaction)throw Error("The source transaction is needed for transaction signing.");let l=tW.format({sourceTXID:c.sourceTransaction?.id("hex")??"",sourceOutputIndex:c.sourceOutputIndex??0,sourceSatoshis:c.sourceTransaction?.outputs[c.sourceOutputIndex]?.satoshis??0,transactionVersion:a.version,otherInputs:o,inputIndex:n,outputs:a.outputs,inputSequence:c.sequence??0xffffffff,subscript:c.sourceTransaction?.outputs[c.sourceOutputIndex]?.lockingScript??new tY,lockTime:a.lockTime,scope:s}),d=t.sign($(l),void 0,!0,e),h=new tW(d.r,d.s,s).toChecksigFormat(),u=t.toPublicKey().encode(!0);return new tZ([{op:h.length,data:h},{op:u.length,data:u}])},estimateLength:async()=>108}}}function t4(e){if(null==e)throw Error("must have value");return e}let t5=e=>0===e.length||1===e.length&&0===e[0]?{op:0}:1===e.length&&e[0]>0&&e[0]<=16?{op:80+e[0]}:1===e.length&&129===e[0]?{op:79}:e.length<=75?{op:e.length,data:e}:e.length<=255?{op:76,data:e}:e.length<=65535?{op:77,data:e}:{op:78,data:e};class t7{wallet;originator;static decode(e){let t=tv.fromString(eK(t4(e.chunks[0].data))),r=[];for(let t=2;t<e.chunks.length;t++){let i=e.chunks[t+1]?.op,a=e.chunks[t].data??[];if(0===a.length&&(e.chunks[t].op>=80&&e.chunks[t].op<=95?a=[e.chunks[t].op-80]:0===e.chunks[t].op?a=[0]:79===e.chunks[t].op&&(a=[129])),r.push(a),i===tX.OP_DROP||i===tX.OP_2DROP)break}return{fields:r,lockingPublicKey:t}}constructor(e,t){this.wallet=e,this.originator=t}async lock(e,t,r,i,a=!1,n=!0,s="before"){let{publicKey:o}=await this.wallet.getPublicKey({protocolID:t,keyID:r,counterparty:i,forSelf:a},this.originator),c=[],l=[];if(c.push({op:o.length/2,data:eF(o,"hex")}),c.push({op:tX.OP_CHECKSIG}),n){let a=e.reduce((e,t)=>[...e,...t],[]),{signature:n}=await this.wallet.createSignature({data:a,protocolID:t,keyID:r,counterparty:i},this.originator);e.push(n)}for(let t of e)l.push(t5(t));let d=e.length;for(;d>1;)l.push({op:tX.OP_2DROP}),d-=2;return new tJ((0!==d&&l.push({op:tX.OP_DROP}),"before"===s)?[...c,...l]:[...l,...c])}unlock(e,t,r,i="all",a=!1,n,s){return{sign:async(o,c)=>{let l=tW.SIGHASH_FORKID;"all"===i&&(l|=tW.SIGHASH_ALL),"none"===i&&(l|=tW.SIGHASH_NONE),"single"===i&&(l|=tW.SIGHASH_SINGLE),a&&(l|=tW.SIGHASH_ANYONECANPAY);let d=o.inputs[c],h=o.inputs.filter((e,t)=>t!==c),u=d.sourceTXID??d.sourceTransaction?.id("hex");if(null==u||void 0===u)throw Error("The input sourceTXID or sourceTransaction is required for transaction signing.");if(null==(n||=d.sourceTransaction?.outputs[d.sourceOutputIndex].satoshis)||void 0===n)throw Error("The sourceSatoshis or input sourceTransaction is required for transaction signing.");if(null==(s||=d.sourceTransaction?.outputs[d.sourceOutputIndex].lockingScript))throw Error("The lockingScript or input sourceTransaction is required for transaction signing.");let f=$(tW.format({sourceTXID:u,sourceOutputIndex:t4(d.sourceOutputIndex),sourceSatoshis:n,transactionVersion:o.version,otherInputs:h,inputIndex:c,outputs:o.outputs,inputSequence:d.sequence??0xffffffff,subscript:s,lockTime:o.lockTime,scope:l})),{signature:p}=await this.wallet.createSignature({data:f,protocolID:e,keyID:t,counterparty:r},this.originator),b=tu.fromDER([...p]),g=new tW(b.r,b.s,l).toChecksigFormat();return new tZ([{op:g.length,data:g}])},estimateLength:async()=>73}}}class t9{value;constructor(e){this.value=e}async computeFee(e){let t,r=e=>e>0x100000000?9:e>65536?5:e>253?3:1;t=4+r(e.inputs.length);for(let i=0;i<e.inputs.length;i++){let a,n=e.inputs[i];if(t+=40,"object"==typeof n.unlockingScript)a=n.unlockingScript.toBinary().length;else if("object"==typeof n.unlockingScriptTemplate)a=await n.unlockingScriptTemplate.estimateLength(e,i);else throw Error("All inputs must have an unlocking script or an unlocking script template for sat/kb fee computation.");t+=r(a),t+=a}for(let i of(t+=r(e.outputs.length),e.outputs)){t+=8;let e=i.lockingScript.toBinary().length;t+=r(e),t+=e}return Math.ceil((t+=4)/1e3*this.value)}}class re{https;constructor(e){this.https=e}async request(e,t){return await new Promise((r,i)=>{let a=this.https.request(e,t,e=>{let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{let i=e.statusCode>=200&&e.statusCode<=299,a=e.headers["content-type"],n=""!==t&&"string"==typeof a&&a.startsWith("application/json")?JSON.parse(t):t;r({status:e.statusCode,statusText:e.statusMessage,ok:i,data:n})})});a.on("error",e=>{i(e)}),null!==t.data&&void 0!==t.data&&a.write(JSON.stringify(t.data)),a.end()})}}class rt{fetch;constructor(e){this.fetch=e}async request(e,t){let r={method:t.method,headers:t.headers,body:JSON.stringify(t.data)},i=await this.fetch(e,r),a=i.headers.get("Content-Type"),n=a?.startsWith("application/json")?await i.json():await i.text();return{ok:i.ok,status:i.status,statusText:i.statusText,data:n}}}function rr(){let e={async request(){throw Error("No method available to perform HTTP request")}};if("undefined"!=typeof window&&"function"==typeof window.fetch)return new rt(window.fetch.bind(window));if("undefined"==typeof require)return e;try{let e=require("https");return new re(e)}catch(t){return e}}function ri(){return`ts-sdk-${eK(tx(16))}`}class ra{URL;apiKey;deploymentId;callbackUrl;callbackToken;headers;httpClient;constructor(e,t){if(this.URL=e,"string"==typeof t)this.apiKey=t,this.httpClient=rr(),this.deploymentId=ri(),this.callbackToken=void 0,this.callbackUrl=void 0;else{let{apiKey:e,deploymentId:r,httpClient:i,callbackToken:a,callbackUrl:n,headers:s}=t??{};this.apiKey=e,this.httpClient=i??rr(),this.deploymentId=r??ri(),this.callbackToken=a,this.callbackUrl=n,this.headers=s}}requestHeaders(){let e={"Content-Type":"application/json","XDeployment-ID":this.deploymentId};if(null!=this.apiKey&&""!==this.apiKey&&(e.Authorization=`Bearer ${this.apiKey}`),null!=this.callbackUrl&&""!==this.callbackUrl&&(e["X-CallbackUrl"]=this.callbackUrl),null!=this.callbackToken&&""!==this.callbackToken&&(e["X-CallbackToken"]=this.callbackToken),null!=this.headers)for(let t in this.headers)e[t]=this.headers[t];return e}async broadcast(e){let t;try{t=e.toHexEF()}catch(r){if("All inputs must have source transactions when serializing to EF format"===r.message)t=e.toHex();else throw r}let r={method:"POST",headers:this.requestHeaders(),data:{rawTx:t}};try{let e=await this.httpClient.request(`${this.URL}/v1/tx`,r);if(e.ok){let{txid:t,extraInfo:r,txStatus:i,competingTxs:a}=e.data,n={status:"success",txid:t,message:`${i} ${r}`};return null!=a&&(n.competingTxs=a),n}{let t=typeof e.status,r={status:"error",code:"number"===t||"string"===t?e.status.toString():"ERR_UNKNOWN",description:"Unknown error"},i=e.data;if("string"==typeof i)try{i=JSON.parse(e.data)}catch{}return"object"==typeof i&&(null!==i&&(r.more=i),null!=i&&"string"==typeof i.txid&&(r.txid=i.txid),null!=i&&"detail"in i&&"string"==typeof i.detail&&(r.description=i.detail)),r}}catch(e){return{status:"error",code:"500",description:"string"==typeof e.message?e.message:"Internal Server Error"}}}async broadcastMany(e){let t=e.map(e=>{try{return{rawTx:e.toHexEF()}}catch(t){if("All inputs must have source transactions when serializing to EF format"===t.message)return{rawTx:e.toHex()};throw t}}),r={method:"POST",headers:this.requestHeaders(),data:t};try{return(await this.httpClient.request(`${this.URL}/v1/txs`,r)).data}catch(r){let t={status:"error",code:"500",description:"string"==typeof r.message?r.message:"Internal Server Error"};return e.map(()=>t)}}}function rn(e=!1,t={}){return new ra(e?"https://testnet.arc.gorillapool.io":"https://arc.gorillapool.io",t)}class rs{network;apiKey;URL;httpClient;constructor(e="main",t={}){let{apiKey:r,httpClient:i}=t;this.network=e,this.URL=`https://api.whatsonchain.com/v1/bsv/${e}`,this.httpClient=i??rr(),this.apiKey=r??""}async isValidRootForHeight(e,t){let r={method:"GET",headers:this.getHttpHeaders()},i=await this.httpClient.request(`${this.URL}/block/${t}/header`,r);if(i.ok){let{merkleroot:t}=i.data;return t===e}if(404===i.status)return!1;throw Error(`Failed to verify merkleroot for height ${t} because of an error: ${JSON.stringify(i.data)} `)}async currentHeight(){try{let e={method:"GET",headers:this.getHttpHeaders()},t=await this.httpClient.request(`${this.URL}/block/headers`,e);if(t.ok)return t.data[0].height;throw Error(`Failed to get current height because of an error: ${JSON.stringify(t.data)} `)}catch(e){throw Error(`Failed to get current height because of an error: ${e instanceof Error?e.message:String(e)}`)}}getHttpHeaders(){let e={Accept:"application/json"};return"string"==typeof this.apiKey&&""!==this.apiKey.trim()&&(e.Authorization=this.apiKey),e}}function ro(){return new rs}class rc{blockHeight;path;static fromHex(e){return rc.fromBinary(eF(e,"hex"))}static fromReader(e,t=!0){let r,i,a,n=e.readVarIntNum(),s=e.readUInt8(),o=Array(s).fill(null).map(()=>[]);for(let t=0;t<s;t++){for(a=e.readVarIntNum();a>0;){i=e.readVarIntNum(),r=e.readUInt8();let n={offset:i};(1&r)!=0?n.duplicate=!0:((2&r)!=0&&(n.txid=!0),n.hash=eK(e.read(32).reverse())),Array.isArray(o[t])&&0!==o[t].length||(o[t]=[]),o[t].push(n),a--}o[t].sort((e,t)=>e.offset-t.offset)}return new rc(n,o,t)}static fromBinary(e){let t=new eQ(e);return rc.fromReader(t)}static fromCoinbaseTxidAndHeight(e,t){return new rc(t,[[{offset:0,hash:e,txid:!0}]])}constructor(e,t,r=!0){let i;this.blockHeight=e,this.path=t;let a=Array(this.path.length).fill(0).map(()=>new Set);this.path.forEach((e,t)=>{if(0===e.length&&0===t)throw Error(`Empty level at height: ${t}`);let i=new Set;e.forEach(e=>{if(i.has(e.offset))throw Error(`Duplicate offset: ${e.offset}, at height: ${t}`);if(i.add(e.offset),0===t){if(!0!==e.duplicate)for(let t=1;t<this.path.length;t++)a[t].add(e.offset>>t^1)}else if(r&&!a[t].has(e.offset))throw Error(`Invalid offset: ${e.offset}, at height: ${t}, with legal offsets: ${Array.from(a[t]).join(", ")}`)})}),this.path[0].forEach((e,t)=>{if(0===t&&(i=this.computeRoot(e.hash)),i!==this.computeRoot(e.hash))throw Error("Mismatched roots")})}toBinary(){let e=new eZ;e.writeVarIntNum(this.blockHeight);let t=this.path.length;e.writeUInt8(t);for(let r=0;r<t;r++){let t=Object.keys(this.path[r]).length;for(let i of(e.writeVarIntNum(t),this.path[r])){e.writeVarIntNum(i.offset);let t=0;i?.duplicate===!0&&(t|=1),i?.txid!==void 0&&null!==i.txid&&(t|=2),e.writeUInt8(t),(1&t)==0&&e.write(eF(i.hash,"hex").reverse())}}return e.toArray()}toHex(){return eK(this.toBinary())}indexOf(e){let t=this.path[0].find(t=>t.hash===e);if(null==t)throw Error(`Transaction ID ${e} not found in the Merkle Path`);return t.offset}computeRoot(e){if("string"!=typeof e){let t=this.path[0].find(e=>!!e?.hash);if(null==t)throw Error("No valid leaf found in the Merkle Path");e=t.hash}if("string"!=typeof e)throw Error("Transaction ID is undefined");let t=this.indexOf(e);if("number"!=typeof t)throw Error(`This proof does not contain the txid: ${e??"undefined"}`);let r=e=>eK(W(eF(e,"hex").reverse()).reverse()),i=e;if(1===this.path.length&&1===this.path[0].length)return i;for(let e=0;e<this.path.length;e++){this.path[e];let a=t>>e^1,n=this.findOrComputeLeaf(e,a);if("object"!=typeof n)throw Error(`Missing hash for index ${t} at height ${e}`);i=r(!0===n.duplicate?(i??"")+(i??""):a%2!=0?(n.hash??"")+(i??""):(i??"")+(n.hash??""))}return i}findOrComputeLeaf(e,t){let r=e=>eK(W(eF(e,"hex").reverse()).reverse()),i=this.path[e].find(e=>e.offset===t);if(null!=i)return i;if(0===e)return;let a=e-1,n=t<<1,s=this.findOrComputeLeaf(a,n);if(null==s||null==s.hash||""===s.hash)return;let o=this.findOrComputeLeaf(a,n+1);if(null!=o)return{offset:t,hash:r(!0===o.duplicate?s.hash+s.hash:(o.hash??"")+(s.hash??""))}}async verify(e,t){let r=this.computeRoot(e);if(0===this.indexOf(e)){let e=await t.currentHeight();if(this.blockHeight+100<e)return!1}return await t.isValidRootForHeight(r,this.blockHeight)}combine(e){if(this.blockHeight!==e.blockHeight)throw Error("You cannot combine paths which do not have the same block height.");if(this.computeRoot()!==e.computeRoot())throw Error("You cannot combine paths which do not have the same root.");let t=[];for(let r=0;r<this.path.length;r++){t.push([]);for(let e=0;e<this.path[r].length;e++)t[r].push(this.path[r][e]);for(let i=0;i<e.path[r].length;i++)if(void 0===t[r].find(t=>t.offset===e.path[r][i].offset))t[r].push(e.path[r][i]);else if(e.path[r][i]?.txid!==void 0&&e.path[r][i]?.txid!==null){let a=t[r].find(t=>t.offset===e.path[r][i].offset);null!=a&&(a.txid=!0)}}this.path=t,this.trim()}trim(){let e=(e,t)=>{(0===t.length||t.slice(-1)[0]!==e)&&t.push(e)},t=(e,t)=>{for(let r=e.length;r>=0;r--){let i=this.path[t].findIndex(t=>t.offset===e[r]);i>=0&&this.path[t].splice(i,1)}},r=t=>{let r=[];for(let i of t)e(i>>1,r);return r},i=[],a=[];for(let e=0;e<this.path.length;e++)this.path[e].sort((e,t)=>e.offset-t.offset);for(let t=0;t<this.path[0].length;t++){let r=this.path[0][t];if(!0===r.txid)e(r.offset>>1,i);else{let i=r.offset%2==1,n=this.path[0][t+(i?-1:1)];void 0!==n.txid&&null!==n.txid&&n.txid||e(n.offset,a)}}t(a,0);for(let e=1;e<this.path.length;e++)a=i,i=r(i),t(a,e)}}class rl{_bumpIndex;_tx;_rawTx;_txid;inputTxids=[];isValid=void 0;get bumpIndex(){return this._bumpIndex}set bumpIndex(e){this._bumpIndex=e,this.updateInputTxids()}get hasProof(){return void 0!==this._bumpIndex}get isTxidOnly(){return void 0!==this._txid&&null!==this._txid&&null==this._rawTx&&null==this._tx}get txid(){if(void 0!==this._txid&&null!==this._txid&&""!==this._txid)return this._txid;if(null!=this._tx)return this._txid=this._tx.id("hex"),this._txid;if(null!=this._rawTx)return this._txid=eK(W(this._rawTx)),this._txid;throw Error("Internal")}get tx(){return null!=this._tx?this._tx:null!=this._rawTx?(this._tx=rb.fromBinary(this._rawTx),this._tx):void 0}get rawTx(){return null!=this._rawTx?this._rawTx:null!=this._tx?(this._rawTx=this._tx.toBinary(),this._rawTx):void 0}constructor(e,t){"string"==typeof e?this._txid=e:Array.isArray(e)?this._rawTx=e:this._tx=e,this.bumpIndex=t,this.updateInputTxids()}static fromTx(e,t){return new rl(e,t)}static fromRawTx(e,t){return new rl(e,t)}static fromTxid(e,t){return new rl(e,t)}updateInputTxids(){if(this.hasProof||null==this.tx)this.inputTxids=[];else{let e={};for(let t of this.tx.inputs)void 0!==t.sourceTXID&&null!==t.sourceTXID&&""!==t.sourceTXID&&(e[t.sourceTXID]=!0);this.inputTxids=Object.keys(e)}}toWriter(e,r){let i=t=>{e.writeUInt8(t)},a=()=>{if(null==this._txid)throw Error("Transaction ID (_txid) is undefined");e.writeReverse(eF(this._txid,"hex"))},n=()=>{if(null!=this._rawTx)e.write(this._rawTx);else if(null!=this._tx)e.write(this._tx.toBinary());else throw Error("a valid serialized Transaction is expected")},s=()=>{void 0===this.bumpIndex?i(t.RAWTX):(i(t.RAWTX_AND_BUMP_INDEX),e.writeVarIntNum(this.bumpIndex))};r===ru?this.isTxidOnly?(i(t.TXID_ONLY),a()):(void 0!==this.bumpIndex?(i(t.RAWTX_AND_BUMP_INDEX),e.writeVarIntNum(this.bumpIndex)):i(t.RAWTX),n()):(n(),s())}static fromReader(e,r){let i,a,n;if(r===ru){let r=e.readUInt8();r===t.TXID_ONLY?n=rl.fromTxid(eK(e.readReverse(32))):(r===t.RAWTX_AND_BUMP_INDEX&&(a=e.readVarIntNum()),i=rb.fromReader(e),n=rl.fromTx(i,a))}else i=rb.fromReader(e),a=0!==e.readUInt8()?e.readVarIntNum():void 0,n=rl.fromTx(i,a);return n}}function rd(e){if(null==e)throw Error("Expected a valid value, but got undefined.");return e}let rh=0xefbe0001,ru=0xefbe0002,rf=0x1010101;!function(e){e[e.RAWTX=0]="RAWTX",e[e.RAWTX_AND_BUMP_INDEX=1]="RAWTX_AND_BUMP_INDEX",e[e.TXID_ONLY=2]="TXID_ONLY"}(t||(t={}));class rp{bumps=[];txs=[];version=ru;atomicTxid=void 0;constructor(e=ru){this.version=e}findTxid(e){return this.txs.find(t=>t.txid===e)}makeTxidOnly(e){let t=this.txs.findIndex(t=>t.txid===e);if(-1===t)return;let r=this.txs[t];return r.isTxidOnly?r:(this.txs.splice(t,1),r=this.mergeTxidOnly(e))}findBump(e){return this.bumps.find(t=>t.path[0].some(t=>t.hash===e))}findTransactionForSigning(e){let t=this.findTxid(e);if(null!=t&&null!=t.tx){for(let e of t.tx.inputs)if(null==e.sourceTransaction){let t=this.findTxid(rd(e.sourceTXID));null!=t&&(e.sourceTransaction=t.tx)}return t.tx}}findAtomicTransaction(e){let t=this.findTxid(e);if(null==t||null==t.tx)return;let r=(e,t)=>{let i=e.findBump(t.id("hex"));if(null!=i)t.merklePath=i;else for(let i of t.inputs){if(null==i.sourceTransaction){let t=e.findTxid(rd(i.sourceTXID));null!=t&&(i.sourceTransaction=t.tx)}if(null!=i.sourceTransaction){let t=e.findBump(i.sourceTransaction.id("hex"));null!=t?i.sourceTransaction.merklePath=t:r(e,i.sourceTransaction)}}};return r(this,t.tx),t.tx}mergeBump(e){let t;for(let r=0;r<this.bumps.length;r++){let i=this.bumps[r];if(i===e)return r;if(i.blockHeight===e.blockHeight&&i.computeRoot()===e.computeRoot()){i.combine(e),t=r;break}}void 0===t&&(t=this.bumps.length,this.bumps.push(e));let r=this.bumps[t];for(let e of this.txs){let i=e.txid;if(null==e.bumpIndex){for(let a of r.path[0])if(a.hash===i){e.bumpIndex=t,a.txid=!0;break}}}return t}mergeRawTx(e,t){let r=new rl(e,t);return this.removeExistingTxid(r.txid),this.txs.push(r),this.tryToValidateBumpIndex(r),r}mergeTransaction(e){let t,r=e.id("hex");this.removeExistingTxid(r),null!=e.merklePath&&(t=this.mergeBump(e.merklePath));let i=new rl(e,t);if(this.txs.push(i),this.tryToValidateBumpIndex(i),void 0===(t=i.bumpIndex))for(let t of e.inputs)null!=t.sourceTransaction&&this.mergeTransaction(t.sourceTransaction);return i}removeExistingTxid(e){let t=this.txs.findIndex(t=>t.txid===e);t>=0&&this.txs.splice(t,1)}mergeTxidOnly(e){let t=this.txs.find(t=>t.txid===e);return null==t&&(t=new rl(e),this.txs.push(t),this.tryToValidateBumpIndex(t)),t}mergeBeefTx(e){let t=this.findTxid(e.txid);if(e.isTxidOnly&&null==t?t=this.mergeTxidOnly(e.txid):null!=e._tx&&(null==t||t.isTxidOnly)?t=this.mergeTransaction(e._tx):null!=e._rawTx&&(null==t||t.isTxidOnly)&&(t=this.mergeRawTx(e._rawTx)),null==t)throw Error(`Failed to merge BeefTx for txid: ${e.txid}`);return t}mergeBeef(e){let t=Array.isArray(e)?rp.fromBinary(e):e;for(let e of t.bumps)this.mergeBump(e);for(let e of t.txs)this.mergeBeefTx(e)}isValid(e){return this.verifyValid(e).valid}async verify(e,t){let r=this.verifyValid(t);if(!r.valid)return!1;for(let t of Object.keys(r.roots))if(!await e.isValidRootForHeight(r.roots[t],Number(t)))return!1;return!0}verifyValid(e){let t={valid:!1,roots:{}},r=this.sortTxs();if(r.missingInputs.length>0||r.notValid.length>0||r.txidOnly.length>0&&!0!==e||r.withMissingInputs.length>0)return t;let i={};for(let r of this.txs)if(r.isTxidOnly){if(!0!==e)return t;i[r.txid]=!0}let a=(e,r)=>{let i=e.computeRoot(r);return(void 0===t.roots[e.blockHeight]||""===t.roots[e.blockHeight])&&(t.roots[e.blockHeight]=i),t.roots[e.blockHeight]===i};for(let e of this.bumps)for(let r of e.path[0])if(!0===r.txid&&"string"==typeof r.hash&&r.hash.length>0&&(i[r.hash]=!0,!a(e,r.hash)))return t;for(let e of this.txs)if(void 0!==e.bumpIndex&&null==this.bumps[e.bumpIndex].path[0].find(t=>t.hash===e.txid))return t;for(let e of this.txs){for(let r of e.inputTxids)if(!i[r])return t;i[e.txid]=!0}return t.valid=!0,t}toWriter(e){for(let t of(e.writeUInt32LE(this.version),e.writeVarIntNum(this.bumps.length),this.bumps))e.write(t.toBinary());for(let t of(e.writeVarIntNum(this.txs.length),this.txs))t.toWriter(e,this.version)}toBinary(){this.sortTxs();let e=new eZ;return this.toWriter(e),e.toArray()}toBinaryAtomic(e){this.sortTxs();let t=this.findTxid(e);if(null==t)throw Error(`${e} does not exist in this Beef`);let r=this.txs[this.txs.length-1]===t?this:this.clone();if(r!==this){let t=this.txs.findIndex(t=>t.txid===e);r.txs.splice(t+1)}let i=new eZ;return i.writeUInt32LE(rf),i.writeReverse(eF(e,"hex")),r.toWriter(i),i.toArray()}toHex(){return eK(this.toBinary())}static fromReader(e){let t,r=e.readUInt32LE();if(r===rf&&(t=eK(e.readReverse(32)),r=e.readUInt32LE()),r!==rh&&r!==ru)throw Error(`Serialized BEEF must start with ${rh} or ${ru} but starts with ${r}`);let i=new rp(r),a=e.readVarIntNum();for(let t=0;t<a;t++){let t=rc.fromReader(e,!1);i.bumps.push(t)}let n=e.readVarIntNum();for(let t=0;t<n;t++){let t=rl.fromReader(e,r);i.txs.push(t)}return i.atomicTxid=t,i}static fromBinary(e){let t=new eQ(e);return rp.fromReader(t)}static fromString(e,t="hex"){let r=new eQ(eF(e,t));return rp.fromReader(r)}tryToValidateBumpIndex(e){if(void 0!==e.bumpIndex)return!0;let t=e.txid;for(let r=0;r<this.bumps.length;r++){let i=this.bumps[r].path[0].findIndex(e=>e.hash===t);if(i>=0)return e.bumpIndex=r,this.bumps[r].path[0][i].txid=!0,!0}return!1}sortTxs(){let e={},t={},r=[],i=[],a=[];for(let n of this.txs)t[n.txid]=n,n.isValid=n.hasProof,n.isValid?(e[n.txid]=!0,i.push(n)):n.isTxidOnly&&0===n.inputTxids.length?(e[n.txid]=!0,a.push(n)):r.push(n);let n={},s=[],o=r;for(let e of(r=[],o)){let i=!1;for(let r of e.inputTxids)void 0===t[r]&&(n[r]=!0,i=!0);i?s.push(e):r.push(e)}for(;r.length>0;){let t=r;for(let a of(r=[],t))a.inputTxids.every(t=>e[t])?(e[a.txid]=!0,i.push(a)):r.push(a);if(t.length===r.length)break}let c=r;return this.txs=s.concat(c).concat(a).concat(i),{missingInputs:Object.keys(n),notValid:c.map(e=>e.txid),valid:Object.keys(e),withMissingInputs:s.map(e=>e.txid),txidOnly:a.map(e=>e.txid)}}clone(){let e=new rp;return e.version=this.version,e.bumps=Array.from(this.bumps),e.txs=Array.from(this.txs),e}trimKnownTxids(e){for(let t=0;t<this.txs.length;){let r=this.txs[t];r.isTxidOnly&&e.includes(r.txid)?this.txs.splice(t,1):t++}}getValidTxids(){return this.sortTxs().valid}toLogString(){let e="";e+=`BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid().toString()}
|
|
7
|
+
`;let t=-1;for(let r of this.bumps)t++,e+=` BUMP ${t}
|
|
8
|
+
block: ${r.blockHeight}
|
|
9
|
+
txids: [
|
|
10
|
+
${r.path[0].filter(e=>!0===e.txid).map(e=>` '${e.hash??""}'`).join(",\n")}
|
|
11
|
+
]
|
|
12
|
+
`;for(let r of(t=-1,this.txs))t++,e+=` TX ${t}
|
|
13
|
+
txid: ${r.txid}
|
|
14
|
+
`,void 0!==r.bumpIndex&&(e+=` bumpIndex: ${r.bumpIndex}
|
|
15
|
+
`),r.isTxidOnly?e+=" txidOnly\n":e+=` rawTx length=${r.rawTx?.length??0}
|
|
16
|
+
`,r.inputTxids.length>0&&(e+=` inputs: [
|
|
17
|
+
${r.inputTxids.map(e=>` '${e}'`).join(",\n")}
|
|
18
|
+
]
|
|
19
|
+
`);return e}addComputedLeaves(){let e=e=>eK(W(eF(e,"hex").reverse()).reverse());for(let t of this.bumps)for(let r=1;r<t.path.length;r++)for(let i of t.path[r-1])if("string"==typeof i.hash&&(1&i.offset)==0){let a=t.path[r-1].find(e=>e.offset===i.offset+1),n=i.offset>>1;void 0!==a&&"string"==typeof a.hash&&t.path[r].every(e=>e.offset!==n)&&t.path[r].push({offset:n,hash:e(a.hash+i.hash)})}}}class rb{version;inputs;outputs;lockTime;metadata;merklePath;cachedHash;static addPathOrInputs(e,t,r){if("number"==typeof e.pathIndex){let t=r[e.pathIndex];if("object"!=typeof t)throw Error("Invalid merkle path index found in BEEF!");e.tx.merklePath=t}else for(let i of e.tx.inputs){if(void 0===i.sourceTXID)throw Error("Input sourceTXID is undefined");let e=t[i.sourceTXID];if("object"!=typeof e)throw Error(`Reference to unknown TXID in BEEF: ${i.sourceTXID??"undefined"}`);i.sourceTransaction=e.tx,this.addPathOrInputs(e,t,r)}}static fromBEEF(e,t){let{tx:r}=rb.fromAnyBeef(e,t);return r}static fromAtomicBEEF(e){let{tx:t,txid:r,beef:i}=rb.fromAnyBeef(e);if(r!==i.atomicTxid)if(null!=i.atomicTxid)throw Error(`Transaction with TXID ${i.atomicTxid} not found in BEEF data.`);else throw Error("beef must conform to BRC-95 and must contain the subject txid.");return t}static fromAnyBeef(e,t){let r=rp.fromBinary(e);if(r.txs.length<1)throw Error("beef must include at least one transaction.");let i=t??r.atomicTxid??r.txs.slice(-1)[0].txid,a=r.findAtomicTransaction(i);if(null==a)if(null!=t)throw Error(`Transaction with TXID ${i} not found in BEEF data.`);else throw Error("beef does not contain transaction for atomic txid.");return{tx:a,beef:r,txid:i}}static fromEF(e){let t=new eQ(e),r=t.readUInt32LE();if("0000000000ef"!==eK(t.read(6)))throw Error("Invalid EF marker");let i=t.readVarIntNum(),a=[];for(let e=0;e<i;e++){let e=eK(t.readReverse(32)),r=t.readUInt32LE(),i=t.readVarIntNum(),n=t.read(i),s=tZ.fromBinary(n),o=t.readUInt32LE(),c=t.readUInt64LEBn().toNumber(),l=t.readVarIntNum(),d=t.read(l),h=tJ.fromBinary(d),u=new rb(void 0,[],[],void 0);u.outputs=Array(r+1).fill(null),u.outputs[r]={satoshis:c,lockingScript:h},a.push({sourceTransaction:u,sourceTXID:e,sourceOutputIndex:r,unlockingScript:s,sequence:o})}let n=t.readVarIntNum(),s=[];for(let e=0;e<n;e++){let e=t.readUInt64LEBn().toNumber(),r=t.readVarIntNum(),i=t.read(r),a=tJ.fromBinary(i);s.push({satoshis:e,lockingScript:a})}return new rb(r,a,s,t.readUInt32LE())}static parseScriptOffsets(e){let t=new eQ(e),r=[],i=[];t.pos+=4;let a=t.readVarIntNum();for(let e=0;e<a;e++){t.pos+=36;let i=t.readVarIntNum();r.push({vin:e,offset:t.pos,length:i}),t.pos+=i+4}let n=t.readVarIntNum();for(let e=0;e<n;e++){t.pos+=8;let r=t.readVarIntNum();i.push({vout:e,offset:t.pos,length:r}),t.pos+=r}return{inputs:r,outputs:i}}static fromReader(e){let t=e.readUInt32LE(),r=e.readVarIntNum(),i=[];for(let t=0;t<r;t++){let t=eK(e.readReverse(32)),r=e.readUInt32LE(),a=e.readVarIntNum(),n=e.read(a),s=tZ.fromBinary(n),o=e.readUInt32LE();i.push({sourceTXID:t,sourceOutputIndex:r,unlockingScript:s,sequence:o})}let a=e.readVarIntNum(),n=[];for(let t=0;t<a;t++){let t=e.readUInt64LEBn().toNumber(),r=e.readVarIntNum(),i=e.read(r),a=tJ.fromBinary(i);n.push({satoshis:t,lockingScript:a})}return new rb(t,i,n,e.readUInt32LE())}static fromBinary(e){let t=new eQ(e);return rb.fromReader(t)}static fromHex(e){return rb.fromBinary(eF(e,"hex"))}static fromHexEF(e){return rb.fromEF(eF(e,"hex"))}static fromHexBEEF(e,t){return rb.fromBEEF(eF(e,"hex"),t)}constructor(e=1,t=[],r=[],i=0,a=new Map,n){this.version=e,this.inputs=t,this.outputs=r,this.lockTime=i,this.metadata=a,this.merklePath=n}addInput(e){if(void 0===e.sourceTXID&&void 0===e.sourceTransaction)throw Error("A reference to an an input transaction is required. If the input transaction itself cannot be referenced, its TXID must still be provided.");void 0===e.sequence&&(e.sequence=0xffffffff),this.cachedHash=void 0,this.inputs.push(e)}addOutput(e){if(this.cachedHash=void 0,!0!==e.change){if(void 0===e.satoshis)throw Error("either satoshis must be defined or change must be set to true");if(e.satoshis<0)throw Error("satoshis must be a positive integer or zero")}if(null==e.lockingScript)throw Error("lockingScript must be defined");this.outputs.push(e)}addP2PKHOutput(e,t){let r=new t3().lock(e);if(void 0===t)return this.addOutput({lockingScript:r,change:!0});this.addOutput({lockingScript:r,satoshis:t})}updateMetadata(e){this.metadata={...this.metadata,...e}}async fee(e=new t9(1),t="equal"){if(this.cachedHash=void 0,"number"==typeof e){let t=e;e={computeFee:async()=>t}}let r=await e.computeFee(this),i=this.calculateChange(r);if(i<=0){this.outputs=this.outputs.filter(e=>!0!==e.change);return}this.distributeChange(i,t)}calculateChange(e){let t=0;for(let e of this.inputs){if("object"!=typeof e.sourceTransaction)throw Error("Source transactions are required for all inputs during fee computation");t+=e.sourceTransaction.outputs[e.sourceOutputIndex].satoshis??0}for(let r of(t-=e,this.outputs))!0!==r.change&&void 0!==r.satoshis&&(t-=r.satoshis);return t}distributeChange(e,t){let r=0,i=this.outputs.filter(e=>e.change);if("random"===t?r=this.distributeRandomChange(e,i):"equal"===t&&(r=this.distributeEqualChange(e,i)),r<e){let t=this.outputs[this.outputs.length-1];void 0!==t.satoshis?t.satoshis+=e-r:t.satoshis=e-r}}distributeRandomChange(e,t){let r=0,i=e,a=Array(t.length).fill(1);i-=t.length,r+=t.length;for(let e=0;e<t.length-1;e++){let t=this.benfordNumber(0,i);a[e]=a[e]+t,r+=t,i-=t}for(let e of this.outputs)!0===e.change&&(e.satoshis=a.shift());return r}distributeEqualChange(e,t){let r=0,i=Math.floor(e/t.length);for(let e of t)r+=i,e.satoshis=i;return r}benfordNumber(e,t){return Math.floor(e+(t-e)*Math.log10(1+1/(Math.floor(9*Math.random())+1))/Math.log10(10))}getFee(){let e=0;for(let t of this.inputs){if("object"!=typeof t.sourceTransaction)throw Error("Source transactions or sourceSatoshis are required for all inputs to calculate fee");e+=t.sourceTransaction.outputs[t.sourceOutputIndex].satoshis??0}let t=0;for(let e of this.outputs)t+=e.satoshis??0;return e-t}async sign(){for(let e of(this.cachedHash=void 0,this.outputs))if(void 0===e.satoshis)if(!0===e.change)throw Error("There are still change outputs with uncomputed amounts. Use the fee() method to compute the change amounts and transaction fees prior to signing.");else throw Error("One or more transaction outputs is missing an amount. Ensure all output amounts are provided before signing.");let e=await Promise.all(this.inputs.map(async(e,t)=>"object"==typeof this.inputs[t].unlockingScriptTemplate?await this.inputs[t]?.unlockingScriptTemplate?.sign(this,t):await Promise.resolve(void 0)));for(let t=0,r=this.inputs.length;t<r;t++)"object"==typeof this.inputs[t].unlockingScriptTemplate&&(this.inputs[t].unlockingScript=e[t])}async broadcast(e=rn()){return await e.broadcast(this)}toBinary(){let e=new eZ;for(let t of(e.writeUInt32LE(this.version),e.writeVarIntNum(this.inputs.length),this.inputs)){if(void 0===t.sourceTXID)if(null!=t.sourceTransaction)e.write(t.sourceTransaction.hash());else throw Error("sourceTransaction is undefined");else e.writeReverse(eF(t.sourceTXID,"hex"));if(e.writeUInt32LE(t.sourceOutputIndex),null==t.unlockingScript)throw Error("unlockingScript is undefined");let r=t.unlockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r),e.writeUInt32LE(t.sequence??0)}for(let t of(e.writeVarIntNum(this.outputs.length),this.outputs)){e.writeUInt64LE(t.satoshis??0);let r=t.lockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r)}return e.writeUInt32LE(this.lockTime),e.toArray()}toEF(){let e=new eZ;for(let t of(e.writeUInt32LE(this.version),e.write([0,0,0,0,0,239]),e.writeVarIntNum(this.inputs.length),this.inputs)){if(void 0===t.sourceTransaction)throw Error("All inputs must have source transactions when serializing to EF format");if(void 0===t.sourceTXID?e.write(t.sourceTransaction.hash()):e.write(eF(t.sourceTXID,"hex").reverse()),e.writeUInt32LE(t.sourceOutputIndex),null==t.unlockingScript)throw Error("unlockingScript is undefined");let r=t.unlockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r),e.writeUInt32LE(t.sequence??0),e.writeUInt64LE(t.sourceTransaction.outputs[t.sourceOutputIndex].satoshis??0);let i=t.sourceTransaction.outputs[t.sourceOutputIndex].lockingScript.toBinary();e.writeVarIntNum(i.length),e.write(i)}for(let t of(e.writeVarIntNum(this.outputs.length),this.outputs)){e.writeUInt64LE(t.satoshis??0);let r=t.lockingScript.toBinary();e.writeVarIntNum(r.length),e.write(r)}return e.writeUInt32LE(this.lockTime),e.toArray()}toHexEF(){return eK(this.toEF())}toHex(){return eK(this.toBinary())}toHexBEEF(){return eK(this.toBEEF())}toHexAtomicBEEF(){return eK(this.toAtomicBEEF())}hash(e){let t;return(null!=this.cachedHash?t=this.cachedHash:(t=W(this.toBinary()),this.cachedHash=t),"hex"===e)?eK(t):t}id(e){let t=[...this.hash()];return(t.reverse(),"hex"===e)?eK(t):t}async verify(e=ro(),t,r){let i=new Set,a=[this];for(;a.length>0;){let n=a.shift(),s=n?.id("hex")??"";if(null!=s&&""!==s&&i.has(s))continue;if("object"==typeof n?.merklePath){if("scripts only"===e){null!=s&&i.add(s);continue}else if(await n.merklePath.verify(s,e)){i.add(s);continue}}if(void 0!==t){if(void 0===n)throw Error("Transaction is undefined");let e=rb.fromEF(n.toEF());if(delete e.outputs[0].satoshis,e.outputs[0].change=!0,await e.fee(t),n.getFee()<e.getFee())throw Error(`Verification failed because the transaction ${s} has an insufficient fee and has not been mined.`)}let o=0;if(void 0===n)throw Error("Transaction is undefined");for(let e=0;e<n.inputs.length;e++){let t=n.inputs[e];if("object"!=typeof t.sourceTransaction)throw Error(`Verification failed because the input at index ${e} of transaction ${s} is missing an associated source transaction. This source transaction is required for transaction verification because there is no merkle proof for the transaction spending a UTXO it contains.`);if("object"!=typeof t.unlockingScript)throw Error(`Verification failed because the input at index ${e} of transaction ${s} is missing an associated unlocking script. This script is required for transaction verification because there is no merkle proof for the transaction spending the UTXO.`);let c=t.sourceTransaction.outputs[t.sourceOutputIndex];o+=c.satoshis??0;let l=t.sourceTransaction.id("hex");i.has(l)||a.push(t.sourceTransaction);let d=n.inputs.filter((t,r)=>r!==e);if(void 0===t.sourceTXID&&(t.sourceTXID=l),!new t2({sourceTXID:t.sourceTXID,sourceOutputIndex:t.sourceOutputIndex,lockingScript:c.lockingScript,sourceSatoshis:c.satoshis??0,transactionVersion:n.version,otherInputs:d,unlockingScript:t.unlockingScript,inputSequence:t.sequence??0,inputIndex:e,outputs:n.outputs,lockTime:n.lockTime,memoryLimit:r}).validate())return!1}let c=0;for(let e of n.outputs){if("number"!=typeof e.satoshis)throw Error("Every output must have a defined amount during transaction verification.");c+=e.satoshis}if(c>o)return!1;i.add(s)}return!0}toBEEF(e){let t=new eZ;t.writeUInt32LE(rh);let r=[],i=[],a=t=>{let n={tx:t},s="object"==typeof t.merklePath;if(s){let e=!1;for(let i=0;i<r.length;i++){if(r[i]===t.merklePath){n.pathIndex=i,e=!0;break}if(null!==t.merklePath&&void 0!==t.merklePath&&r[i].blockHeight===t.merklePath.blockHeight&&r[i].computeRoot()===t.merklePath.computeRoot()){r[i].combine(t.merklePath),n.pathIndex=i,e=!0;break}}e||(n.pathIndex=r.length,null!==t.merklePath&&void 0!==t.merklePath&&r.push(t.merklePath))}if(i.some(e=>e.tx.id("hex")===t.id("hex"))||i.unshift(n),!s)for(let r=0;r<t.inputs.length;r++){let i=t.inputs[r];if("object"==typeof i.sourceTransaction)a(i.sourceTransaction);else if(!1===e)throw Error("A required source transaction is missing!")}};for(let e of(a(this),t.writeVarIntNum(r.length),r))t.write(e.toBinary());for(let e of(t.writeVarIntNum(i.length),i))t.write(e.tx.toBinary()),"number"==typeof e.pathIndex?(t.writeUInt8(1),t.writeVarIntNum(e.pathIndex)):t.writeUInt8(0);return t.toArray()}toAtomicBEEF(e){let t=new eZ;t.writeUInt32LE(0x1010101),t.write(this.hash());let r=this.toBEEF(e);return t.write(r),t.toArray()}}function rg(e){return"success"===e.status}function rm(e){return"error"===e.status}let ry=class extends rp{knownTo={};constructor(e){if(super(),null!=e)for(let t of e)this.addParty(t)}isParty(e){return Object.keys(this.knownTo).includes(e)}addParty(e){if(this.isParty(e))throw Error(`Party ${e} already exists.`);this.knownTo[e]={}}getKnownTxidsForParty(e){let t=this.knownTo[e];if(void 0===t)throw Error(`Party ${e} is unknown.`);return Object.keys(t)}getTrimmedBeefForParty(e){let t=this.getKnownTxidsForParty(e),r=this.clone();return r.trimKnownTxids(t),r}addKnownTxidsForParty(e,t){this.isParty(e)||this.addParty(e);let r=this.knownTo[e];for(let e of t)r[e]=!0,this.mergeTxidOnly(e)}mergeBeefFromParty(e,t){let r=Array.isArray(t)?rp.fromBinary(t):t,i=r.getValidTxids();this.mergeBeef(r),this.addKnownTxidsForParty(e,i)}};class rw{network;URL;httpClient;constructor(e="main",t=rr()){this.network=e,this.URL=`https://api.whatsonchain.com/v1/bsv/${e}/tx/raw`,this.httpClient=t}async broadcast(e){let t=e.toHex();try{let e=await this.httpClient.request(this.URL,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/plain"},data:{txhex:t}});if(!e.ok)return{status:"error",code:e.status.toString()??"ERR_UNKNOWN",description:e.data??"Unknown error"};{let t=e.data;return{status:"success",txid:t,message:"broadcast successful"}}}catch(e){return{status:"error",code:"500",description:"string"==typeof e.message?e.message:"Internal Server Error"}}}}class rI{https;constructor(e){this.https=e}async request(e,t){return await new Promise((r,i)=>{let a=this.https.request(e,t,e=>{let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{let i=e.statusCode>=200&&e.statusCode<=299,a=e.headers["content-type"],n=""!==t&&"string"==typeof a&&a.startsWith("application/json")?JSON.parse(t):t;r({status:e.statusCode,statusText:e.statusMessage,ok:i,data:n})})});a.on("error",e=>{i(e)}),null!==t.data&&void 0!==t.data&&a.write(Buffer.from(t.data)),a.end()})}}class rv{fetch;constructor(e){this.fetch=e}async request(e,t){let r={method:t.method,headers:t.headers,body:t.data},i=await this.fetch(e,r),a=await i.text();return{ok:i.ok,status:i.status,statusText:i.statusText,data:a}}}function rk(){let e={async request(){throw Error("No method available to perform HTTP request")}};if("undefined"!=typeof window&&"function"==typeof window.fetch)return new rv(window.fetch.bind(window));if("undefined"==typeof require)return e;try{let e=require("https");return new rI(e)}catch(t){return e}}class rS{URL;httpClient;constructor(e,t=rk()){this.URL=e,this.httpClient=t}async broadcast(e){let t={method:"POST",headers:{"Content-Type":"application/octet-stream"},data:new Blob([new Uint8Array(e.toEF())])};try{let r=await this.httpClient.request(this.URL,t);if(!r.ok)return{status:"error",code:r.status.toString()??"ERR_UNKNOWN",description:r.data??"Unknown error"};{let t=e.id("hex");return{status:"success",txid:t,message:"broadcast successful"}}}catch(e){return{status:"error",code:"500",description:"string"==typeof e.message?e.message:"Internal Server Error"}}}}class rx{baseUrl;httpClient;apiKey;constructor(e,t={}){let{httpClient:r,apiKey:i}=t;this.baseUrl=e,this.httpClient=r??rr(),this.apiKey=i??""}async isValidRootForHeight(e,t){let r={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.apiKey}`},data:[{blockHeight:t,merkleRoot:e}]};try{let e=await this.httpClient.request(`${this.baseUrl}/api/v1/chain/merkleroot/verify`,r);if(e.ok)return"CONFIRMED"===e.data.confirmationState;throw Error(`Failed to verify merkleroot for height ${t} because of an error: ${JSON.stringify(e.data)}`)}catch(e){throw Error(`Failed to verify merkleroot for height ${t} because of an error: ${e instanceof Error?e.message:String(e)}`)}}async currentHeight(){let e={method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${this.apiKey}`}};try{let t=await this.httpClient.request(`${this.baseUrl}/api/v1/chain/tip/longest`,e);if(t.ok&&t.data&&"number"==typeof t.data.height)return t.data.height;throw Error(`Failed to get current height because of an error: ${JSON.stringify(t.data)}`)}catch(e){throw Error(`Failed to get current height because of an error: ${e instanceof Error?e.message:String(e)}`)}}}let rP="42423301",rE=(e,t,r)=>{let i="object"!=typeof r;if(i){let e=new th,t=new tO(1),i=e.g.mul(t);r=new tv(i.x,i.y)}let a=tx(32),n=eW(a),s=`2-message signing-${n}`,o=t.deriveChild(r,s).sign(e).toDER(),c=t.toPublicKey().encode(!0);return[...eF(rP,"hex"),...c,...i?[0]:r.encode(!0),...a,...o]},rN=(e,t,r)=>{let i=new eQ(t),a=eK(i.read(4));if(a!==rP)throw Error(`Message version mismatch: Expected ${rP}, received ${a}`);let n=tv.fromString(eK(i.read(33))),[s]=i.read(1);if(0===s)r=new tO(1);else{let e=eK([s,...i.read(32)]);if("object"!=typeof r)throw Error(`This signature can only be verified with knowledge of a specific private key. The associated public key is: ${e}`);let t=r.toPublicKey().encode(!0,"hex");if(e!==t)throw Error(`The recipient public key is ${t} but the signature requres the recipient to have public key ${e}`)}let o=eW(i.read(32)),c=eK(i.read(i.bin.length-i.pos)),l=tu.fromDER(c,"hex"),d=`2-message signing-${o}`;return n.deriveChild(r,d).verify(e,l)},rO="42421033",r_=(e,t,r)=>{let i=tx(32),a=eW(i),n=`2-message encryption-${a}`,s=t.deriveChild(r,n),o=r.deriveChild(t,n),c=new tz(s.deriveSharedSecret(o).encode(!0).slice(1)).encrypt(e),l=t.toPublicKey().encode(!0);return[...eF(rO,"hex"),...l,...r.encode(!0),...i,...c]},rA=(e,t)=>{let r=new eQ(e),i=eK(r.read(4));if(i!==rO)throw Error(`Message version mismatch: Expected ${rO}, received ${i}`);let a=tv.fromString(eK(r.read(33))),n=eK(r.read(33)),s=t.toPublicKey().encode(!0,"hex");if(n!==s)throw Error(`The encrypted message expects a recipient public key of ${n}, but the provided key is ${s}`);let o=eW(r.read(32)),c=r.read(r.bin.length-r.pos),l=`2-message encryption-${o}`,d=a.deriveChild(t,l),h=t.deriveChild(a,l);return new tz(d.deriveSharedSecret(h).encode(!0).slice(1)).decrypt(c)},rT="Bitcoin Signed Message:\n",rC=e=>{let t=new eZ;return t.writeVarIntNum(rT.length),t.write(eF(rT,"utf8")),t.writeVarIntNum(e.length),t.write(e),W(t.toArray())},rV=(e,t,r="base64")=>{let i=rC(e),a=tw(new p(i),t,!0);if("raw"===r)return a;let n=new p(i),s=a.CalculateRecoveryFactor(t.toPublicKey(),n);return a.toCompact(s,!0,"base64")},rR=(e,t,r)=>tI(new p(rC(e)),t,r);class rU{versionBytesNum;depth;parentFingerPrint;childIndex;chainCode;privKey;pubKey;constants={pubKey:0x488b21e,privKey:0x488ade4};constructor(e,t,r,i,a,n,s){this.versionBytesNum=e,this.depth=t,this.parentFingerPrint=r,this.childIndex=i,this.chainCode=a,this.privKey=n,this.pubKey=s}fromRandom(){return this.versionBytesNum=this.constants.privKey,this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=tx(32),this.privKey=tO.fromRandom(),this.pubKey=this.privKey.toPublicKey(),this}static fromRandom(){return new this().fromRandom()}static fromString(e){return new this().fromString(e)}fromString(e){let t=eJ(e);return this.fromBinary([...t.prefix,...t.data])}static fromSeed(e){return new this().fromSeed(e)}fromSeed(e){if(e.length<16)throw Error("Need more than 128 bits of entropy");if(e.length>64)throw Error("More than 512 bits of entropy is nonstandard");let t=X(eF("Bitcoin seed","utf8"),e);return this.depth=0,this.parentFingerPrint=[0,0,0,0],this.childIndex=0,this.chainCode=t.slice(32,64),this.versionBytesNum=this.constants.privKey,this.privKey=new tO(t.slice(0,32)),this.pubKey=this.privKey.toPublicKey(),this}static fromBinary(e){return new this().fromBinary(e)}fromBinary(e){if(78!==e.length)throw Error("incorrect bip32 data length");let t=new eQ(e);this.versionBytesNum=t.readUInt32BE(),this.depth=t.readUInt8(),this.parentFingerPrint=t.read(4),this.childIndex=t.readUInt32BE(),this.chainCode=t.read(32);let r=t.read(33),i=this.versionBytesNum===this.constants.privKey,a=this.versionBytesNum===this.constants.pubKey;if(i&&0===r[0])this.privKey=new tO(r.slice(1,33)),this.pubKey=this.privKey.toPublicKey();else if(a&&(2===r[0]||3===r[0]))this.pubKey=tv.fromString(eK(r));else throw Error("Invalid key");return this}toString(){return eY(this.toBinary(),[])}derive(e){if("m"===e)return this;let t=e.split("/"),r=this;for(let[e,i]of t.entries()){if(0===e){if("m"!==i)throw Error("invalid path");continue}if(parseInt(i.replace("'",""),10).toString()!==i.replace("'",""))throw Error("invalid path");let t=i.length>1&&"'"===i[i.length-1],a=0x7fffffff&parseInt(t?i.slice(0,i.length-1):i,10);t&&(a+=0x80000000),r=r.deriveChild(a)}return r}deriveChild(e){if("number"!=typeof e)throw Error("i must be a number");let t=[];t.push(e>>24&255),t.push(e>>16&255),t.push(e>>8&255),t.push(255&e);let r=[...t],i=(0x80000000&e)!=0,a=this.versionBytesNum===this.constants.privKey;if(i&&(null===this.privKey||void 0===this.privKey||!a))throw Error("Cannot do private key derivation without private key");let n=null;if(null!==this.privKey&&void 0!==this.privKey){let e=null;e=i?[0,...this.privKey.toArray("be",32),...r]:[...this.pubKey.encode(!0),...r];let t=X(this.chainCode,e),a=new p(t.slice(0,32)),s=t.slice(32,64),o=a.add(this.privKey).mod(new th().n);(n=new rU).chainCode=s,n.privKey=new tO(o.toArray()),n.pubKey=n.privKey.toPublicKey()}else{let e=[...this.pubKey.encode(!0),...r],t=X(this.chainCode,e),i=new p(t.slice(0,32)),a=t.slice(32,64),s=new th().g.mul(i),o=this.pubKey,c=s.add(o),l=new tv(c.x,c.y);(n=new rU).chainCode=a,n.pubKey=l}n.childIndex=e;let s=j(this.pubKey.encode(!0));return n.parentFingerPrint=s.slice(0,4),n.versionBytesNum=this.versionBytesNum,n.depth=this.depth+1,n}toPublic(){let e=new rU(this.versionBytesNum,this.depth,this.parentFingerPrint,this.childIndex,this.chainCode,this.privKey,this.pubKey);return e.versionBytesNum=this.constants.pubKey,e.privKey=void 0,e}toBinary(){let e=this.versionBytesNum===this.constants.privKey,t=this.versionBytesNum===this.constants.pubKey;if(e)return new eZ().writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).writeUInt8(0).write(this.privKey.toArray("be",32)).toArray();if(t)return new eZ().writeUInt32BE(this.versionBytesNum).writeUInt8(this.depth).write(this.parentFingerPrint).writeUInt32BE(this.childIndex).write(this.chainCode).write(this.pubKey.encode(!0)).toArray();throw Error("bip32: invalid versionBytesNum byte")}isPrivate(){return this.versionBytesNum===this.constants.privKey}}let rD={value:["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"],space:" "};class rB{mnemonic;seed;Wordlist;constructor(e,t,r=rD){this.mnemonic=e??"",this.seed=t??[],this.Wordlist=r}toBinary(){let e=new eZ;if(""!==this.mnemonic){let t=eF(this.mnemonic,"utf8");e.writeVarIntNum(t.length),e.write(t)}else e.writeVarIntNum(0);return this.seed.length>0?(e.writeVarIntNum(this.seed.length),e.write(this.seed)):e.writeVarIntNum(0),e.toArray()}fromBinary(e){let t=new eQ(e),r=t.readVarIntNum();r>0&&(this.mnemonic=ez(t.read(r),"utf8"));let i=t.readVarIntNum();return i>0&&(this.seed=t.read(i)),this}fromRandom(e){if((null==e||isNaN(e)||0===e)&&(e=128),e%32!=0)throw Error("bits must be multiple of 32");if(e<128)throw Error("bits must be at least 128");let t=tx(e/8);return this.entropy2Mnemonic(t),this.mnemonic2Seed(),this}static fromRandom(e){return new this().fromRandom(e)}fromEntropy(e){return this.entropy2Mnemonic(e),this}static fromEntropy(e){return new this().fromEntropy(e)}fromString(e){return this.mnemonic=e,this}static fromString(e){return new this().fromString(e)}toString(){return this.mnemonic}toSeed(e){return this.mnemonic2Seed(e),this.seed}entropy2Mnemonic(e){if(e.length<16)throw Error("Entropy is less than 128 bits. It must be 128 bits or more.");let t=$(e),r="",i=8*e.length;for(let t=0;t<e.length;t++)r+=("00000000"+e[t].toString(2)).slice(-8);let a=t[0].toString(2);if((r+=a=("00000000"+a).slice(-8).slice(0,i/32)).length%11!=0)throw Error("internal error - entropy not an even multiple of 11 bits - "+r.length.toString());let n="";for(let e=0;e<r.length/11;e++){""!==n&&(n+=this.Wordlist.space);let t=parseInt(r.slice(11*e,(e+1)*11),2);n+=this.Wordlist.value[t]}return this.mnemonic=n,this}check(){let e=this.mnemonic.split(this.Wordlist.space),t="";for(let r=0;r<e.length;r++){let i=this.Wordlist.value.indexOf(e[r]);if(i<0)return!1;t+=("00000000000"+i.toString(2)).slice(-11)}if(t.length%11!=0)throw Error("internal error - entropy not an even multiple of 11 bits - "+t.length.toString());let r=t.length/33,i=t.slice(-r),a=t.slice(0,t.length-r),n=[];for(let e=0;e<a.length/8;e++)n.push(parseInt(t.slice(8*e,(e+1)*8),2));let s=$(n.slice(0,a.length/8))[0].toString(2);return(s=("00000000"+s).slice(-8).slice(0,r))===i}mnemonic2Seed(e=""){let t=this.mnemonic;if(!this.check())throw Error("Mnemonic does not pass the check - was the mnemonic typed incorrectly? Are there extra spaces?");if("string"!=typeof e)throw Error("passphrase must be a string or undefined");t=t.normalize("NFKD"),e=e.normalize("NFKD");let r=eF(t,"utf8"),i=[...eF("mnemonic","utf8"),...eF(e,"utf8")];return this.seed=eL(r,i,2048,64,"sha512"),this}isValid(e=""){let t;try{this.mnemonic2Seed(e),t=!0}catch{t=!1}return t}static isValid(e,t=""){return new rB(e).isValid(t)}}function rL(e){let t,r,i,a;0===this._tables[0][0][0]&&this._precompute();let n=this._tables[0][4],s=this._tables[1],o=e.length,c=1;if(4!==o&&6!==o&&8!==o)throw Error("invalid aes key size");for(this._key=[r=e.slice(0),i=[]],a=o;a<4*o+28;a++)t=r[a-1],(a%o==0||8===o&&a%o==4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],a%o==0&&(t=t<<8^t>>>24^c<<24,c=c<<1^(c>>7)*283)),r[a]=r[a-o]^t;for(let e=0;a>0;e++,a--)t=r[(3&e)!=0?a:a-4],a<=4||e<4?i[e]=t:i[e]=s[0][n[t>>>24]]^s[1][n[t>>16&255]]^s[2][n[t>>8&255]]^s[3][n[255&t]]}rL.prototype={encrypt:function(e){return this._crypt(e,0)},decrypt:function(e){return this._crypt(e,1)},_tables:[[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)],[new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256),new Uint32Array(256)]],_precompute:function(){let e,t,r,i,a,n,s,o,c=this._tables[0],l=this._tables[1],d=c[4],h=l[4],u=new Uint8Array(256),f=new Uint8Array(256);for(e=0;e<256;e++)f[(u[e]=e<<1^(e>>7)*283)^e]=e;for(t=r=0;0===d[t];t^=0!==i?i:1,r=0!==f[r]?f[r]:1)for(e=0,n=(n=r^r<<1^r<<2^r<<3^r<<4)>>8^255&n^99,d[t]=n,h[n]=t,o=0x1010101*u[a=u[i=u[t]]]^65537*a^257*i^0x1010100*t,s=257*u[n]^0x1010100*n;e<4;e++)c[e][t]=s=s<<24^s>>>8,l[e][n]=o=o<<24^o>>>8},_crypt:function(e,t){let r,i,a,n;if(4!==e.length)throw Error("invalid aes block size");let s=this._key[t],o=e[0]^s[0],c=e[1===t?3:1]^s[1],l=e[2]^s[2],d=e[1===t?1:3]^s[3],h=s.length/4-2,u=4,f=new Uint32Array(4),p=this._tables[t],b=p[0],g=p[1],m=p[2],y=p[3],w=p[4];for(n=0;n<h;n++)r=b[o>>>24]^g[c>>16&255]^m[l>>8&255]^y[255&d]^s[u],i=b[c>>>24]^g[l>>16&255]^m[d>>8&255]^y[255&o]^s[u+1],a=b[l>>>24]^g[d>>16&255]^m[o>>8&255]^y[255&c]^s[u+2],d=b[d>>>24]^g[o>>16&255]^m[c>>8&255]^y[255&l]^s[u+3],u+=4,o=r,c=i,l=a;for(n=0;n<4;n++)f[1===t?3&-n:n]=w[o>>>24]<<24^w[c>>16&255]<<16^w[l>>8&255]<<8^w[255&d]^s[u++],r=o,o=c,c=l,l=d,d=r;return f}};class rH{static encrypt(e,t){let r=rH.buf2Words(t),i=rH.buf2Words(e),a=new rL(r).encrypt(i);return rH.words2Buf(a)}static decrypt(e,t){let r=rH.buf2Words(e),i=new rL(rH.buf2Words(t)).decrypt(r);return rH.words2Buf(i)}static buf2Words(e){if(e.length%4!=0)throw Error("buf length must be a multiple of 4");let t=[];for(let r=0;r<e.length/4;r++){let i=0x1000000*e[4*r]+(e[4*r+1]<<16|e[4*r+2]<<8|e[4*r+3]);t.push(i)}return t}static words2Buf(e){let t=Array(4*e.length);for(let r=0;r<e.length;r++){let i=e[r];t[4*r]=i>>>24&255,t[4*r+1]=i>>>16&255,t[4*r+2]=i>>>8&255,t[4*r+3]=255&i}return t}}class rK{static buf2BlocksBuf(e,t){let r=t/8,i=[];for(let a=0;a<=e.length/r;a++){let n=e.slice(a*r,a*r+r);n.length<t&&(n=rK.pkcs7Pad(n,t)),i.push(n)}return i}static blockBufs2Buf(e){let t=e[e.length-1];return t=rK.pkcs7Unpad(t),e[e.length-1]=t,e.flat()}static encrypt(e,t,r,i){let a=8*t.length,n=rK.buf2BlocksBuf(e,a);return rK.encryptBlocks(n,t,r,i).flat()}static decrypt(e,t,r,i){let a=t.length,n=[];for(let t=0;t<e.length/a;t++)n.push(e.slice(t*a,t*a+a));let s=rK.decryptBlocks(n,t,r,i);return rK.blockBufs2Buf(s)}static encryptBlock(e,t,r,i){let a=rK.xorBufs(e,t);return r.encrypt(a,i)}static decryptBlock(e,t,r,i){let a=r.decrypt(e,i);return rK.xorBufs(a,t)}static encryptBlocks(e,t,r,i){let a=[];for(let n=0;n<e.length;n++){let s=e[n],o=rK.encryptBlock(s,t,r,i);a.push(o),t=o}return a}static decryptBlocks(e,t,r,i){let a=[];for(let n=0;n<e.length;n++){let s=e[n],o=rK.decryptBlock(s,t,r,i);a.push(o),t=s}return a}static pkcs7Pad(e,t){let r=t/8-e.length,i=Array(r);return i.fill(r),[...e,...i]}static pkcs7Unpad(e){let t=e[e.length-1],r=e.slice(e.length-t,e.length),i=Array(t);if(i.fill(t),eK(r)!==eK(i))throw Error("invalid padding");return e.slice(0,e.length-t)}static xorBufs(e,t){if(e.length!==t.length)throw Error("bufs must have the same length");let r=Array(e.length);for(let i=0;i<e.length;i++)r[i]=e[i]^t[i];return r}}class rF{static encrypt(e,t,r,i=!0){r=r??tx(16);let a=rK.encrypt(e,r,rH,t);return i?[...r,...a]:[...a]}static decrypt(e,t,r){if(null!=r)return rK.decrypt(e,r,rH,t);{r=e.slice(0,16);let i=e.slice(16);return rK.decrypt(i,r,rH,t)}}}class rq{static ivkEkM(e,t){let r=t.mul(e),i=z(new tv(r.x,r.y).encode(!0));return{iv:i.slice(0,16),kE:i.slice(16,32),kM:i.slice(32,64)}}static electrumEncrypt(e,t,r,i=!1){let a,n=null;null==r&&(r=tO.fromRandom()),i||(n=r.toPublicKey().encode(!0));let{iv:s,kE:o,kM:c}=rq.ivkEkM(r,t),l=rF.encrypt(e,o,s,!1),d=eF("BIE1","utf8"),h=G(c,a=null!=n&&n.length>0?[...d,...n,...l]:[...d,...l]);return[...a,...h]}static electrumDecrypt(e,t,r){if("BIE1"!==ez(e.slice(0,4),"utf8"))throw Error("Invalid Magic");let i=4,a=null;if(e.length-i-32>=33){let t=e[i];2===t||3===t?(a=e.slice(i,i+33),i+=33):4===t&&(a=e.slice(i,i+65),i+=65)}if(null!==a)null==r&&(r=tv.fromString(eK(a)));else if(null==r)throw Error("Sender public key is required");let{iv:n,kE:s,kM:o}=rq.ivkEkM(t,r),c=e.slice(i,e.length-32),l=e.slice(e.length-32,e.length),d=G(o,e.slice(0,e.length-32));if(eK(l)!==eK(d))throw Error("Invalid checksum");return rF.decrypt(c,s,n)}static bitcoreEncrypt(e,t,r,i){null==r&&(r=tO.fromRandom()),null==i&&(i=tx(16));let a=r,n=r.toPublicKey().encode(!0),s=z(t.mul(a).getX().toArray("be",32)),o=s.slice(0,32),c=s.slice(32,64),l=rF.encrypt(e,o,i),d=G(c,[...l]);return[...n,...l,...d]}static bitcoreDecrypt(e,t){let r=tv.fromString(eK(e.slice(0,33))).mul(t);if(r.eq(new td(0,0)))throw Error("P equals 0");let i=z(r.getX().toArray("be",32)),a=i.slice(0,32),n=i.slice(32,64),s=e.slice(33,e.length-32),o=e.slice(e.length-32,e.length),c=G(n,s);if(eK(o)!==eK(c))throw Error("Invalid checksum");return[...rF.decrypt(s,a)]}}function rM(e,t){let r=new rb(0,[],[],0);return r.outputs=Array(e.vout+1).fill(null),r.outputs[e.vout]={satoshis:e.satoshis,lockingScript:tJ.fromHex(e.script)},{sourceTransaction:r,sourceTXID:e.txid,sourceOutputIndex:e.vout,unlockingScriptTemplate:t,sequence:0xffffffff}}class r${static generate(e,t){let r=this.withDefaultOptions(t);return rz(e,this.getCounter(r.timestamp,r.period),r)}static validate(e,t,r){let i=this.withDefaultValidateOptions(r);if((t=t.trim()).length!==i.digits)return!1;let a=this.getCounter(i.timestamp,i.period),n=[a];for(let e=1;e<=i.skew;e++)n.push(a+e),n.push(a-e);for(let r of n)if(t===rz(e,r,i))return!0;return!1}static getCounter(e,t){return Math.floor(Math.floor(e/1e3)/t)}static withDefaultOptions(e){return{digits:2,algorithm:"SHA-1",period:30,timestamp:Date.now(),...e}}static withDefaultValidateOptions(e){return{skew:1,...this.withDefaultOptions(e)}}}function rz(e,t,r){let i=(function(e,t,r){switch(r){case"SHA-1":return new K(e).update(t);case"SHA-256":return new H(e).update(t);case"SHA-512":return new F(e).update(t);default:throw Error("unsupported HMAC algorithm")}})(e,new p(t).toArray("be",8),r.algorithm).digest(),a=15&i[i.length-1];return(0x7fffffff&new p(i.slice(a,a+4)).toNumber()).toString().slice(-r.digits)}!function(e){e[e.Silent=0]="Silent",e[e.App=1]="App",e[e.Counterparty=2]="Counterparty"}(r||(r={}));class rW{cacheSharedSecret;retrieveCachedSharedSecret;rootKey;identityKey;anyone;constructor(e,t,r){this.cacheSharedSecret=t,this.retrieveCachedSharedSecret=r,this.anyone=new tO(1).toPublicKey(),"anyone"===e?this.rootKey=new tO(1):this.rootKey=e,this.identityKey=this.rootKey.toPublicKey().toString()}derivePublicKey(e,t,r,i=!1){return(r=this.normalizeCounterparty(r),i)?this.rootKey.deriveChild(r,this.computeInvoiceNumber(e,t),this.cacheSharedSecret,this.retrieveCachedSharedSecret).toPublicKey():r.deriveChild(this.rootKey,this.computeInvoiceNumber(e,t),this.cacheSharedSecret,this.retrieveCachedSharedSecret)}derivePrivateKey(e,t,r){return r=this.normalizeCounterparty(r),this.rootKey.deriveChild(r,this.computeInvoiceNumber(e,t),this.cacheSharedSecret,this.retrieveCachedSharedSecret)}deriveSymmetricKey(e,t,r){r="anyone"===r?this.anyone:this.normalizeCounterparty(r);let i=this.derivePublicKey(e,t,r),a=this.derivePrivateKey(e,t,r);return new tz(a.deriveSharedSecret(i)?.x?.toArray()??[])}revealCounterpartySecret(e){if("self"===e)throw Error("Counterparty secrets cannot be revealed for counterparty=self.");e=this.normalizeCounterparty(e);let t=this.rootKey.toPublicKey();if(this.rootKey.deriveChild(t,"test").toHex()===this.rootKey.deriveChild(e,"test").toHex())throw Error("Counterparty secrets cannot be revealed for counterparty=self.");return this.rootKey.deriveSharedSecret(e).encode(!0)}revealSpecificSecret(e,t,r){e=this.normalizeCounterparty(e);let i=this.rootKey.deriveSharedSecret(e),a=eF(this.computeInvoiceNumber(t,r),"utf8");return G(i.encode(!0),a)}normalizeCounterparty(e){if(null==e)throw Error("counterparty must be self, anyone or a public key!");return"self"===e?this.rootKey.toPublicKey():"anyone"===e?new tO(1).toPublicKey():"string"==typeof e?tv.fromString(e):e}computeInvoiceNumber(e,t){let r=e[0];if(!Number.isInteger(r)||r<0||r>2)throw Error("Protocol security level must be 0, 1, or 2");let i=e[1].toLowerCase().trim();if(t.length>800)throw Error("Key IDs must be 800 characters or less");if(t.length<1)throw Error("Key IDs must be 1 character or more");if(i.length>400)if(i.startsWith("specific linkage revelation ")){if(i.length>430)throw Error("Specific linkage revelation protocol names must be 430 characters or less")}else throw Error("Protocol names must be 400 characters or less");if(i.length<5)throw Error("Protocol names must be 5 characters or more");if(i.includes(" "))throw Error('Protocol names cannot contain multiple consecutive spaces (" ")');if(!/^[a-z0-9 ]+$/g.test(i))throw Error("Protocol names can only contain letters, numbers and spaces");if(i.endsWith(" protocol"))throw Error('No need to end your protocol name with " protocol"');return`${r}-${i}-${t}`}}class rj{keyDeriver;cache;maxCacheSize;rootKey;identityKey;constructor(e,t){"anyone"===e?this.rootKey=new tO(1):this.rootKey=e,this.keyDeriver=new rW(this.rootKey,(e,t,r)=>{this.cacheSet(`${e.toString()}-${t.toString()}`,r)},(e,t)=>this.cacheGet(`${e.toString()}-${t.toString()}`)),this.identityKey=this.rootKey.toPublicKey().toString(),this.cache=new Map;let r=t?.maxCacheSize;this.maxCacheSize=null!=r&&!isNaN(r)&&r>0?r:1e3}derivePublicKey(e,t,r,i=!1){let a=this.generateCacheKey("derivePublicKey",e,t,r,i);if(this.cache.has(a)){let e=this.cacheGet(a);if(void 0===e)throw Error("Cached value is undefined");return e}{let n=this.keyDeriver.derivePublicKey(e,t,r,i);return this.cacheSet(a,n),n}}derivePrivateKey(e,t,r){let i=this.generateCacheKey("derivePrivateKey",e,t,r);if(this.cache.has(i)){let e=this.cacheGet(i);if(void 0===e)throw Error("Cached value is undefined");return e}{let a=this.keyDeriver.derivePrivateKey(e,t,r);return this.cacheSet(i,a),a}}deriveSymmetricKey(e,t,r){let i=this.generateCacheKey("deriveSymmetricKey",e,t,r);if(this.cache.has(i)){let e=this.cacheGet(i);if(void 0===e)throw Error("Cached value is undefined");return e}{let a=this.keyDeriver.deriveSymmetricKey(e,t,r);return this.cacheSet(i,a),a}}revealCounterpartySecret(e){let t=this.generateCacheKey("revealCounterpartySecret",e);if(this.cache.has(t)){let e=this.cacheGet(t);if(void 0===e)throw Error("Cached value is undefined");return e}{let r=this.keyDeriver.revealCounterpartySecret(e);return this.cacheSet(t,r),r}}revealSpecificSecret(e,t,r){let i=this.generateCacheKey("revealSpecificSecret",e,t,r);if(this.cache.has(i)){let e=this.cacheGet(i);if(void 0===e)throw Error("Cached value is undefined");return e}{let a=this.keyDeriver.revealSpecificSecret(e,t,r);return this.cacheSet(i,a),a}}generateCacheKey(e,...t){let r=t.map(e=>this.serializeArgument(e)).join("|");return`${e}|${r}`}serializeArgument(e){return e instanceof tv||e instanceof tO?e.toString():Array.isArray(e)?e.map(e=>this.serializeArgument(e)).join(","):"object"==typeof e&&null!==e?JSON.stringify(e):String(e)}cacheGet(e){let t=this.cache.get(e);return this.cache.delete(e),void 0!==t&&this.cache.set(e,t),t}cacheSet(e,t){if(this.cache.size>=this.maxCacheSize){let e=this.cache.keys().next().value;this.cache.delete(e)}this.cache.set(e,t)}}let rG=class{keyDeriver;constructor(e){"string"!=typeof e.identityKey&&(e=new rj(e)),this.keyDeriver=e}async getPublicKey(e){if(e.identityKey){if(null==this.keyDeriver)throw Error("keyDeriver is undefined");return{publicKey:this.keyDeriver.rootKey.toPublicKey().toString()}}if(null==e.protocolID||null==e.keyID||""===e.keyID)throw Error("protocolID and keyID are required if identityKey is false or undefined.");return{publicKey:(this.keyDeriver??(()=>{throw Error("keyDeriver is undefined")})()).derivePublicKey(e.protocolID,e.keyID,e.counterparty??"self",e.forSelf).toString()}}async revealCounterpartyKeyLinkage(e){let{publicKey:t}=await this.getPublicKey({identityKey:!0});if(null==this.keyDeriver)throw Error("keyDeriver is undefined");let r=this.keyDeriver.revealCounterpartySecret(e.counterparty),i=new tj().generateProof(this.keyDeriver.rootKey,this.keyDeriver.rootKey.toPublicKey(),tv.fromString(e.counterparty),td.fromDER(r)),a=[...i.R.encode(!0),...i.SPrime.encode(!0),...i.z.toArray()],n=new Date().toISOString(),{ciphertext:s}=await this.encrypt({plaintext:r,protocolID:[2,"counterparty linkage revelation"],keyID:n,counterparty:e.verifier}),{ciphertext:o}=await this.encrypt({plaintext:a,protocolID:[2,"counterparty linkage revelation"],keyID:n,counterparty:e.verifier});return{prover:t,verifier:e.verifier,counterparty:e.counterparty,revelationTime:n,encryptedLinkage:s,encryptedLinkageProof:o}}async revealSpecificKeyLinkage(e){let{publicKey:t}=await this.getPublicKey({identityKey:!0});if(null==this.keyDeriver)throw Error("keyDeriver is undefined");let r=this.keyDeriver.revealSpecificSecret(e.counterparty,e.protocolID,e.keyID),{ciphertext:i}=await this.encrypt({plaintext:r,protocolID:[2,`specific linkage revelation ${e.protocolID[0]} ${e.protocolID[1]}`],keyID:e.keyID,counterparty:e.verifier}),{ciphertext:a}=await this.encrypt({plaintext:[0],protocolID:[2,`specific linkage revelation ${e.protocolID[0]} ${e.protocolID[1]}`],keyID:e.keyID,counterparty:e.verifier});return{prover:t,verifier:e.verifier,counterparty:e.counterparty,protocolID:e.protocolID,keyID:e.keyID,encryptedLinkage:i,encryptedLinkageProof:a,proofType:0}}async encrypt(e){if(null==this.keyDeriver)throw Error("keyDeriver is undefined");return{ciphertext:this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self").encrypt(e.plaintext)}}async decrypt(e){if(null==this.keyDeriver)throw Error("keyDeriver is undefined");return{plaintext:this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self").decrypt(e.ciphertext)}}async createHmac(e){if(null==this.keyDeriver)throw Error("keyDeriver is undefined");return{hmac:G(this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self").toArray(),e.data)}}async verifyHmac(e){if(null==this.keyDeriver)throw Error("keyDeriver is undefined");let t=G(this.keyDeriver.deriveSymmetricKey(e.protocolID,e.keyID,e.counterparty??"self").toArray(),e.data).toString()===e.hmac.toString();if(!t){let e=Error("HMAC is not valid");throw e.code="ERR_INVALID_HMAC",e}return{valid:t}}async createSignature(e){if(null==e.hashToDirectlySign&&null==e.data)throw Error("args.data or args.hashToDirectlySign must be valid");let t=e.hashToDirectlySign??$(e.data??[]),r=(this.keyDeriver??(()=>{throw Error("keyDeriver is undefined")})()).derivePrivateKey(e.protocolID,e.keyID,e.counterparty??"anyone");return{signature:tw(new p(t),r,!0).toDER()}}async verifySignature(e){if(null==e.hashToDirectlyVerify&&null==e.data)throw Error("args.data or args.hashToDirectlyVerify must be valid");let t=e.hashToDirectlyVerify??$(e.data??[]),r=(this.keyDeriver??(()=>{throw Error("keyDeriver is undefined")})()).derivePublicKey(e.protocolID,e.keyID,e.counterparty??"self",e.forSelf),i=tI(new p(t),tu.fromDER(e.signature),r);if(!i){let e=Error("Signature is not valid");throw e.code="ERR_INVALID_SIGNATURE",e}return{valid:i}}};class rX{CWI;constructor(){if("object"!=typeof window)throw Error("The window.CWI substrate requires a global window object.");if("object"!=typeof window.CWI)throw Error("The window.CWI interface does not appear to be bound to the window object.");this.CWI=window.CWI}async createAction(e,t){return await this.CWI.createAction(e,t)}async signAction(e,t){return await this.CWI.signAction(e,t)}async abortAction(e,t){return await this.CWI.abortAction(e,t)}async listActions(e,t){return await this.CWI.listActions(e,t)}async internalizeAction(e,t){return await this.CWI.internalizeAction(e,t)}async listOutputs(e,t){return await this.CWI.listOutputs(e,t)}async relinquishOutput(e,t){return await this.CWI.relinquishOutput(e,t)}async getPublicKey(e,t){return await this.CWI.getPublicKey(e,t)}async revealCounterpartyKeyLinkage(e,t){return await this.CWI.revealCounterpartyKeyLinkage(e,t)}async revealSpecificKeyLinkage(e,t){return await this.CWI.revealSpecificKeyLinkage(e,t)}async encrypt(e,t){return await this.CWI.encrypt(e,t)}async decrypt(e,t){return await this.CWI.decrypt(e,t)}async createHmac(e,t){return await this.CWI.createHmac(e,t)}async verifyHmac(e,t){return await this.CWI.verifyHmac(e,t)}async createSignature(e,t){return await this.CWI.createSignature(e,t)}async verifySignature(e,t){return await this.CWI.verifySignature(e,t)}async acquireCertificate(e,t){return await this.CWI.acquireCertificate(e,t)}async listCertificates(e,t){return await this.CWI.listCertificates(e,t)}async proveCertificate(e,t){return await this.CWI.proveCertificate(e,t)}async relinquishCertificate(e,t){return await this.CWI.relinquishCertificate(e,t)}async discoverByIdentityKey(e,t){return await this.CWI.discoverByIdentityKey(e,t)}async discoverByAttributes(e,t){return await this.CWI.discoverByAttributes(e,t)}async isAuthenticated(e,t){return await this.CWI.isAuthenticated(e,t)}async waitForAuthentication(e,t){return await this.CWI.waitForAuthentication(e,t)}async getHeight(e,t){return await this.CWI.getHeight(e,t)}async getHeaderForHeight(e,t){return await this.CWI.getHeaderForHeight(e,t)}async getNetwork(e,t){return await this.CWI.getNetwork(e,t)}async getVersion(e,t){return await this.CWI.getVersion(e,t)}}class rY extends Error{code;isError=!0;constructor(e,t=1,r){super(e),this.code=t,this.name=this.constructor.name,null!=r&&""!==r?this.stack=r:Error.captureStackTrace(this,this.constructor)}}!function(e){e[e.unknownError=1]="unknownError",e[e.unsupportedAction=2]="unsupportedAction",e[e.invalidHmac=3]="invalidHmac",e[e.invalidSignature=4]="invalidSignature",e[e.reviewActions=5]="reviewActions"}(i||(i={}));let rJ=rY;class rZ{domain;constructor(e="*"){if("object"!=typeof window)throw Error("The XDM substrate requires a global window object.");if("function"!=typeof window.postMessage)throw Error("The window object does not seem to support postMessage calls.");this.domain=e}async invoke(e,t){return await new Promise((r,i)=>{let a=eW(tx(12)),n=e=>{"CWI"===e.data.type&&e.isTrusted&&e.data.id===a&&!0!==e.data.isInvocation&&("function"==typeof window.removeEventListener&&window.removeEventListener("message",n),"error"===e.data.status?i(new rY(e.data.description,e.data.code)):r(e.data.result))};window.addEventListener("message",n),window.parent.postMessage({type:"CWI",isInvocation:!0,id:a,call:e,args:t},this.domain)})}async createAction(e){return await this.invoke("createAction",e)}async signAction(e){return await this.invoke("signAction",e)}async abortAction(e){return await this.invoke("abortAction",e)}async listActions(e){return await this.invoke("listActions",e)}async internalizeAction(e){return await this.invoke("internalizeAction",e)}async listOutputs(e){return await this.invoke("listOutputs",e)}async relinquishOutput(e){return await this.invoke("relinquishOutput",e)}async getPublicKey(e){return await this.invoke("getPublicKey",e)}async revealCounterpartyKeyLinkage(e){return await this.invoke("revealCounterpartyKeyLinkage",e)}async revealSpecificKeyLinkage(e){return await this.invoke("revealSpecificKeyLinkage",e)}async encrypt(e){return await this.invoke("encrypt",e)}async decrypt(e){return await this.invoke("decrypt",e)}async createHmac(e){return await this.invoke("createHmac",e)}async verifyHmac(e){return await this.invoke("verifyHmac",e)}async createSignature(e){return await this.invoke("createSignature",e)}async verifySignature(e){return await this.invoke("verifySignature",e)}async acquireCertificate(e){return await this.invoke("acquireCertificate",e)}async listCertificates(e){return await this.invoke("listCertificates",e)}async proveCertificate(e){return await this.invoke("proveCertificate",e)}async relinquishCertificate(e){return await this.invoke("relinquishCertificate",e)}async discoverByIdentityKey(e){return await this.invoke("discoverByIdentityKey",e)}async discoverByAttributes(e){return await this.invoke("discoverByAttributes",e)}async isAuthenticated(e){return await this.invoke("isAuthenticated",e)}async waitForAuthentication(e){return await this.invoke("waitForAuthentication",e)}async getHeight(e){return await this.invoke("getHeight",e)}async getHeaderForHeight(e){return await this.invoke("getHeaderForHeight",e)}async getNetwork(e){return await this.invoke("getNetwork",e)}async getVersion(e){return await this.invoke("getVersion",e)}}class rQ{type;serialNumber;subject;certifier;revocationOutpoint;fields;signature;constructor(e,t,r,i,a,n,s){this.type=e,this.serialNumber=t,this.subject=r,this.certifier=i,this.revocationOutpoint=a,this.fields=n,this.signature=s}toBinary(e=!0){let t=new eZ,r=eF(this.type,"base64");t.write(r);let i=eF(this.serialNumber,"base64");t.write(i);let a=eF(this.subject,"hex");t.write(a);let n=eF(this.certifier,"hex");t.write(n);let[s,o]=this.revocationOutpoint.split("."),c=eF(s,"hex");t.write(c),t.writeVarIntNum(Number(o));let l=Object.keys(this.fields).sort();for(let e of(t.writeVarIntNum(l.length),l)){let r=this.fields[e],i=eF(e,"utf8");t.writeVarIntNum(i.length),t.write(i);let a=eF(r,"utf8");t.writeVarIntNum(a.length),t.write(a)}if(e&&(this.signature??"").length>0){let e=eF(this.signature,"hex");t.write(e)}return t.toArray()}static fromBinary(e){let t,r=new eQ(e),i=eW(r.read(32)),a=eW(r.read(32)),n=eK(r.read(33)),s=eK(r.read(33)),o=eK(r.read(32)),c=r.readVarIntNum(),l=`${o}.${c}`,d=r.readVarIntNum(),h={};for(let e=0;e<d;e++){let e=r.readVarIntNum(),t=e$(r.read(e)),i=r.readVarIntNum(),a=e$(r.read(i));h[t]=a}if(!r.eof()){let e=r.read();t=tu.fromDER(e).toString("hex")}return new rQ(i,a,n,s,l,h,t)}async verify(){let e=new rG("anyone"),t=this.toBinary(!1),r=this.signature??"",{valid:i}=await e.verifySignature({signature:eF(r,"hex"),data:t,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`,counterparty:this.certifier});return i}async sign(e){if(null!=this.signature&&this.signature.length>0)throw Error(`Certificate has already been signed! Signature present: ${this.signature}`);this.certifier=(await e.getPublicKey({identityKey:!0})).publicKey;let t=this.toBinary(!1),{signature:r}=await e.createSignature({data:t,protocolID:[2,"certificate signature"],keyID:`${this.type} ${this.serialNumber}`});this.signature=eK(r)}static getCertificateFieldEncryptionDetails(e,t){return{protocolID:[2,"certificate field encryption"],keyID:t?`${t} ${e}`:e}}}!function(e){e[e.createAction=1]="createAction",e[e.signAction=2]="signAction",e[e.abortAction=3]="abortAction",e[e.listActions=4]="listActions",e[e.internalizeAction=5]="internalizeAction",e[e.listOutputs=6]="listOutputs",e[e.relinquishOutput=7]="relinquishOutput",e[e.getPublicKey=8]="getPublicKey",e[e.revealCounterpartyKeyLinkage=9]="revealCounterpartyKeyLinkage",e[e.revealSpecificKeyLinkage=10]="revealSpecificKeyLinkage",e[e.encrypt=11]="encrypt",e[e.decrypt=12]="decrypt",e[e.createHmac=13]="createHmac",e[e.verifyHmac=14]="verifyHmac",e[e.createSignature=15]="createSignature",e[e.verifySignature=16]="verifySignature",e[e.acquireCertificate=17]="acquireCertificate",e[e.listCertificates=18]="listCertificates",e[e.proveCertificate=19]="proveCertificate",e[e.relinquishCertificate=20]="relinquishCertificate",e[e.discoverByIdentityKey=21]="discoverByIdentityKey",e[e.discoverByAttributes=22]="discoverByAttributes",e[e.isAuthenticated=23]="isAuthenticated",e[e.waitForAuthentication=24]="waitForAuthentication",e[e.getHeight=25]="getHeight",e[e.getHeaderForHeight=26]="getHeaderForHeight",e[e.getNetwork=27]="getNetwork",e[e.getVersion=28]="getVersion"}(a||(a={}));let r0=a;class r1{wire;constructor(e){this.wire=e}async transmit(e,t="",r=[]){let i=new eZ;i.writeUInt8(r0[e]);let a=eF(t,"utf8");i.writeUInt8(a.length),i.write(a),r.length>0&&i.write(r);let n=i.toArray(),s=new eQ(await this.wire.transmitToWallet(n)),o=s.readUInt8();if(0===o)return s.read();{let e=s.readVarIntNum(),t=e$(s.read(e)),r=s.readVarIntNum();throw new rY(t,o,e$(s.read(r)))}}async createAction(e,t){let r=new eZ,i=eF(e.description,"utf8");if(r.writeVarIntNum(i.length),r.write(i),null!=e.inputBEEF?(r.writeVarIntNum(e.inputBEEF.length),r.write(e.inputBEEF)):r.writeVarIntNum(-1),null!=e.inputs)for(let t of(r.writeVarIntNum(e.inputs.length),e.inputs)){if(r.write(this.encodeOutpoint(t.outpoint)),null!=t.unlockingScript&&""!==t.unlockingScript){let e=eF(t.unlockingScript,"hex");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1),r.writeVarIntNum(t.unlockingScriptLength??0);let e=eF(t.inputDescription,"utf8");r.writeVarIntNum(e.length),r.write(e),"number"==typeof t.sequenceNumber?r.writeVarIntNum(t.sequenceNumber):r.writeVarIntNum(-1)}else r.writeVarIntNum(-1);if(null!=e.outputs)for(let t of(r.writeVarIntNum(e.outputs.length),e.outputs)){let e=eF(t.lockingScript,"hex");r.writeVarIntNum(e.length),r.write(e),r.writeVarIntNum(t.satoshis);let i=eF(t.outputDescription,"utf8");if(r.writeVarIntNum(i.length),r.write(i),null!=t.basket&&""!==t.basket){let e=eF(t.basket,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if(null!=t.customInstructions&&""!==t.customInstructions){let e=eF(t.customInstructions,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if(null!=t.tags)for(let e of(r.writeVarIntNum(t.tags.length),t.tags)){let t=eF(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(-1)}else r.writeVarIntNum(-1);if("number"==typeof e.lockTime?r.writeVarIntNum(e.lockTime):r.writeVarIntNum(-1),"number"==typeof e.version?r.writeVarIntNum(e.version):r.writeVarIntNum(-1),null!=e.labels)for(let t of(r.writeVarIntNum(e.labels.length),e.labels)){let e=eF(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if(null!=e.options){if(r.writeInt8(1),"boolean"==typeof e.options.signAndProcess?r.writeInt8(+!!e.options.signAndProcess):r.writeInt8(-1),"boolean"==typeof e.options.acceptDelayedBroadcast?r.writeInt8(+!!e.options.acceptDelayedBroadcast):r.writeInt8(-1),"known"===e.options.trustSelf?r.writeInt8(1):r.writeInt8(-1),null!=e.options.knownTxids)for(let t of(r.writeVarIntNum(e.options.knownTxids.length),e.options.knownTxids)){let e=eF(t,"hex");r.write(e)}else r.writeVarIntNum(-1);if("boolean"==typeof e.options.returnTXIDOnly?r.writeInt8(+!!e.options.returnTXIDOnly):r.writeInt8(-1),"boolean"==typeof e.options.noSend?r.writeInt8(+!!e.options.noSend):r.writeInt8(-1),null!=e.options.noSendChange)for(let t of(r.writeVarIntNum(e.options.noSendChange.length),e.options.noSendChange))r.write(this.encodeOutpoint(t));else r.writeVarIntNum(-1);if(null!=e.options.sendWith)for(let t of(r.writeVarIntNum(e.options.sendWith.length),e.options.sendWith)){let e=eF(t,"hex");r.write(e)}else r.writeVarIntNum(-1);"boolean"==typeof e.options.randomizeOutputs?r.writeInt8(+!!e.options.randomizeOutputs):r.writeInt8(-1)}else r.writeInt8(0);let a=new eQ(await this.transmit("createAction",t,r.toArray())),n={};if(1===a.readInt8()&&(n.txid=eK(a.read(32))),1===a.readInt8()){let e=a.readVarIntNum();n.tx=a.read(e)}let s=a.readVarIntNum();if(s>=0){n.noSendChange=[];for(let e=0;e<s;e++){let e=this.readOutpoint(a);n.noSendChange.push(e)}}let o=a.readVarIntNum();if(o>=0){n.sendWithResults=[];for(let e=0;e<o;e++){let e=eK(a.read(32)),t=a.readInt8(),r="unproven";1===t?r="unproven":2===t?r="sending":3===t&&(r="failed"),n.sendWithResults.push({txid:e,status:r})}}if(1===a.readInt8()){let e=a.readVarIntNum(),t=a.read(e),r=a.readVarIntNum();n.signableTransaction={tx:t,reference:eW(a.read(r))}}return n}async signAction(e,t){let r=new eZ,i=Object.keys(e.spends);for(let t of(r.writeVarIntNum(i.length),i)){r.writeVarIntNum(Number(t));let i=e.spends[Number(t)],a=eF(i.unlockingScript,"hex");r.writeVarIntNum(a.length),r.write(a),"number"==typeof i.sequenceNumber?r.writeVarIntNum(i.sequenceNumber):r.writeVarIntNum(-1)}let a=eF(e.reference,"base64");if(r.writeVarIntNum(a.length),r.write(a),null!=e.options)if(r.writeInt8(1),"boolean"==typeof e.options.acceptDelayedBroadcast?r.writeInt8(+!!e.options.acceptDelayedBroadcast):r.writeInt8(-1),"boolean"==typeof e.options.returnTXIDOnly?r.writeInt8(+!!e.options.returnTXIDOnly):r.writeInt8(-1),"boolean"==typeof e.options.noSend?r.writeInt8(+!!e.options.noSend):r.writeInt8(-1),null!=e.options.sendWith)for(let t of(r.writeVarIntNum(e.options.sendWith.length),e.options.sendWith)){let e=eF(t,"hex");r.write(e)}else r.writeVarIntNum(-1);else r.writeInt8(0);let n=new eQ(await this.transmit("signAction",t,r.toArray())),s={};if(1===n.readInt8()&&(s.txid=eK(n.read(32))),1===n.readInt8()){let e=n.readVarIntNum();s.tx=n.read(e)}let o=n.readVarIntNum();if(o>=0){s.sendWithResults=[];for(let e=0;e<o;e++){let e=eK(n.read(32)),t=n.readInt8(),r="unproven";1===t?r="unproven":2===t?r="sending":3===t&&(r="failed"),s.sendWithResults.push({txid:e,status:r})}}return s}async abortAction(e,t){return await this.transmit("abortAction",t,eF(e.reference,"base64")),{aborted:!0}}async listActions(e,t){let r=new eZ;for(let t of(r.writeVarIntNum(e.labels.length),e.labels)){let e=eF(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}for(let t of("any"===e.labelQueryMode?r.writeInt8(1):"all"===e.labelQueryMode?r.writeInt8(2):r.writeInt8(-1),[e.includeLabels,e.includeInputs,e.includeInputSourceLockingScripts,e.includeInputUnlockingScripts,e.includeOutputs,e.includeOutputLockingScripts]))"boolean"==typeof t?r.writeInt8(+!!t):r.writeInt8(-1);"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1);let i=new eQ(await this.transmit("listActions",t,r.toArray())),a=i.readVarIntNum(),n=[];for(let e=0;e<a;e++){let e,t=eK(i.read(32)),r=i.readVarIntNum(),a=i.readInt8();switch(a){case 1:e="completed";break;case 2:e="unprocessed";break;case 3:e="sending";break;case 4:e="unproven";break;case 5:e="unsigned";break;case 6:e="nosend";break;case 7:e="nonfinal";break;case 8:e="failed";break;default:throw Error(`Unknown status code: ${a}`)}let s=1===i.readInt8(),o=i.readVarIntNum(),c={txid:t,satoshis:r,status:e,isOutgoing:s,description:e$(i.read(o)),version:0,lockTime:0},l=i.readVarIntNum();if(l>=0){c.labels=[];for(let e=0;e<l;e++){let e=i.readVarIntNum(),t=i.read(e);c.labels.push(e$(t))}}c.version=i.readVarIntNum(),c.lockTime=i.readVarIntNum();let d=i.readVarIntNum();if(d>=0){c.inputs=[];for(let e=0;e<d;e++){let e,t,r=this.readOutpoint(i),a=i.readVarIntNum(),n=i.readVarIntNum();n>=0&&(e=eK(i.read(n)));let s=i.readVarIntNum();s>=0&&(t=eK(i.read(s)));let o=i.readVarIntNum(),l=e$(i.read(o)),d=i.readVarIntNum();c.inputs.push({sourceOutpoint:r,sourceSatoshis:a,sourceLockingScript:e,unlockingScript:t,inputDescription:l,sequenceNumber:d})}}let h=i.readVarIntNum();if(h>=0){c.outputs=[];for(let e=0;e<h;e++){let e,t,r,a=i.readVarIntNum(),n=i.readVarIntNum(),s=i.readVarIntNum();s>=0&&(e=eK(i.read(s)));let o=1===i.readInt8(),l=i.readVarIntNum(),d=e$(i.read(l)),h=i.readVarIntNum();h>=0&&(t=e$(i.read(h)));let u=i.readVarIntNum(),f=[];if(u>=0)for(let e=0;e<u;e++){let e=i.readVarIntNum(),t=i.read(e);f.push(e$(t))}let p=i.readVarIntNum();p>=0&&(r=e$(i.read(p))),c.outputs.push({outputIndex:a,satoshis:n,lockingScript:e,spendable:o,outputDescription:d,basket:t,tags:f,customInstructions:r})}}n.push(c)}return{totalActions:a,actions:n}}async internalizeAction(e,t){let r=new eZ;for(let t of(r.writeVarIntNum(e.tx.length),r.write(e.tx),r.writeVarIntNum(e.outputs.length),e.outputs))if(r.writeVarIntNum(t.outputIndex),"wallet payment"===t.protocol){if(null==t.paymentRemittance)throw Error("Payment remittance is required for wallet payment");r.writeUInt8(1),r.write(eF(t.paymentRemittance.senderIdentityKey,"hex"));let e=eF(t.paymentRemittance.derivationPrefix,"base64");r.writeVarIntNum(e.length),r.write(e);let i=eF(t.paymentRemittance.derivationSuffix,"base64");r.writeVarIntNum(i.length),r.write(i)}else{r.writeUInt8(2);let e=eF(t.insertionRemittance?.basket,"utf8");if(r.writeVarIntNum(e.length),r.write(e),"string"==typeof t.insertionRemittance?.customInstructions&&""!==t.insertionRemittance.customInstructions){let e=eF(t.insertionRemittance.customInstructions,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);if("object"==typeof t.insertionRemittance?.tags)for(let e of(r.writeVarIntNum(t.insertionRemittance.tags.length),t.insertionRemittance.tags)){let t=eF(e,"utf8");r.writeVarIntNum(t.length),r.write(t)}else r.writeVarIntNum(0)}if("object"==typeof e.labels)for(let t of(r.writeVarIntNum(e.labels.length),e.labels)){let e=eF(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}else r.writeVarIntNum(-1);let i=eF(e.description);return r.writeVarIntNum(i.length),r.write(i),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),await this.transmit("internalizeAction",t,r.toArray()),{accepted:!0}}async listOutputs(e,t){let r,i=new eZ,a=eF(e.basket,"utf8");if(i.writeVarIntNum(a.length),i.write(a),"object"==typeof e.tags)for(let t of(i.writeVarIntNum(e.tags.length),e.tags)){let e=eF(t,"utf8");i.writeVarIntNum(e.length),i.write(e)}else i.writeVarIntNum(0);"all"===e.tagQueryMode?i.writeInt8(1):"any"===e.tagQueryMode?i.writeInt8(2):i.writeInt8(-1),"locking scripts"===e.include?i.writeInt8(1):"entire transactions"===e.include?i.writeInt8(2):i.writeInt8(-1),"boolean"==typeof e.includeCustomInstructions?i.writeInt8(+!!e.includeCustomInstructions):i.writeInt8(-1),"boolean"==typeof e.includeTags?i.writeInt8(+!!e.includeTags):i.writeInt8(-1),"boolean"==typeof e.includeLabels?i.writeInt8(+!!e.includeLabels):i.writeInt8(-1),"number"==typeof e.limit?i.writeVarIntNum(e.limit):i.writeVarIntNum(-1),"number"==typeof e.offset?i.writeVarIntNum(e.offset):i.writeVarIntNum(-1),i.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1);let n=new eQ(await this.transmit("listOutputs",t,i.toArray())),s=n.readVarIntNum(),o=n.readVarIntNum();o>=0&&(r=n.read(o));let c=[];for(let e=0;e<s;e++){let e={spendable:!0,outpoint:this.readOutpoint(n),satoshis:n.readVarIntNum()},t=n.readVarIntNum();t>=0&&(e.lockingScript=eK(n.read(t)));let r=n.readVarIntNum();r>=0&&(e.customInstructions=e$(n.read(r)));let i=n.readVarIntNum();if(-1!==i){let t=[];for(let e=0;e<i;e++){let e=n.readVarIntNum();t.push(e$(n.read(e)))}e.tags=t}let a=n.readVarIntNum();if(-1!==a){let t=[];for(let e=0;e<a;e++){let e=n.readVarIntNum();t.push(e$(n.read(e)))}e.labels=t}c.push(e)}return{totalOutputs:s,BEEF:r,outputs:c}}async relinquishOutput(e,t){let r=new eZ,i=eF(e.basket,"utf8");return r.writeVarIntNum(i.length),r.write(i),r.write(this.encodeOutpoint(e.output)),await this.transmit("relinquishOutput",t,r.toArray()),{relinquished:!0}}encodeOutpoint(e){let t=new eZ,[r,i]=e.split(".");return t.write(eF(r,"hex")),t.writeVarIntNum(Number(i)),t.toArray()}readOutpoint(e){let t=eK(e.read(32)),r=e.readVarIntNum();return`${t}.${r}`}async getPublicKey(e,t){let i=new eZ;return i.writeUInt8(+!!e.identityKey),e.identityKey?i.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason)):(i.write(this.encodeKeyRelatedParams(e.protocolID??=[r.Silent,"default"],e.keyID??="",e.counterparty,e.privileged,e.privilegedReason)),"boolean"==typeof e.forSelf?i.writeInt8(+!!e.forSelf):i.writeInt8(-1)),i.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),{publicKey:eK(await this.transmit("getPublicKey",t,i.toArray()))}}async revealCounterpartyKeyLinkage(e,t){let r=new eZ;r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason)),r.write(eF(e.counterparty,"hex")),r.write(eF(e.verifier,"hex"));let i=new eQ(await this.transmit("revealCounterpartyKeyLinkage",t,r.toArray())),a=eK(i.read(33)),n=eK(i.read(33)),s=eK(i.read(33)),o=i.readVarIntNum(),c=e$(i.read(o)),l=i.readVarIntNum(),d=i.read(l),h=i.readVarIntNum();return{prover:a,verifier:n,counterparty:s,revelationTime:c,encryptedLinkage:d,encryptedLinkageProof:i.read(h)}}async revealSpecificKeyLinkage(e,t){let r=new eZ;r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.write(eF(e.verifier,"hex"));let i=new eQ(await this.transmit("revealSpecificKeyLinkage",t,r.toArray())),a=eK(i.read(33)),n=eK(i.read(33)),s=eK(i.read(33)),o=i.readUInt8(),c=i.readVarIntNum(),l=e$(i.read(c)),d=i.readVarIntNum(),h=e$(i.read(d)),u=i.readVarIntNum(),f=i.read(u),p=i.readVarIntNum();return{prover:a,verifier:n,counterparty:s,protocolID:[o,l],keyID:h,encryptedLinkage:f,encryptedLinkageProof:i.read(p),proofType:i.readUInt8()}}async encrypt(e,t){let r=new eZ;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.writeVarIntNum(e.plaintext.length),r.write(e.plaintext),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),{ciphertext:await this.transmit("encrypt",t,r.toArray())}}async decrypt(e,t){let r=new eZ;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.writeVarIntNum(e.ciphertext.length),r.write(e.ciphertext),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),{plaintext:await this.transmit("decrypt",t,r.toArray())}}async createHmac(e,t){let r=new eZ;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.writeVarIntNum(e.data.length),r.write(e.data),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),{hmac:await this.transmit("createHmac",t,r.toArray())}}async verifyHmac(e,t){let r=new eZ;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),r.write(e.hmac),r.writeVarIntNum(e.data.length),r.write(e.data),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),await this.transmit("verifyHmac",t,r.toArray()),{valid:!0}}async createSignature(e,t){let r=new eZ;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),"object"==typeof e.data?(r.writeUInt8(1),r.writeVarIntNum(e.data.length),r.write(e.data)):(r.writeUInt8(2),r.write(e.hashToDirectlySign??=[])),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),{signature:await this.transmit("createSignature",t,r.toArray())}}async verifySignature(e,t){let r=new eZ;return r.write(this.encodeKeyRelatedParams(e.protocolID,e.keyID,e.counterparty,e.privileged,e.privilegedReason)),"boolean"==typeof e.forSelf?r.writeInt8(+!!e.forSelf):r.writeInt8(-1),r.writeVarIntNum(e.signature.length),r.write(e.signature),"object"==typeof e.data?(r.writeUInt8(1),r.writeVarIntNum(e.data.length),r.write(e.data)):(r.writeUInt8(2),r.write(e.hashToDirectlyVerify??[])),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1),await this.transmit("verifySignature",t,r.toArray()),{valid:!0}}encodeKeyRelatedParams(e,t,r,i,a){let n=new eZ;n.writeUInt8(e[0]);let s=eF(e[1],"utf8");n.writeVarIntNum(s.length),n.write(s);let o=eF(t,"utf8");return n.writeVarIntNum(o.length),n.write(o),"string"!=typeof r?n.writeUInt8(0):"self"===r?n.writeUInt8(11):"anyone"===r?n.writeUInt8(12):n.write(eF(r,"hex")),n.write(this.encodePrivilegedParams(i,a)),n.toArray()}async acquireCertificate(e,t){let r=new eZ;r.write(eF(e.type,"base64")),r.write(eF(e.certifier,"hex"));let i=Object.entries(e.fields);for(let[e,t]of(r.writeVarIntNum(i.length),i)){let i=eF(e,"utf8"),a=eF(t,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(a.length),r.write(a)}if(r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason)),r.writeUInt8("direct"===e.acquisitionProtocol?1:2),"direct"===e.acquisitionProtocol){r.write(eF(e.serialNumber,"base64")),r.write(this.encodeOutpoint(e.revocationOutpoint??""));let t=eF(e.signature,"hex");r.writeVarIntNum(t.length),r.write(t);let i="certifier"!==e.keyringRevealer?eF(e.keyringRevealer,"hex"):[11];r.write(i);let a=Object.keys(e.keyringForSubject??{});r.writeVarIntNum(a.length);for(let t=0;t<a.length;t++){let i=eF(a[t],"utf8");r.writeVarIntNum(i.length),r.write(i);let n=eF(e.keyringForSubject?.[a[t]],"base64");r.writeVarIntNum(n.length),r.write(n)}}else{let t=eF(e.certifierUrl,"utf8");r.writeVarIntNum(t.length),r.write(t)}let a=await this.transmit("acquireCertificate",t,r.toArray()),n=rQ.fromBinary(a);return{...n,signature:n.signature}}encodePrivilegedParams(e,t){let r=new eZ;if("boolean"==typeof e?r.writeInt8(+!!e):r.writeInt8(-1),"string"==typeof t){let e=eF(t,"utf8");r.writeInt8(e.length),r.write(e)}else r.writeInt8(-1);return r.toArray()}async listCertificates(e,t){let r=new eZ;r.writeVarIntNum(e.certifiers.length);for(let t=0;t<e.certifiers.length;t++)r.write(eF(e.certifiers[t],"hex"));r.writeVarIntNum(e.types.length);for(let t=0;t<e.types.length;t++)r.write(eF(e.types[t],"base64"));"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason));let i=new eQ(await this.transmit("listCertificates",t,r.toArray())),a=i.readVarIntNum(),n=[];for(let e=0;e<a;e++){let e=i.readVarIntNum(),t=i.read(e),r=rQ.fromBinary(t);n.push({...r,signature:r.signature})}return{totalCertificates:a,certificates:n}}async proveCertificate(e,t){let r=new eZ,i=eF(e.certificate.type,"base64");r.write(i);let a=eF(e.certificate.subject,"hex");r.write(a);let n=eF(e.certificate.serialNumber,"base64");r.write(n);let s=eF(e.certificate.certifier,"hex");r.write(s);let o=this.encodeOutpoint(e.certificate.revocationOutpoint??"");r.write(o);let c=eF(e.certificate.signature,"hex");r.writeVarIntNum(c.length),r.write(c);let l=Object.entries(e.certificate.fields??{});for(let[e,t]of(r.writeVarIntNum(l.length),l)){let i=eF(e,"utf8"),a=eF(t,"utf8");r.writeVarIntNum(i.length),r.write(i),r.writeVarIntNum(a.length),r.write(a)}for(let t of(r.writeVarIntNum(e.fieldsToReveal.length),e.fieldsToReveal)){let e=eF(t,"utf8");r.writeVarIntNum(e.length),r.write(e)}r.write(eF(e.verifier,"hex")),r.write(this.encodePrivilegedParams(e.privileged,e.privilegedReason));let d=new eQ(await this.transmit("proveCertificate",t,r.toArray())),h=d.readVarIntNum(),u={};for(let e=0;e<h;e++){let e=d.readVarIntNum(),t=e$(d.read(e)),r=d.readVarIntNum();u[t]=eW(d.read(r))}return{keyringForVerifier:u}}async relinquishCertificate(e,t){let r=new eZ,i=eF(e.type,"base64");r.write(i);let a=eF(e.serialNumber,"base64");r.write(a);let n=eF(e.certifier,"hex");return r.write(n),await this.transmit("relinquishCertificate",t,r.toArray()),{relinquished:!0}}parseDiscoveryResult(e){let t=new eQ(e),r=t.readVarIntNum(),i=[];for(let e=0;e<r;e++){let e=t.readVarIntNum(),r=t.read(e),a=rQ.fromBinary(r),n=t.readVarIntNum(),s=e$(t.read(n)),o=t.readVarIntNum(),c=e$(t.read(o)),l=t.readVarIntNum(),d=e$(t.read(l)),h=t.readUInt8(),u={},f=t.readVarIntNum();for(let e=0;e<f;e++){let e=t.readVarIntNum(),r=e$(t.read(e)),i=t.readVarIntNum();u[r]=t.read(i)}let p={},b=t.readVarIntNum();for(let e=0;e<b;e++){let e=t.readVarIntNum(),r=e$(t.read(e)),i=t.readVarIntNum();p[r]=e$(t.read(i))}i.push({...a,signature:a.signature,certifierInfo:{iconUrl:c,name:s,description:d,trust:h},publiclyRevealedKeyring:u,decryptedFields:p})}return{totalCertificates:r,certificates:i}}async discoverByIdentityKey(e,t){let r=new eZ;r.write(eF(e.identityKey,"hex")),"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1);let i=await this.transmit("discoverByIdentityKey",t,r.toArray());return this.parseDiscoveryResult(i)}async discoverByAttributes(e,t){let r=new eZ,i=Object.keys(e.attributes);r.writeVarIntNum(i.length);for(let t=0;t<i.length;t++)r.writeVarIntNum(i[t].length),r.write(eF(i[t],"utf8")),r.writeVarIntNum(e.attributes[i[t]].length),r.write(eF(e.attributes[i[t]],"utf8"));"number"==typeof e.limit?r.writeVarIntNum(e.limit):r.writeVarIntNum(-1),"number"==typeof e.offset?r.writeVarIntNum(e.offset):r.writeVarIntNum(-1),r.writeInt8("boolean"==typeof e.seekPermission?+!!e.seekPermission:-1);let a=await this.transmit("discoverByAttributes",t,r.toArray());return this.parseDiscoveryResult(a)}async isAuthenticated(e,t){return{authenticated:1===(await this.transmit("isAuthenticated",t))[0]}}async waitForAuthentication(e,t){return await this.transmit("waitForAuthentication",t),{authenticated:!0}}async getHeight(e,t){return{height:new eQ(await this.transmit("getHeight",t)).readVarIntNum()}}async getHeaderForHeight(e,t){let r=new eZ;return r.writeVarIntNum(e.height),{header:eK(await this.transmit("getHeaderForHeight",t,r.toArray()))}}async getNetwork(e,t){return{network:0===(await this.transmit("getNetwork",t))[0]?"mainnet":"testnet"}}async getVersion(e,t){return{version:e$(await this.transmit("getVersion",t))}}}class r2{baseUrl;httpClient;originator;constructor(e,t="http://localhost:3301",r=fetch){this.baseUrl=t,this.httpClient=r,this.originator=e}async transmitToWallet(e){let t,r=new eQ(e),i=r.readUInt8(),a=r0[i];if(void 0===a||""===a)throw Error(`Invalid call code: ${i}`);let n=r.readUInt8();n>0&&(t=e$(r.read(n)));let s=r.read(),o=await fetch(`${this.baseUrl}/${a}`,{method:"POST",headers:{"Content-Type":"application/octet-stream",Origin:t??""},body:new Uint8Array(s)});return Array.from(new Uint8Array(await o.arrayBuffer()))}}class r8 extends Error{reviewActionResults;sendWithResults;txid;tx;noSendChange;code;isError=!0;constructor(e,t,r,i,a){super("Undelayed createAction or signAction results require review."),this.reviewActionResults=e,this.sendWithResults=t,this.txid=r,this.tx=i,this.noSendChange=a,this.code=5,this.name=this.constructor.name}}let r3=r8;class r6{baseUrl;httpClient;originator;api;constructor(e,t="http://localhost:3321",r=fetch){this.baseUrl=t,this.originator=e,this.httpClient=r;let i="undefined"!=typeof window&&"undefined"!=typeof document&&window?.origin!=="file://";this.api=async(e,t)=>{let a=!i&&this.originator?function(e,t="http"){if(/^[a-z][a-z0-9+.-]*:\/\//i.test(e))try{return new URL(e).origin}catch{}try{return new URL(`${t}://${e}`).origin}catch{throw Error(`Invalid originator value: ${e}`)}}(this.originator,"http"):void 0;i||void 0!==a||console.error("Originator is required in Node.js environments");let n=await await r(`${this.baseUrl}/${e}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",...a?{Origin:a}:{},...a?{Originator:a}:{}},body:JSON.stringify(t)}),s=await n.json();if(!n.ok)if(400===n.status&&s.isError&&5===s.code)throw new r8(s.reviewActionResults,s.sendWithResults,s.txid,s.tx,s.noSendChange);else throw Error(JSON.stringify({call:e,args:t,message:s.message??`HTTP Client error ${n.status}`}));return s}}async createAction(e){return await this.api("createAction",e)}async signAction(e){return await this.api("signAction",e)}async abortAction(e){return await this.api("abortAction",e)}async listActions(e){return await this.api("listActions",e)}async internalizeAction(e){return await this.api("internalizeAction",e)}async listOutputs(e){return await this.api("listOutputs",e)}async relinquishOutput(e){return await this.api("relinquishOutput",e)}async getPublicKey(e){return await this.api("getPublicKey",e)}async revealCounterpartyKeyLinkage(e){return await this.api("revealCounterpartyKeyLinkage",e)}async revealSpecificKeyLinkage(e){return await this.api("revealSpecificKeyLinkage",e)}async encrypt(e){return await this.api("encrypt",e)}async decrypt(e){return await this.api("decrypt",e)}async createHmac(e){return await this.api("createHmac",e)}async verifyHmac(e){return await this.api("verifyHmac",e)}async createSignature(e){return await this.api("createSignature",e)}async verifySignature(e){return await this.api("verifySignature",e)}async acquireCertificate(e){return await this.api("acquireCertificate",e)}async listCertificates(e){return await this.api("listCertificates",e)}async proveCertificate(e){return await this.api("proveCertificate",e)}async relinquishCertificate(e){return await this.api("relinquishCertificate",e)}async discoverByIdentityKey(e){return await this.api("discoverByIdentityKey",e)}async discoverByAttributes(e){return await this.api("discoverByAttributes",e)}async isAuthenticated(e){return await this.api("isAuthenticated",e)}async waitForAuthentication(e){return await this.api("waitForAuthentication",e)}async getHeight(e){return await this.api("getHeight",e)}async getHeaderForHeight(e){return await this.api("getHeaderForHeight",e)}async getNetwork(e){return await this.api("getNetwork",e)}async getVersion(e){return await this.api("getVersion",e)}}class r4{domain;constructor(e="*"){if("object"!=typeof window)throw Error("The XDM substrate requires a global window object.");if(!window.hasOwnProperty("ReactNativeWebView"))throw Error("The window object does not have a ReactNativeWebView property.");if("function"!=typeof window.ReactNativeWebView.postMessage)throw Error("The window.ReactNativeWebView property does not seem to support postMessage calls.");this.domain=e}async invoke(e,t){return await new Promise((r,i)=>{let a=eW(tx(12)),n=e=>{let t=JSON.parse(e.data);"CWI"===t.type&&t.id===a&&!0!==t.isInvocation&&("function"==typeof window.removeEventListener&&window.removeEventListener("message",n),"error"===t.status?i(new rY(t.description,t.code)):r(t.result))};window.addEventListener("message",n),window.ReactNativeWebView.postMessage(JSON.stringify({type:"CWI",isInvocation:!0,id:a,call:e,args:t}))})}async createAction(e){return await this.invoke("createAction",e)}async signAction(e){return await this.invoke("signAction",e)}async abortAction(e){return await this.invoke("abortAction",e)}async listActions(e){return await this.invoke("listActions",e)}async internalizeAction(e){return await this.invoke("internalizeAction",e)}async listOutputs(e){return await this.invoke("listOutputs",e)}async relinquishOutput(e){return await this.invoke("relinquishOutput",e)}async getPublicKey(e){return await this.invoke("getPublicKey",e)}async revealCounterpartyKeyLinkage(e){return await this.invoke("revealCounterpartyKeyLinkage",e)}async revealSpecificKeyLinkage(e){return await this.invoke("revealSpecificKeyLinkage",e)}async encrypt(e){return await this.invoke("encrypt",e)}async decrypt(e){return await this.invoke("decrypt",e)}async createHmac(e){return await this.invoke("createHmac",e)}async verifyHmac(e){return await this.invoke("verifyHmac",e)}async createSignature(e){return await this.invoke("createSignature",e)}async verifySignature(e){return await this.invoke("verifySignature",e)}async acquireCertificate(e){return await this.invoke("acquireCertificate",e)}async listCertificates(e){return await this.invoke("listCertificates",e)}async proveCertificate(e){return await this.invoke("proveCertificate",e)}async relinquishCertificate(e){return await this.invoke("relinquishCertificate",e)}async discoverByIdentityKey(e){return await this.invoke("discoverByIdentityKey",e)}async discoverByAttributes(e){return await this.invoke("discoverByAttributes",e)}async isAuthenticated(e){return await this.invoke("isAuthenticated",e)}async waitForAuthentication(e){return await this.invoke("waitForAuthentication",e)}async getHeight(e){return await this.invoke("getHeight",e)}async getHeaderForHeight(e){return await this.invoke("getHeaderForHeight",e)}async getNetwork(e){return await this.invoke("getNetwork",e)}async getVersion(e){return await this.invoke("getVersion",e)}}class r5{substrate;originator;constructor(e="auto",t){"Cicada"===e&&(e=new r1(new r2(t))),"window.CWI"===e&&(e=new rX),"XDM"===e&&(e=new rZ),"json-api"===e&&(e=new r6(t)),"react-native"===e&&(e=new r4(t)),this.substrate=e,this.originator=t}async connectToSubstrate(){let e;if("object"==typeof this.substrate)return;let t=async t=>{let r;if("object"!=typeof(r="number"==typeof t?await Promise.race([e.getVersion({}),new Promise((e,r)=>setTimeout(()=>r(Error("Timed out.")),t))]):await e.getVersion({}))||"string"!=typeof r.version)throw Error("Failed to use substrate.")};try{e=new rX,await t(),this.substrate=e}catch(r){try{e=new rZ,await t(200),this.substrate=e}catch(r){try{e=new r1(new r2(this.originator)),await t(),this.substrate=e}catch(r){try{e=new r6(this.originator),await t(),this.substrate=e}catch(r){try{e=new r4(this.originator),await t(),this.substrate=e}catch(e){throw Error("No wallet available over any communication substrate. Install a BSV wallet today!")}}}}}}async createAction(e){return await this.connectToSubstrate(),await this.substrate.createAction(e,this.originator)}async signAction(e){return await this.connectToSubstrate(),await this.substrate.signAction(e,this.originator)}async abortAction(e){return await this.connectToSubstrate(),await this.substrate.abortAction(e,this.originator)}async listActions(e){return await this.connectToSubstrate(),await this.substrate.listActions(e,this.originator)}async internalizeAction(e){return await this.connectToSubstrate(),await this.substrate.internalizeAction(e,this.originator)}async listOutputs(e){return await this.connectToSubstrate(),await this.substrate.listOutputs(e,this.originator)}async relinquishOutput(e){return await this.connectToSubstrate(),await this.substrate.relinquishOutput(e,this.originator)}async getPublicKey(e){return await this.connectToSubstrate(),await this.substrate.getPublicKey(e,this.originator)}async revealCounterpartyKeyLinkage(e){return await this.connectToSubstrate(),await this.substrate.revealCounterpartyKeyLinkage(e,this.originator)}async revealSpecificKeyLinkage(e){return await this.connectToSubstrate(),await this.substrate.revealSpecificKeyLinkage(e,this.originator)}async encrypt(e){return await this.connectToSubstrate(),await this.substrate.encrypt(e,this.originator)}async decrypt(e){return await this.connectToSubstrate(),await this.substrate.decrypt(e,this.originator)}async createHmac(e){return await this.connectToSubstrate(),await this.substrate.createHmac(e,this.originator)}async verifyHmac(e){return await this.connectToSubstrate(),await this.substrate.verifyHmac(e,this.originator)}async createSignature(e){return await this.connectToSubstrate(),await this.substrate.createSignature(e,this.originator)}async verifySignature(e){return await this.connectToSubstrate(),await this.substrate.verifySignature(e,this.originator)}async acquireCertificate(e){return await this.connectToSubstrate(),await this.substrate.acquireCertificate(e,this.originator)}async listCertificates(e){return await this.connectToSubstrate(),await this.substrate.listCertificates(e,this.originator)}async proveCertificate(e){return await this.connectToSubstrate(),await this.substrate.proveCertificate(e,this.originator)}async relinquishCertificate(e){return await this.connectToSubstrate(),await this.substrate.relinquishCertificate(e,this.originator)}async discoverByIdentityKey(e){return await this.connectToSubstrate(),await this.substrate.discoverByIdentityKey(e,this.originator)}async discoverByAttributes(e){return await this.connectToSubstrate(),await this.substrate.discoverByAttributes(e,this.originator)}async isAuthenticated(e={}){return await this.connectToSubstrate(),await this.substrate.isAuthenticated(e,this.originator)}async waitForAuthentication(e={}){return await this.connectToSubstrate(),await this.substrate.waitForAuthentication(e,this.originator)}async getHeight(e={}){return await this.connectToSubstrate(),await this.substrate.getHeight(e,this.originator)}async getHeaderForHeight(e){return await this.connectToSubstrate(),await this.substrate.getHeaderForHeight(e,this.originator)}async getNetwork(e={}){return await this.connectToSubstrate(),await this.substrate.getNetwork(e,this.originator)}async getVersion(e={}){return await this.connectToSubstrate(),await this.substrate.getVersion(e,this.originator)}}class r7{wallet;constructor(e){this.wallet=e}decodeOutpoint(e){let t=eK(e.read(32)),r=e.readVarIntNum();return`${t}.${r}`}encodeOutpoint(e){let t=new eZ,[r,i]=e.split(".");return t.write(eF(r,"hex")),t.writeVarIntNum(Number(i)),t.toArray()}async transmitToWallet(e){let t=new eQ(e);try{let e=t.readUInt8(),r=r0[e];if(void 0===r||""===r)throw Error(`Invalid call code: ${e}`);let i=t.readUInt8(),a=t.read(i),n=e$(a);switch(r){case"createAction":{let e={},r=t.readVarIntNum(),i=t.read(r);e.description=e$(i);let a=t.readVarIntNum();a>=0?e.inputBEEF=t.read(a):e.inputBEEF=void 0;let s=t.readVarIntNum();if(s>=0){e.inputs=[];for(let r=0;r<s;r++){let r={};r.outpoint=this.decodeOutpoint(t);let i=t.readVarIntNum();if(i>=0){let e=t.read(i);r.unlockingScript=eK(e)}else r.unlockingScript=void 0,r.unlockingScriptLength=t.readVarIntNum();let a=t.readVarIntNum(),n=t.read(a);r.inputDescription=e$(n);let s=t.readVarIntNum();s>=0?r.sequenceNumber=s:r.sequenceNumber=void 0,e.inputs.push(r)}}else e.inputs=void 0;let o=t.readVarIntNum();if(o>=0){e.outputs=[];for(let r=0;r<o;r++){let r={},i=t.readVarIntNum(),a=t.read(i);r.lockingScript=eK(a),r.satoshis=t.readVarIntNum();let n=t.readVarIntNum(),s=t.read(n);r.outputDescription=e$(s);let o=t.readVarIntNum();if(o>=0){let e=t.read(o);r.basket=e$(e)}else r.basket=void 0;let c=t.readVarIntNum();if(c>=0){let e=t.read(c);r.customInstructions=e$(e)}else r.customInstructions=void 0;let l=t.readVarIntNum();if(l>=0){r.tags=[];for(let e=0;e<l;e++){let e=t.readVarIntNum(),i=t.read(e),a=e$(i);r.tags.push(a)}}else r.tags=void 0;e.outputs.push(r)}}else e.outputs=void 0;let c=t.readVarIntNum();c>=0?e.lockTime=c:e.lockTime=void 0;let l=t.readVarIntNum();l>=0?e.version=l:e.version=void 0;let d=t.readVarIntNum();if(d>=0){e.labels=[];for(let r=0;r<d;r++){let r=t.readVarIntNum(),i=t.read(r),a=e$(i);e.labels.push(a)}}else e.labels=void 0;let h=t.readInt8();if(1===h){e.options={};let r=t.readInt8();-1===r?e.options.signAndProcess=void 0:e.options.signAndProcess=1===r;let i=t.readInt8();-1===i?e.options.acceptDelayedBroadcast=void 0:e.options.acceptDelayedBroadcast=1===i;let a=t.readInt8();-1===a?e.options.trustSelf=void 0:1===a&&(e.options.trustSelf="known");let n=t.readVarIntNum();if(n>=0){e.options.knownTxids=[];for(let r=0;r<n;r++){let r=t.read(32),i=eK(r);e.options.knownTxids.push(i)}}else e.options.knownTxids=void 0;let s=t.readInt8();-1===s?e.options.returnTXIDOnly=void 0:e.options.returnTXIDOnly=1===s;let o=t.readInt8();-1===o?e.options.noSend=void 0:e.options.noSend=1===o;let c=t.readVarIntNum();if(c>=0){e.options.noSendChange=[];for(let r=0;r<c;r++){let r=this.decodeOutpoint(t);e.options.noSendChange.push(r)}}else e.options.noSendChange=void 0;let l=t.readVarIntNum();if(l>=0){e.options.sendWith=[];for(let r=0;r<l;r++){let r=t.read(32),i=eK(r);e.options.sendWith.push(i)}}else e.options.sendWith=void 0;let d=t.readInt8();-1===d?e.options.randomizeOutputs=void 0:e.options.randomizeOutputs=1===d}else e.options=void 0;let u=await this.wallet.createAction(e,n),f=new eZ;if(null!=u.txid&&""!==u.txid?(f.writeInt8(1),f.write(eF(u.txid,"hex"))):f.writeInt8(0),null!=u.tx?(f.writeInt8(1),f.writeVarIntNum(u.tx.length),f.write(u.tx)):f.writeInt8(0),null!=u.noSendChange)for(let e of(f.writeVarIntNum(u.noSendChange.length),u.noSendChange))f.write(this.encodeOutpoint(e));else f.writeVarIntNum(-1);if(null!=u.sendWithResults)for(let e of(f.writeVarIntNum(u.sendWithResults.length),u.sendWithResults)){let t;f.write(eF(e.txid,"hex")),"unproven"===e.status?t=1:"sending"===e.status?t=2:"failed"===e.status&&(t=3),f.writeInt8(t)}else f.writeVarIntNum(-1);if(null!=u.signableTransaction){f.writeInt8(1),f.writeVarIntNum(u.signableTransaction.tx.length),f.write(u.signableTransaction.tx);let e=eF(u.signableTransaction.reference,"base64");f.writeVarIntNum(e.length),f.write(e)}else f.writeInt8(0);let p=new eZ;return p.writeUInt8(0),p.write(f.toArray()),p.toArray()}case"signAction":{let e={},r=t.readVarIntNum();e.spends={};for(let i=0;i<r;i++){let r=t.readVarIntNum(),i={},a=t.readVarIntNum(),n=t.read(a);i.unlockingScript=eK(n);let s=t.readVarIntNum();s>=0?i.sequenceNumber=s:i.sequenceNumber=void 0,e.spends[r]=i}let i=t.readVarIntNum(),a=t.read(i);e.reference=eW(a);let s=t.readInt8();if(1===s){e.options={};let r=t.readInt8();-1===r?e.options.acceptDelayedBroadcast=void 0:e.options.acceptDelayedBroadcast=1===r;let i=t.readInt8();-1===i?e.options.returnTXIDOnly=void 0:e.options.returnTXIDOnly=1===i;let a=t.readInt8();-1===a?e.options.noSend=void 0:e.options.noSend=1===a;let n=t.readVarIntNum();if(n>=0){e.options.sendWith=[];for(let r=0;r<n;r++){let r=t.read(32),i=eK(r);e.options.sendWith.push(i)}}else e.options.sendWith=void 0}else e.options=void 0;let o=await this.wallet.signAction(e,n),c=new eZ;if(null!=o.txid&&""!==o.txid?(c.writeInt8(1),c.write(eF(o.txid,"hex"))):c.writeInt8(0),null!=o.tx?(c.writeInt8(1),c.writeVarIntNum(o.tx.length),c.write(o.tx)):c.writeInt8(0),null!=o.sendWithResults)for(let e of(c.writeVarIntNum(o.sendWithResults.length),o.sendWithResults)){let t;c.write(eF(e.txid,"hex")),"unproven"===e.status?t=1:"sending"===e.status?t=2:"failed"===e.status&&(t=3),c.writeInt8(t)}else c.writeVarIntNum(-1);let l=new eZ;return l.writeUInt8(0),l.write(c.toArray()),l.toArray()}case"abortAction":{let e=t.read(),r=eW(e);await this.wallet.abortAction({reference:r},n);let i=new eZ;return i.writeUInt8(0),i.toArray()}case"listActions":{let e={},r=t.readVarIntNum();e.labels=[];for(let i=0;i<r;i++){let r=t.readVarIntNum(),i=t.read(r);e.labels.push(e$(i))}let i=t.readInt8();for(let r of(-1===i?e.labelQueryMode=void 0:1===i?e.labelQueryMode="any":2===i&&(e.labelQueryMode="all"),["includeLabels","includeInputs","includeInputSourceLockingScripts","includeInputUnlockingScripts","includeOutputs","includeOutputLockingScripts"])){let i=t.readInt8();-1===i?e[r]=void 0:e[r]=1===i}let a=t.readVarIntNum();a>=0?e.limit=a:e.limit=void 0;let s=t.readVarIntNum();s>=0?e.offset=s:e.offset=void 0;let o=t.readInt8();o>=0?e.seekPermission=1===o:e.seekPermission=void 0;let c=await this.wallet.listActions(e,n),l=new eZ;for(let e of(l.writeVarIntNum(c.totalActions),c.actions)){let t;switch(l.write(eF(e.txid,"hex")),l.writeVarIntNum(e.satoshis),e.status){case"completed":t=1;break;case"unprocessed":t=2;break;case"sending":t=3;break;case"unproven":t=4;break;case"unsigned":t=5;break;case"nosend":t=6;break;case"nonfinal":t=7;break;case"failed":t=8;break;default:t=-1}l.writeInt8(t),l.writeInt8(+!!e.isOutgoing);let r=eF(e.description,"utf8");if(l.writeVarIntNum(r.length),l.write(r),void 0!==e.labels)for(let t of(l.writeVarIntNum(e.labels.length),e.labels)){let e=eF(t,"utf8");l.writeVarIntNum(e.length),l.write(e)}else l.writeVarIntNum(-1);if(l.writeVarIntNum(e.version),l.writeVarIntNum(e.lockTime),void 0!==e.inputs)for(let t of(l.writeVarIntNum(e.inputs.length),e.inputs)){if(l.write(this.encodeOutpoint(t.sourceOutpoint)),l.writeVarIntNum(t.sourceSatoshis),void 0!==t.sourceLockingScript){let e=eF(t.sourceLockingScript,"hex");l.writeVarIntNum(e.length),l.write(e)}else l.writeVarIntNum(-1);if(void 0!==t.unlockingScript){let e=eF(t.unlockingScript,"hex");l.writeVarIntNum(e.length),l.write(e)}else l.writeVarIntNum(-1);let e=eF(t.inputDescription,"utf8");l.writeVarIntNum(e.length),l.write(e),l.writeVarIntNum(t.sequenceNumber)}else l.writeVarIntNum(-1);if(void 0!==e.outputs)for(let t of(l.writeVarIntNum(e.outputs.length),e.outputs)){if(l.writeVarIntNum(t.outputIndex),l.writeVarIntNum(t.satoshis),void 0!==t.lockingScript){let e=eF(t.lockingScript,"hex");l.writeVarIntNum(e.length),l.write(e)}else l.writeVarIntNum(-1);l.writeInt8(+!!t.spendable);let e=eF(t.outputDescription,"utf8");if(l.writeVarIntNum(e.length),l.write(e),void 0!==t.basket){let e=eF(t.basket,"utf8");l.writeVarIntNum(e.length),l.write(e)}else l.writeVarIntNum(-1);if(void 0!==t.tags)for(let e of(l.writeVarIntNum(t.tags.length),t.tags)){let t=eF(e,"utf8");l.writeVarIntNum(t.length),l.write(t)}else l.writeVarIntNum(-1);if(void 0!==t.customInstructions){let e=eF(t.customInstructions,"utf8");l.writeVarIntNum(e.length),l.write(e)}else l.writeVarIntNum(-1)}else l.writeVarIntNum(-1)}let d=new eZ;return d.writeUInt8(0),d.write(l.toArray()),d.toArray()}case"internalizeAction":{let e={},r=t.readVarIntNum();e.tx=t.read(r);let i=t.readVarIntNum();e.outputs=[];for(let r=0;r<i;r++){let r={};r.outputIndex=t.readVarIntNum();let i=t.readUInt8();if(1===i){r.protocol="wallet payment",r.paymentRemittance={};let e=t.read(33);r.paymentRemittance.senderIdentityKey=eK(e);let i=t.readVarIntNum(),a=t.read(i);r.paymentRemittance.derivationPrefix=eW(a);let n=t.readVarIntNum(),s=t.read(n);r.paymentRemittance.derivationSuffix=eW(s)}else if(2===i){r.protocol="basket insertion",r.insertionRemittance={};let e=t.readVarIntNum(),i=t.read(e);r.insertionRemittance.basket=e$(i);let a=t.readVarIntNum();if(a>=0){let e=t.read(a);r.insertionRemittance.customInstructions=e$(e)}let n=t.readVarIntNum();if(n>0){r.insertionRemittance.tags=[];for(let e=0;e<n;e++){let e=t.readVarIntNum(),i=t.read(e);r.insertionRemittance.tags.push(e$(i))}}else r.insertionRemittance.tags=[]}e.outputs.push(r)}let a=t.readVarIntNum();if(a>=0){e.labels=[];for(let r=0;r<a;r++){let r=t.readVarIntNum();e.labels.push(e$(t.read(r)))}}let s=t.readVarIntNum();e.description=e$(t.read(s));let o=t.readInt8();o>=0?e.seekPermission=1===o:e.seekPermission=void 0,await this.wallet.internalizeAction(e,n);let c=new eZ;return c.writeUInt8(0),c.toArray()}case"listOutputs":{let e={},r=t.readVarIntNum(),i=t.read(r);e.basket=e$(i);let a=t.readVarIntNum();if(a>0){e.tags=[];for(let r=0;r<a;r++){let r=t.readVarIntNum(),i=t.read(r);e.tags.push(e$(i))}}else e.tags=void 0;let s=t.readInt8();1===s?e.tagQueryMode="all":2===s?e.tagQueryMode="any":e.tagQueryMode=void 0;let o=t.readInt8();1===o?e.include="locking scripts":2===o?e.include="entire transactions":e.include=void 0;let c=t.readInt8();-1===c?e.includeCustomInstructions=void 0:e.includeCustomInstructions=1===c;let l=t.readInt8();-1===l?e.includeTags=void 0:e.includeTags=1===l;let d=t.readInt8();-1===d?e.includeLabels=void 0:e.includeLabels=1===d;let h=t.readVarIntNum();h>=0?e.limit=h:e.limit=void 0;let u=t.readVarIntNum();u>=0?e.offset=u:e.offset=void 0;let f=t.readInt8();f>=0?e.seekPermission=1===f:e.seekPermission=void 0;let p=await this.wallet.listOutputs(e,n),b=new eZ;for(let e of(b.writeVarIntNum(p.totalOutputs),null!=p.BEEF?(b.writeVarIntNum(p.BEEF.length),b.write(p.BEEF)):b.writeVarIntNum(-1),p.outputs)){if(b.write(this.encodeOutpoint(e.outpoint)),b.writeVarIntNum(e.satoshis),void 0!==e.lockingScript){let t=eF(e.lockingScript,"hex");b.writeVarIntNum(t.length),b.write(t)}else b.writeVarIntNum(-1);if(void 0!==e.customInstructions){let t=eF(e.customInstructions,"utf8");b.writeVarIntNum(t.length),b.write(t)}else b.writeVarIntNum(-1);if(void 0!==e.tags)for(let t of(b.writeVarIntNum(e.tags.length),e.tags)){let e=eF(t,"utf8");b.writeVarIntNum(e.length),b.write(e)}else b.writeVarIntNum(-1);if(void 0!==e.labels)for(let t of(b.writeVarIntNum(e.labels.length),e.labels)){let e=eF(t,"utf8");b.writeVarIntNum(e.length),b.write(e)}else b.writeVarIntNum(-1)}let g=new eZ;return g.writeUInt8(0),g.write(b.toArray()),g.toArray()}case"relinquishOutput":{let e={},r=t.readVarIntNum(),i=t.read(r);e.basket=e$(i),e.output=this.decodeOutpoint(t),await this.wallet.relinquishOutput(e,n);let a=new eZ;return a.writeUInt8(0),a.toArray()}case"getPublicKey":{let e={},r=t.readUInt8();if(e.identityKey=1===r,!0!==e.identityKey){e.protocolID=this.decodeProtocolID(t),e.keyID=this.decodeString(t),e.counterparty=this.decodeCounterparty(t);let r=t.readInt8();-1===r?e.privileged=void 0:e.privileged=1===r;let i=t.readInt8();if(-1!==i){let r=t.read(i);e.privilegedReason=e$(r)}else e.privilegedReason=void 0;let a=t.readInt8();-1===a?e.forSelf=void 0:e.forSelf=1===a}else{let r=t.readInt8();-1===r?e.privileged=void 0:e.privileged=1===r;let i=t.readInt8();if(-1!==i){let r=t.read(i);e.privilegedReason=e$(r)}else e.privilegedReason=void 0}let i=t.readInt8();i>=0?e.seekPermission=1===i:e.seekPermission=void 0;let a=await this.wallet.getPublicKey(e,n),s=new eZ;s.writeUInt8(0);let o=eF(a.publicKey,"hex");return s.write(o),s.toArray()}case"encrypt":{let e=this.decodeKeyRelatedParams(t),r=t.readVarIntNum();e.plaintext=t.read(r);let i=t.readInt8();i>=0?e.seekPermission=1===i:e.seekPermission=void 0;let a=await this.wallet.encrypt(e,n),s=new eZ;return s.writeUInt8(0),s.write(a.ciphertext),s.toArray()}case"decrypt":{let e=this.decodeKeyRelatedParams(t),r=t.readVarIntNum();e.ciphertext=t.read(r);let i=t.readInt8();i>=0?e.seekPermission=1===i:e.seekPermission=void 0;let a=await this.wallet.decrypt(e,n),s=new eZ;return s.writeUInt8(0),s.write(a.plaintext),s.toArray()}case"createHmac":{let e=this.decodeKeyRelatedParams(t),r=t.readVarIntNum();e.data=t.read(r);let i=t.readInt8();i>=0?e.seekPermission=1===i:e.seekPermission=void 0;let a=await this.wallet.createHmac(e,n),s=new eZ;return s.writeUInt8(0),s.write(a.hmac),s.toArray()}case"verifyHmac":{let e=this.decodeKeyRelatedParams(t);e.hmac=t.read(32);let r=t.readVarIntNum();e.data=t.read(r);let i=t.readInt8();i>=0?e.seekPermission=1===i:e.seekPermission=void 0,await this.wallet.verifyHmac(e,n);let a=new eZ;return a.writeUInt8(0),a.toArray()}case"createSignature":{let e=this.decodeKeyRelatedParams(t),r=t.readUInt8();if(1===r){let r=t.readVarIntNum();e.data=t.read(r)}else 2===r&&(e.hashToDirectlySign=t.read(32));let i=t.readInt8();i>=0?e.seekPermission=1===i:e.seekPermission=void 0;let a=await this.wallet.createSignature(e,n),s=new eZ;return s.writeUInt8(0),s.write(a.signature),s.toArray()}case"verifySignature":{let e=this.decodeKeyRelatedParams(t),r=t.readInt8();-1===r?e.forSelf=void 0:e.forSelf=1===r;let i=t.readVarIntNum();e.signature=t.read(i);let a=t.readUInt8();if(1===a){let r=t.readVarIntNum();e.data=t.read(r)}else 2===a&&(e.hashToDirectlyVerify=t.read(32));let s=t.readInt8();s>=0?e.seekPermission=1===s:e.seekPermission=void 0,await this.wallet.verifySignature(e,n);let o=new eZ;return o.writeUInt8(0),o.toArray()}case"isAuthenticated":{let e=await this.wallet.isAuthenticated({},n),t=new eZ;return t.writeUInt8(0),t.writeUInt8(+!!e.authenticated),t.toArray()}case"waitForAuthentication":{await this.wallet.waitForAuthentication({},n);let e=new eZ;return e.writeUInt8(0),e.toArray()}case"getHeight":{let e=await this.wallet.getHeight({},n),t=new eZ;return t.writeUInt8(0),t.writeVarIntNum(e.height),t.toArray()}case"getHeaderForHeight":{let e={};e.height=t.readVarIntNum();let r=await this.wallet.getHeaderForHeight(e,n),i=new eZ;i.writeUInt8(0);let a=eF(r.header,"hex");return i.write(a),i.toArray()}case"getNetwork":{let e=await this.wallet.getNetwork({},n),t=new eZ;return t.writeUInt8(0),t.writeUInt8(+("mainnet"!==e.network)),t.toArray()}case"getVersion":{let e=await this.wallet.getVersion({},n),t=new eZ;t.writeUInt8(0);let r=eF(e.version,"utf8");return t.write(r),t.toArray()}case"revealCounterpartyKeyLinkage":{let e={},r=t.readInt8();-1===r?e.privileged=void 0:e.privileged=1===r;let i=t.readInt8();if(-1===i)e.privilegedReason=void 0;else{let r=t.read(i);e.privilegedReason=e$(r)}let a=t.read(33);e.counterparty=eK(a);let s=t.read(33);e.verifier=eK(s);let o=await this.wallet.revealCounterpartyKeyLinkage(e,n),c=new eZ;c.write(eF(o.prover,"hex")),c.write(eF(o.verifier,"hex")),c.write(eF(o.counterparty,"hex"));let l=eF(o.revelationTime,"utf8");c.writeVarIntNum(l.length),c.write(l),c.writeVarIntNum(o.encryptedLinkage.length),c.write(o.encryptedLinkage),c.writeVarIntNum(o.encryptedLinkageProof.length),c.write(o.encryptedLinkageProof);let d=new eZ;return d.writeUInt8(0),d.write(c.toArray()),d.toArray()}case"revealSpecificKeyLinkage":{let e=this.decodeKeyRelatedParams(t),r=t.read(33);e.verifier=eK(r);let i=await this.wallet.revealSpecificKeyLinkage(e,n),a=new eZ;a.write(eF(i.prover,"hex")),a.write(eF(i.verifier,"hex")),a.write(eF(i.counterparty,"hex")),a.writeUInt8(i.protocolID[0]);let s=eF(i.protocolID[1],"utf8");a.writeVarIntNum(s.length),a.write(s);let o=eF(i.keyID,"utf8");a.writeVarIntNum(o.length),a.write(o),a.writeVarIntNum(i.encryptedLinkage.length),a.write(i.encryptedLinkage),a.writeVarIntNum(i.encryptedLinkageProof.length),a.write(i.encryptedLinkageProof),a.writeUInt8(i.proofType);let c=new eZ;return c.writeUInt8(0),c.write(a.toArray()),c.toArray()}case"acquireCertificate":{let e={},r=t.read(32);e.type=eW(r);let i=t.read(33);e.certifier=eK(i);let a=t.readVarIntNum();e.fields={};for(let r=0;r<a;r++){let r=t.readVarIntNum(),i=t.read(r),a=e$(i),n=t.readVarIntNum(),s=t.read(n),o=e$(s);e.fields[a]=o}let s=t.readInt8();-1===s?e.privileged=void 0:e.privileged=1===s;let o=t.readInt8();if(-1===o)e.privilegedReason=void 0;else{let r=t.read(o);e.privilegedReason=e$(r)}let c=t.readUInt8();if(e.acquisitionProtocol=1===c?"direct":"issuance","direct"===e.acquisitionProtocol){let r=t.read(32);e.serialNumber=eW(r),e.revocationOutpoint=this.decodeOutpoint(t);let i=t.readVarIntNum(),a=t.read(i);e.signature=eK(a);let n=t.readUInt8();if(11===n)e.keyringRevealer="certifier";else{let r=[n].concat(t.read(32));e.keyringRevealer=eK(r)}let s=t.readVarIntNum();e.keyringForSubject={};for(let r=0;r<s;r++){let r=t.readVarIntNum(),i=t.read(r),a=e$(i),n=t.readVarIntNum(),s=t.read(n),o=eW(s);e.keyringForSubject[a]=o}}else{let r=t.readVarIntNum(),i=t.read(r);e.certifierUrl=e$(i)}let l=await this.wallet.acquireCertificate(e,n),d=new rQ(l.type,l.serialNumber,l.subject,l.certifier,l.revocationOutpoint,l.fields,l.signature).toBinary(),h=new eZ;return h.writeUInt8(0),h.write(d),h.toArray()}case"listCertificates":{let e={},r=t.readVarIntNum();e.certifiers=[];for(let i=0;i<r;i++){let r=t.read(33);e.certifiers.push(eK(r))}let i=t.readVarIntNum();e.types=[];for(let r=0;r<i;r++){let r=t.read(32);e.types.push(eW(r))}let a=t.readVarIntNum();a>=0?e.limit=a:e.limit=void 0;let s=t.readVarIntNum();s>=0?e.offset=s:e.offset=void 0;let o=t.readInt8();-1===o?e.privileged=void 0:e.privileged=1===o;let c=t.readInt8();if(-1===c)e.privilegedReason=void 0;else{let r=t.read(c);e.privilegedReason=e$(r)}let l=await this.wallet.listCertificates(e,n),d=new eZ;for(let e of(d.writeVarIntNum(l.totalCertificates),l.certificates)){let t=new rQ(e.type,e.serialNumber,e.subject,e.certifier,e.revocationOutpoint,e.fields,e.signature).toBinary();d.writeVarIntNum(t.length),d.write(t)}let h=new eZ;return h.writeUInt8(0),h.write(d.toArray()),h.toArray()}case"proveCertificate":{let e={},r={},i=t.read(32);r.type=eW(i);let a=t.read(33);r.subject=eK(a);let s=t.read(32);r.serialNumber=eW(s);let o=t.read(33);r.certifier=eK(o),r.revocationOutpoint=this.decodeOutpoint(t);let c=t.readVarIntNum(),l=t.read(c);r.signature=eK(l);let d=t.readVarIntNum();r.fields={};for(let e=0;e<d;e++){let e=t.readVarIntNum(),i=t.read(e),a=e$(i),n=t.readVarIntNum(),s=t.read(n),o=e$(s);r.fields[a]=o}e.certificate=r;let h=t.readVarIntNum();e.fieldsToReveal=[];for(let r=0;r<h;r++){let r=t.readVarIntNum(),i=t.read(r),a=e$(i);e.fieldsToReveal.push(a)}let u=t.read(33);e.verifier=eK(u);let f=t.readInt8();-1===f?e.privileged=void 0:e.privileged=1===f;let p=t.readInt8();if(-1===p)e.privilegedReason=void 0;else{let r=t.read(p);e.privilegedReason=e$(r)}let b=await this.wallet.proveCertificate(e,n),g=new eZ,m=Object.entries(b.keyringForVerifier);for(let[e,t]of(g.writeVarIntNum(m.length),m)){let r=eF(e,"utf8");g.writeVarIntNum(r.length),g.write(r);let i=eF(t,"base64");g.writeVarIntNum(i.length),g.write(i)}let y=new eZ;return y.writeUInt8(0),y.write(g.toArray()),y.toArray()}case"relinquishCertificate":{let e={},r=t.read(32);e.type=eW(r);let i=t.read(32);e.serialNumber=eW(i);let a=t.read(33);e.certifier=eK(a),await this.wallet.relinquishCertificate(e,n);let s=new eZ;return s.writeUInt8(0),s.toArray()}case"discoverByIdentityKey":{let e={},r=t.read(33);e.identityKey=eK(r);let i=t.readVarIntNum();i>=0?e.limit=i:e.limit=void 0;let a=t.readVarIntNum();a>=0?e.offset=a:e.offset=void 0;let s=t.readInt8();s>=0?e.seekPermission=1===s:e.seekPermission=void 0;let o=await this.wallet.discoverByIdentityKey(e,n),c=this.serializeDiscoveryResult(o),l=new eZ;return l.writeUInt8(0),l.write(c),l.toArray()}case"discoverByAttributes":{let e={},r=t.readVarIntNum();e.attributes={};for(let i=0;i<r;i++){let r=t.readVarIntNum(),i=t.read(r),a=e$(i),n=t.readVarIntNum(),s=t.read(n),o=e$(s);e.attributes[a]=o}let i=t.readVarIntNum();i>=0?e.limit=i:e.limit=void 0;let a=t.readVarIntNum();a>=0?e.offset=a:e.offset=void 0;let s=t.readInt8();s>=0?e.seekPermission=1===s:e.seekPermission=void 0;let o=await this.wallet.discoverByAttributes(e,n),c=this.serializeDiscoveryResult(o),l=new eZ;return l.writeUInt8(0),l.write(c),l.toArray()}default:throw Error(`Method ${r} not implemented`)}}catch(i){let e=new eZ;e.writeUInt8("number"==typeof i.code?i.code:1);let t=eF("string"==typeof i.message?i.message:"Unknown error","utf8");e.writeVarIntNum(t.length),e.write(t);let r=eF("string"==typeof i.stack?i.stack:"","utf8");return e.writeVarIntNum(r.length),e.write(r),e.toArray()}}decodeProtocolID(e){let t=e.readUInt8(),r=e.readVarIntNum();return[t,e$(e.read(r))]}decodeString(e){let t=e.readVarIntNum();return e$(e.read(t))}decodeCounterparty(e){let t=e.readUInt8();return 11===t?"self":12===t?"anyone":0!==t?eK([t,...e.read(32)]):void 0}serializeDiscoveryResult(e){let t=new eZ;for(let r of(t.writeVarIntNum(e.totalCertificates),e.certificates)){let e=new rQ(r.type,r.serialNumber,r.subject,r.certifier,r.revocationOutpoint,r.fields,r.signature).toBinary();t.writeVarIntNum(e.length),t.write(e);let i=eF(r.certifierInfo.name,"utf8");t.writeVarIntNum(i.length),t.write(i);let a=eF(r.certifierInfo.iconUrl,"utf8");t.writeVarIntNum(a.length),t.write(a);let n=eF(r.certifierInfo.description,"utf8");t.writeVarIntNum(n.length),t.write(n),t.writeUInt8(r.certifierInfo.trust);let s=Object.entries(r.publiclyRevealedKeyring);for(let[e,r]of(t.writeVarIntNum(s.length),s)){let i=eF(e,"utf8");t.writeVarIntNum(i.length),t.write(i);let a=eF(r,"base64");t.writeVarIntNum(a.length),t.write(a)}let o=Object.entries(r.decryptedFields);for(let[e,r]of(t.writeVarIntNum(o.length),o)){let i=eF(e,"utf8");t.writeVarIntNum(i.length),t.write(i);let a=eF(r,"utf8");t.writeVarIntNum(a.length),t.write(a)}}return t.toArray()}decodeKeyRelatedParams(e){let t={};t.protocolID=this.decodeProtocolID(e);let r=e.readVarIntNum();t.keyID=e$(e.read(r)),t.counterparty=this.decodeCounterparty(e);let i=e.readInt8();-1===i?t.privileged=void 0:t.privileged=1===i;let a=e.readInt8();return -1===a?t.privilegedReason=void 0:t.privilegedReason=e$(e.read(a)),t}}class r9 extends rQ{masterKeyring;constructor(e,t,r,i,a,n,s,o){for(let c of(super(e,t,r,i,a,n,o),Object.keys(n)))if(void 0===s[c]||""===s[c])throw Error(`Master keyring must contain a value for every field. Missing or empty key for field: "${c}".`);this.masterKeyring=s}static async createCertificateFields(e,t,r,i,a){let n={},s={};for(let[o,c]of Object.entries(r)){let r=tz.fromRandom(),l=r.encrypt(eF(c,"utf8"));n[o]=eW(l);let{ciphertext:d}=await e.encrypt({plaintext:r.toArray(),...rQ.getCertificateFieldEncryptionDetails(o),counterparty:t,privileged:i,privilegedReason:a});s[o]=eW(d)}return{certificateFields:n,masterKeyring:s}}static async createKeyringForVerifier(e,t,r,i,a,n,s,o,c){if(!Array.isArray(a))throw Error("fieldsToReveal must be an array of strings");let l={};for(let d of a){if(void 0===i[d]||null===i[d]||""===i[d])throw Error(`Fields to reveal must be a subset of the certificate fields. Missing the "${d}" field.`);let a=(await this.decryptField(e,n,d,i[d],t,o,c)).fieldRevelationKey,{ciphertext:h}=await e.encrypt({plaintext:a,...rQ.getCertificateFieldEncryptionDetails(d,s),counterparty:r,privileged:o,privilegedReason:c});l[d]=eW(h)}return l}static async issueCertificateForSubject(e,t,r,i,a=async e=>"Certificate revocation not tracked.",n){let s=n??eW(tx(32)),{certificateFields:o,masterKeyring:c}=await this.createCertificateFields(e,t,r),l=await a(s),d=new r9(i,s,t,(await e.getPublicKey({identityKey:!0})).publicKey,l,o,c);return await d.sign(e),d}static async decryptFields(e,t,r,i,a,n){if(null==t||0===Object.keys(t).length)throw Error("A MasterCertificate must have a valid masterKeyring!");try{let s={};for(let o of Object.keys(r))s[o]=(await this.decryptField(e,t,o,r[o],i,a,n)).decryptedFieldValue;return s}catch{throw Error("Failed to decrypt all master certificate fields.")}}static async decryptField(e,t,r,i,a,n,s){if(null==t||0===Object.keys(t).length)throw Error("A MasterCertificate must have a valid masterKeyring!");try{let{plaintext:o}=await e.decrypt({ciphertext:eF(t[r],"base64"),...rQ.getCertificateFieldEncryptionDetails(r),counterparty:a,privileged:n,privilegedReason:s}),c=new tz(o).decrypt(eF(i,"base64"));return{fieldRevelationKey:o,decryptedFieldValue:e$(c)}}catch{throw Error("Failed to decrypt certificate field!")}}}class ie extends rQ{keyring;decryptedFields;constructor(e,t,r,i,a,n,s,o,c){super(e,t,r,i,a,n,o),this.keyring=s,this.decryptedFields=c}static fromCertificate(e,t){return new ie(e.type,e.serialNumber,e.subject,e.certifier,e.revocationOutpoint,e.fields,t,e.signature)}async decryptFields(e,t,r){if(null==this.keyring||0===Object.keys(this.keyring).length)throw Error("A keyring is required to decrypt certificate fields for the verifier.");try{let i={};for(let a in this.keyring){let{plaintext:n}=await e.decrypt({ciphertext:eF(this.keyring[a],"base64"),...rQ.getCertificateFieldEncryptionDetails(a,this.serialNumber),counterparty:this.subject,privileged:t,privilegedReason:r}),s=new tz(n).decrypt(eF(this.fields[a],"base64"));i[a]=e$(s)}return i}catch(e){throw Error(`Failed to decrypt selectively revealed certificate fields using keyring: ${String(e instanceof Error?e.message:e)}`)}}}class it extends rG{keyDeriver;constructor(e){if(super(e),e instanceof rW)this.keyDeriver=e;else if("string"==typeof e||e instanceof tO)this.keyDeriver=new rj(e);else throw Error("Invalid key deriver provided")}async isAuthenticated(){throw Error("not implemented")}async waitForAuthentication(){throw Error("not implemented")}async getNetwork(){throw Error("not implemented")}async getVersion(){throw Error("not implemented")}async getPublicKey(e){if(!0===e.privileged)throw Error("no privilege support");if(!0===e.identityKey){if(null===this.keyDeriver||void 0===this.keyDeriver)throw Error("keyDeriver is not initialized");return{publicKey:this.keyDeriver.rootKey.toPublicKey().toString()}}if(null==e.protocolID||"string"!=typeof e.keyID||""===e.keyID.trim())throw Error("protocolID and keyID are required if identityKey is false or undefined.");if(null===this.keyDeriver||void 0===this.keyDeriver)throw Error("keyDeriver is not initialized");return{publicKey:this.keyDeriver.derivePublicKey(e.protocolID,e.keyID,"string"==typeof e.counterparty&&""!==e.counterparty.trim()?e.counterparty:"self",!!e.forSelf).toString()}}async createAction(){throw Error("not implemented")}async signAction(){throw Error("not implemented")}async abortAction(){throw Error("not implemented")}async listActions(){throw Error("not implemented")}async internalizeAction(){throw Error("not implemented")}async listOutputs(){throw Error("not implemented")}async relinquishOutput(){throw Error("not implemented")}async acquireCertificate(){throw Error("not implemented")}async listCertificates(){throw Error("not implemented")}async proveCertificate(){throw Error("not implemented")}async relinquishCertificate(){throw Error("not implemented")}async discoverByIdentityKey(){throw Error("not implemented")}async discoverByAttributes(){throw Error("not implemented")}async getHeight(){throw Error("not implemented")}async getHeaderForHeight(){throw Error("not implemented")}}class ir{sessionNonceToSession;identityKeyToNonces;constructor(){this.sessionNonceToSession=new Map,this.identityKeyToNonces=new Map}addSession(e){if("string"!=typeof e.sessionNonce)throw Error("Invalid session: sessionNonce is required to add a session.");if(this.sessionNonceToSession.set(e.sessionNonce,e),"string"==typeof e.peerIdentityKey){let t=this.identityKeyToNonces.get(e.peerIdentityKey);null==t&&(t=new Set,this.identityKeyToNonces.set(e.peerIdentityKey,t)),t.add(e.sessionNonce)}}updateSession(e){this.removeSession(e),this.addSession(e)}getSession(e){let t,r=this.sessionNonceToSession.get(e);if(null!=r)return r;let i=this.identityKeyToNonces.get(e);if(null!=i&&0!==i.size){for(let e of i){let r=this.sessionNonceToSession.get(e);null!=r&&(null==t?t=r:(r.lastUpdate??0)>(t.lastUpdate??0)&&(t=r))}return t}}removeSession(e){if("string"==typeof e.sessionNonce&&this.sessionNonceToSession.delete(e.sessionNonce),"string"==typeof e.peerIdentityKey){let t=this.identityKeyToNonces.get(e.peerIdentityKey);null!=t&&(t.delete(e.sessionNonce??""),0===t.size&&this.identityKeyToNonces.delete(e.peerIdentityKey))}}hasSession(e){if(this.sessionNonceToSession.has(e))return!0;let t=this.identityKeyToNonces.get(e);return null!=t&&t.size>0}}async function ii(e,t,r="self"){let i=eF(e,"base64"),a=i.slice(0,16),n=i.slice(16),{valid:s}=await t.verifyHmac({data:a,hmac:n,protocolID:[2,"server hmac"],keyID:e$(a),counterparty:r});return s}async function ia(e,t="self"){let r=tx(16),{hmac:i}=await e.createHmac({protocolID:[2,"server hmac"],keyID:e$(r),data:r,counterparty:t});return eW([...r,...i])}let is=async(e,t,r)=>{let i=await e.listCertificates({certifiers:t.certifiers,types:Object.keys(t.types)});return await Promise.all(i.certificates.map(async i=>{let{keyringForVerifier:a}=await e.proveCertificate({certificate:i,fieldsToReveal:t.types[i.type],verifier:r});return new ie(i.type,i.serialNumber,i.subject,i.certifier,i.revocationOutpoint,i.fields,a,i.signature)}))},io=async(e,t,r)=>{if(null==t.certificates||0===t.certificates.length)throw Error("No certificates were provided in the AuthMessage.");await Promise.all(t.certificates.map(async i=>{if(i.subject!==t.identityKey)throw Error(`The subject of one of your certificates ("${i.subject}") is not the same as the request sender ("${t.identityKey}").`);let a=new ie(i.type,i.serialNumber,i.subject,i.certifier,i.revocationOutpoint,i.fields,i.keyring,i.signature);if(!await a.verify())throw Error(`The signature for the certificate with serial number ${a.serialNumber} is invalid!`);if(null!=r){let{certifiers:e,types:t}=r;if(!e.includes(a.certifier))throw Error(`Certificate with serial number ${a.serialNumber} has an unrequested certifier: ${a.certifier}`);if(null==t[a.type])throw Error(`Certificate with type ${a.type} was not requested`)}await a.decryptFields(e)}))};class ic{sessionManager;transport;wallet;certificatesToRequest;onGeneralMessageReceivedCallbacks=new Map;onCertificatesReceivedCallbacks=new Map;onCertificateRequestReceivedCallbacks=new Map;onInitialResponseReceivedCallbacks=new Map;callbackIdCounter=0;autoPersistLastSession=!0;lastInteractedWithPeer;constructor(e,t,r,i,a){this.wallet=e,this.transport=t,this.certificatesToRequest=r??{certifiers:[],types:{}},this.transport.onData(this.handleIncomingMessage.bind(this)).catch(e=>{throw e}),this.sessionManager=null!=i?i:new ir,!1===a?this.autoPersistLastSession=!1:this.autoPersistLastSession=!0}async toPeer(e,t,r){this.autoPersistLastSession&&"string"==typeof this.lastInteractedWithPeer&&"string"!=typeof t&&(t=this.lastInteractedWithPeer);let i=await this.getAuthenticatedSession(t,r),a=eW(tx(32)),{signature:n}=await this.wallet.createSignature({data:e,protocolID:[2,"auth message signature"],keyID:`${a} ${i.peerNonce??""}`,counterparty:i.peerIdentityKey}),s={version:"0.1",messageType:"general",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,nonce:a,yourNonce:i.peerNonce,payload:e,signature:n};i.lastUpdate=Date.now(),this.sessionManager.updateSession(i);try{await this.transport.send(s)}catch(t){let e=Error(`Failed to send message to peer ${i.peerIdentityKey??"unknown"}: ${String(t.message)}`);throw e.stack=t.stack,e}}async requestCertificates(e,t,r=1e4){this.autoPersistLastSession&&"string"==typeof this.lastInteractedWithPeer&&"string"!=typeof t&&(t=this.lastInteractedWithPeer);let i=await this.getAuthenticatedSession(t,r),a=eW(tx(32)),{signature:n}=await this.wallet.createSignature({data:eF(JSON.stringify(e),"utf8"),protocolID:[2,"auth message signature"],keyID:`${a} ${i.peerNonce??""}`,counterparty:i.peerIdentityKey}),s={version:"0.1",messageType:"certificateRequest",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,nonce:a,initialNonce:i.sessionNonce,yourNonce:i.peerNonce,requestedCertificates:e,signature:n};i.lastUpdate=Date.now(),this.sessionManager.updateSession(i);try{await this.transport.send(s)}catch(e){throw Error(`Failed to send certificate request message to peer ${i.peerIdentityKey??"unknown"}: ${String(e.message)}`)}}async getAuthenticatedSession(e,t){let r;if(void 0===this.transport)throw Error("Peer transport is not connected!");if("string"==typeof e&&(r=this.sessionManager.getSession(e)),null==r||!r.isAuthenticated){let i=await this.initiateHandshake(e,t);if(null==(r=this.sessionManager.getSession(i))||!r.isAuthenticated)throw Error("Unable to establish mutual authentication with peer!")}return r}listenForGeneralMessages(e){let t=this.callbackIdCounter++;return this.onGeneralMessageReceivedCallbacks.set(t,e),t}stopListeningForGeneralMessages(e){this.onGeneralMessageReceivedCallbacks.delete(e)}listenForCertificatesReceived(e){let t=this.callbackIdCounter++;return this.onCertificatesReceivedCallbacks.set(t,e),t}stopListeningForCertificatesReceived(e){this.onCertificatesReceivedCallbacks.delete(e)}listenForCertificatesRequested(e){let t=this.callbackIdCounter++;return this.onCertificateRequestReceivedCallbacks.set(t,e),t}stopListeningForCertificatesRequested(e){this.onCertificateRequestReceivedCallbacks.delete(e)}async initiateHandshake(e,t=1e4){let r=await ia(this.wallet),i=Date.now();this.sessionManager.addSession({isAuthenticated:!1,sessionNonce:r,peerIdentityKey:e,lastUpdate:i});let a={version:"0.1",messageType:"initialRequest",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,initialNonce:r,requestedCertificates:this.certificatesToRequest};return await this.transport.send(a),await this.waitForInitialResponse(r,t)}async waitForInitialResponse(e,t=1e4){return await new Promise((r,i)=>{let a=this.listenForInitialResponse(e,e=>{clearTimeout(n),this.stopListeningForInitialResponses(a),r(e)}),n=setTimeout(()=>{this.stopListeningForInitialResponses(a),i(Error("Initial response timed out."))},t)})}listenForInitialResponse(e,t){let r=this.callbackIdCounter++;return this.onInitialResponseReceivedCallbacks.set(r,{callback:t,sessionNonce:e}),r}stopListeningForInitialResponses(e){this.onInitialResponseReceivedCallbacks.delete(e)}async handleIncomingMessage(e){if("string"!=typeof e.version||"0.1"!==e.version)throw Error(`Invalid or unsupported message auth version! Received: ${e.version}, expected: 0.1`);switch(e.messageType){case"initialRequest":await this.processInitialRequest(e);break;case"initialResponse":await this.processInitialResponse(e);break;case"certificateRequest":await this.processCertificateRequest(e);break;case"certificateResponse":await this.processCertificateResponse(e);break;case"general":await this.processGeneralMessage(e);break;default:throw Error(`Unknown message type of ${String(e.messageType)} from ${String(e.identityKey)}`)}}async processInitialRequest(e){let t;if("string"!=typeof e.identityKey||"string"!=typeof e.initialNonce||""===e.initialNonce)throw Error("Missing required fields in initialRequest message.");let r=await ia(this.wallet),i=Date.now();this.sessionManager.addSession({isAuthenticated:!0,sessionNonce:r,peerNonce:e.initialNonce,peerIdentityKey:e.identityKey,lastUpdate:i}),null!=e.requestedCertificates&&Array.isArray(e.requestedCertificates.certifiers)&&e.requestedCertificates.certifiers.length>0&&(this.onCertificateRequestReceivedCallbacks.size>0?this.onCertificateRequestReceivedCallbacks.forEach(t=>{t(e.identityKey,e.requestedCertificates)}):t=await is(this.wallet,e.requestedCertificates,e.identityKey));let{signature:a}=await this.wallet.createSignature({data:eF(e.initialNonce+r,"base64"),protocolID:[2,"auth message signature"],keyID:`${e.initialNonce} ${r}`,counterparty:e.identityKey}),n={version:"0.1",messageType:"initialResponse",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,initialNonce:r,yourNonce:e.initialNonce,certificates:t,requestedCertificates:this.certificatesToRequest,signature:a};void 0===this.lastInteractedWithPeer&&(this.lastInteractedWithPeer=e.identityKey),await this.transport.send(n)}async processInitialResponse(e){if(!await ii(e.yourNonce,this.wallet))throw Error(`Initial response nonce verification failed from peer: ${e.identityKey}`);let t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw Error(`Peer session not found for peer: ${e.identityKey}`);let r=eF((t.sessionNonce??"")+(e.initialNonce??""),"base64"),{valid:i}=await this.wallet.verifySignature({data:r,signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${t.sessionNonce??""} ${e.initialNonce??""}`,counterparty:e.identityKey});if(!i)throw Error(`Unable to verify initial response signature for peer: ${e.identityKey}`);if(t.peerNonce=e.initialNonce,t.peerIdentityKey=e.identityKey,t.isAuthenticated=!0,t.lastUpdate=Date.now(),this.sessionManager.updateSession(t),this.certificatesToRequest?.certifiers?.length>0&&e.certificates?.length>0&&(await io(this.wallet,e,this.certificatesToRequest),this.onCertificatesReceivedCallbacks.forEach(t=>t(e.identityKey,e.certificates))),this.lastInteractedWithPeer=e.identityKey,this.onInitialResponseReceivedCallbacks.forEach(e=>{e.sessionNonce===t.sessionNonce&&e.callback(t.sessionNonce)}),null!=e.requestedCertificates&&Array.isArray(e.requestedCertificates.certifiers)&&e.requestedCertificates.certifiers.length>0)if(this.onCertificateRequestReceivedCallbacks.size>0)this.onCertificateRequestReceivedCallbacks.forEach(t=>{t(e.identityKey,e.requestedCertificates)});else{let t=await is(this.wallet,e.requestedCertificates,e.identityKey);await this.sendCertificateResponse(e.identityKey,t)}}async processCertificateRequest(e){if(!await ii(e.yourNonce,this.wallet))throw Error(`Unable to verify nonce for certificate request message from: ${e.identityKey}`);let t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw Error(`Session not found for nonce: ${e.yourNonce}`);let{valid:r}=await this.wallet.verifySignature({data:eF(JSON.stringify(e.requestedCertificates),"utf8"),signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${e.nonce??""} ${t.sessionNonce??""}`,counterparty:t.peerIdentityKey});if(!r)throw Error(`Invalid signature in certificate request message from ${t.peerIdentityKey}`);if(t.lastUpdate=Date.now(),this.sessionManager.updateSession(t),null!=e.requestedCertificates&&Array.isArray(e.requestedCertificates.certifiers)&&e.requestedCertificates.certifiers.length>0)if(this.onCertificateRequestReceivedCallbacks.size>0)this.onCertificateRequestReceivedCallbacks.forEach(t=>{t(e.identityKey,e.requestedCertificates)});else{let t=await is(this.wallet,e.requestedCertificates,e.identityKey);await this.sendCertificateResponse(e.identityKey,t)}}async sendCertificateResponse(e,t){let r=await this.getAuthenticatedSession(e),i=eW(tx(32)),{signature:a}=await this.wallet.createSignature({data:eF(JSON.stringify(t),"utf8"),protocolID:[2,"auth message signature"],keyID:`${i} ${r.peerNonce??""}`,counterparty:r.peerIdentityKey}),n={version:"0.1",messageType:"certificateResponse",identityKey:(await this.wallet.getPublicKey({identityKey:!0})).publicKey,nonce:i,initialNonce:r.sessionNonce,yourNonce:r.peerNonce,certificates:t,signature:a};r.lastUpdate=Date.now(),this.sessionManager.updateSession(r);try{await this.transport.send(n)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send certificate response message to peer ${r.peerIdentityKey??"unknown"}: ${e}`)}}async processCertificateResponse(e){if(!await ii(e.yourNonce,this.wallet))throw Error(`Unable to verify nonce for certificate response from: ${e.identityKey}`);let t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw Error(`Session not found for nonce: ${e.yourNonce}`);let{valid:r}=await this.wallet.verifySignature({data:eF(JSON.stringify(e.certificates),"utf8"),signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${e.nonce??""} ${t.sessionNonce??""}`,counterparty:e.identityKey});if(!r)throw Error(`Unable to verify certificate response signature for peer: ${e.identityKey}`);await io(this.wallet,e,e.requestedCertificates),this.onCertificatesReceivedCallbacks.forEach(t=>{t(e.identityKey,e.certificates??[])}),t.lastUpdate=Date.now(),this.sessionManager.updateSession(t)}async processGeneralMessage(e){if(!await ii(e.yourNonce,this.wallet))throw Error(`Unable to verify nonce for general message from: ${e.identityKey}`);let t=this.sessionManager.getSession(e.yourNonce);if(null==t)throw Error(`Session not found for nonce: ${e.yourNonce}`);let{valid:r}=await this.wallet.verifySignature({data:e.payload,signature:e.signature,protocolID:[2,"auth message signature"],keyID:`${e.nonce??""} ${t.sessionNonce??""}`,counterparty:t.peerIdentityKey});if(!r)throw Error(`Invalid signature in generalMessage from ${t.peerIdentityKey}`);t.lastUpdate=Date.now(),this.sessionManager.updateSession(t),this.lastInteractedWithPeer=e.identityKey,this.onGeneralMessageReceivedCallbacks.forEach(t=>{t(e.identityKey,e.payload??[])})}}let il="undefined"!=typeof window?fetch.bind(window):fetch;class id{onDataCallback;fetchClient;baseUrl;constructor(e,t=il){this.fetchClient=t,this.baseUrl=e}async send(e){if(null==this.onDataCallback)throw Error("Listen before you start speaking. God gave you two ears and one mouth for a reason.");if("general"!==e.messageType)return await new Promise((t,r)=>{(async()=>{try{let r=this.fetchClient(`${this.baseUrl}/.well-known/auth`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});"initialRequest"!==e.messageType&&t();let i=await r;if(i.ok&&null!=this.onDataCallback){let e=await i.json();this.onDataCallback(e)}else throw Error("HTTP server failed to authenticate");"initialRequest"===e.messageType&&t()}catch(e){r(e)}})()});{let t=this.deserializeRequestPayload(e.payload),r=`${this.baseUrl}${t.urlPostfix}`;if("object"!=typeof t.headers&&(t.headers={}),t.headers["x-bsv-auth-version"]=e.version,t.headers["x-bsv-auth-identity-key"]=e.identityKey,t.headers["x-bsv-auth-nonce"]=e.nonce,t.headers["x-bsv-auth-your-nonce"]=e.yourNonce,t.headers["x-bsv-auth-signature"]=eK(e.signature),t.headers["x-bsv-auth-request-id"]=t.requestId,null!=t.body){let e=t.headers;if(null==e["content-type"])throw Error("Content-Type header is required for requests with a body.");let r=String(e["content-type"]??"");r.includes("application/json")||r.includes("application/x-www-form-urlencoded")||r.includes("text/plain")?t.body=e$(t.body):t.body=new Uint8Array(t.body)}let i=await this.fetchClient(r,{method:t.method,headers:t.headers,body:t.body});if(500===i.status&&null==i.headers.get("x-bsv-auth-request-id")&&null==i.headers.get("x-bsv-auth-requested-certificates")){let e=await i.json();throw Error(`HTTP ${i.status} - ${JSON.stringify(e)}`)}let a=await i.arrayBuffer(),n=new eZ;null!=i.headers.get("x-bsv-auth-request-id")&&n.write(eF(i.headers.get("x-bsv-auth-request-id"),"base64")),n.writeVarIntNum(i.status);let s=[];i.headers.forEach((e,t)=>{let r=t.toLowerCase();(r.startsWith("x-bsv-")||"authorization"===r)&&!r.startsWith("x-bsv-auth")&&s.push([r,e])}),s.sort(([e],[t])=>e.localeCompare(t)),n.writeVarIntNum(s.length);for(let e=0;e<s.length;e++){let t=eF(s[e][0],"utf8");n.writeVarIntNum(t.length),n.write(t);let r=eF(s[e][1],"utf8");n.writeVarIntNum(r.length),n.write(r)}if(null!=a){let e=Array.from(new Uint8Array(a));n.writeVarIntNum(e.length),n.write(e)}else n.writeVarIntNum(-1);let o={version:i.headers.get("x-bsv-auth-version"),messageType:"certificateRequest"===i.headers.get("x-bsv-auth-message-type")?"certificateRequest":"general",identityKey:i.headers.get("x-bsv-auth-identity-key"),nonce:i.headers.get("x-bsv-auth-nonce"),yourNonce:i.headers.get("x-bsv-auth-your-nonce"),requestedCertificates:JSON.parse(i.headers.get("x-bsv-auth-requested-certificates")),payload:n.toArray(),signature:eF(i.headers.get("x-bsv-auth-signature"),"hex")};if(null==o.version)throw Error("HTTP server failed to authenticate");this.onDataCallback(o)}}async onData(e){this.onDataCallback=t=>{e(t)}}deserializeRequestPayload(e){let t,r=new eQ(e),i=eW(r.read(32)),a=r.readVarIntNum(),n="GET";a>0&&(n=e$(r.read(a)));let s=r.readVarIntNum(),o="";s>0&&(o=e$(r.read(s)));let c=r.readVarIntNum(),l="";c>0&&(l=e$(r.read(c)));let d={},h=r.readVarIntNum();if(h>0)for(let e=0;e<h;e++){let e=r.readVarIntNum(),t=e$(r.read(e)),i=r.readVarIntNum(),a=e$(r.read(i));d[t]=a}let u=r.readVarIntNum();return u>0&&(t=r.read(u)),{urlPostfix:o+l,method:n,headers:d,body:t,requestId:i}}}class ih{sessionManager;wallet;callbacks={};certificatesReceived=[];requestedCertificates;peers={};constructor(e,t,r){this.wallet=e,this.requestedCertificates=t,this.sessionManager=r||new ir}async fetch(e,t={}){if("number"==typeof t.retryCounter){if(t.retryCounter<=0)throw Error("Request failed after maximum number of retries.");t.retryCounter--}let r=await new Promise(async(r,i)=>{try{let a,{method:n="GET",headers:s={},body:o}=t,c=new URL(e),l=c.origin;if(void 0===this.peers[l]){let e=new id(l);a={peer:new ic(this.wallet,e,this.requestedCertificates,this.sessionManager),pendingCertificateRequests:[]},this.peers[l]=a,this.peers[l].peer.listenForCertificatesReceived((e,t)=>{this.certificatesReceived.push(...t)}),this.peers[l].peer.listenForCertificatesRequested(async(e,t)=>{try{this.peers[l].pendingCertificateRequests.push(!0);let r=await is(this.wallet,t,e);await this.peers[l].peer.sendCertificateResponse(e,r)}finally{await new Promise(e=>setTimeout(e,500)),this.peers[l].pendingCertificateRequests.shift()}})}else{if(!1===this.peers[l].supportsMutualAuth){try{let i=await this.handleFetchAndValidate(e,t,this.peers[l]);r(i)}catch(e){i(e)}return}a=this.peers[l]}let d=tx(32),h=eW(d),u=await this.serializeRequest(n,s,o,c,d);this.callbacks[h]={resolve:r,reject:i};let f=a.peer.listenForGeneralMessages((e,t)=>{let r,i=new eQ(t);if(eW(i.read(32))!==h)return;a.peer.stopListeningForGeneralMessages(f),this.peers[l].identityKey=e,this.peers[l].supportsMutualAuth=!0;let n=i.readVarIntNum(),s={},o=i.readVarIntNum();if(o>0)for(let e=0;e<o;e++){let e=i.readVarIntNum(),t=i.read(e),r=e$(t),a=i.readVarIntNum(),n=i.read(a),o=e$(n);s[r]=o}s["x-bsv-auth-identity-key"]=e;let c=i.readVarIntNum();c>0&&(r=i.read(c));let d=new Response(r?new Uint8Array(r):null,{status:n,statusText:`${n}`,headers:new Headers(s)});this.callbacks[h].resolve(d),delete this.callbacks[h]});a.pendingCertificateRequests.length>0&&await new Promise(e=>{setInterval(()=>{0===a.pendingCertificateRequests.length&&e()},100)}),await a.peer.toPeer(u.toArray(),a.identityKey).catch(async n=>{if(n.message.includes("Session not found for nonce")){delete this.peers[l],t.retryCounter??=3;let i=await this.fetch(e,t);r(i);return}if(n.message.includes("HTTP server failed to authenticate"))try{let i=await this.handleFetchAndValidate(e,t,a);r(i);return}catch(e){i(e)}else i(n)})}catch(e){i(e)}});return 402===r.status?await this.handlePaymentAndRetry(e,t,r):r}async sendCertificateRequest(e,t){let r,i=new URL(e).origin;if(void 0!==this.peers[i])r={peer:this.peers[i].peer};else{let e=new id(i);r={peer:new ic(this.wallet,e,this.requestedCertificates,this.sessionManager)},this.peers[i]=r}return await new Promise(async(e,i)=>{let a=r.peer.listenForCertificatesReceived((t,i)=>{r.peer.stopListeningForCertificatesReceived(a),this.certificatesReceived.push(...i),e(i)});try{await r.peer.requestCertificates(t,r.identityKey)}catch(e){r.peer.stopListeningForCertificatesReceived(a),i(e)}})}consumeReceivedCertificates(){return this.certificatesReceived.splice(0)}async serializeRequest(e,t,r,i,a){let n=new eZ;if(n.write(a),n.writeVarIntNum(e.length),n.write(eF(e)),i.pathname.length>0){let e=eF(i.pathname);n.writeVarIntNum(e.length),n.write(e)}else n.writeVarIntNum(-1);if(i.search.length>0){let e=eF(i.search);n.writeVarIntNum(e.length),n.write(e)}else n.writeVarIntNum(-1);let s=[];for(let[e,r]of Object.entries(t))if((e=e.toLowerCase()).startsWith("x-bsv-")||"authorization"===e){if(e.startsWith("x-bsv-auth"))throw Error("No BSV auth headers allowed here!");s.push([e,r])}else if(e.startsWith("content-type"))r=r.split(";")[0].trim(),s.push([e,r]);else throw Error("Unsupported header in the simplified fetch implementation. Only content-type, authorization, and x-bsv-* headers are supported.");s.sort(([e],[t])=>e.localeCompare(t)),n.writeVarIntNum(s.length);for(let e=0;e<s.length;e++){let t=eF(s[e][0],"utf8");n.writeVarIntNum(t.length),n.write(t);let r=eF(s[e][1],"utf8");n.writeVarIntNum(r.length),n.write(r)}if(["POST","PUT","PATCH","DELETE"].includes(e.toUpperCase())&&void 0===r){let e=s.find(([e])=>"content-type"===e);r=e&&e[1].includes("application/json")?"{}":""}if(r){let e=await this.normalizeBodyToNumberArray(r);n.writeVarIntNum(e.length),n.write(e)}else n.writeVarIntNum(-1);return n}async handleFetchAndValidate(e,t,r){let i=await fetch(e,t);if(i.headers.forEach(e=>{if(e.toLocaleLowerCase().startsWith("x-bsv"))throw Error("The server is trying to claim it has been authenticated when it has not!")}),i.ok)return r.supportsMutualAuth=!1,i;throw Error(`Request failed with status: ${i.status}`)}async handlePaymentAndRetry(e,t={},r){let i=r.headers.get("x-bsv-payment-version");if(!i||"1.0"!==i)throw Error(`Unsupported x-bsv-payment-version response header. Client version: 1.0, Server version: ${i}`);let a=r.headers.get("x-bsv-payment-satoshis-required");if(!a)throw Error("Missing x-bsv-payment-satoshis-required response header.");let n=parseInt(a);if(isNaN(n)||n<=0)throw Error("Invalid x-bsv-payment-satoshis-required response header value.");let s=r.headers.get("x-bsv-auth-identity-key");if(!s)throw Error("Missing x-bsv-auth-identity-key response header.");let o=r.headers.get("x-bsv-payment-derivation-prefix");if("string"!=typeof o||o.length<1)throw Error("Missing x-bsv-payment-derivation-prefix response header.");let c=await ia(this.wallet),{publicKey:l}=await this.wallet.getPublicKey({protocolID:[2,"3241645161d8"],keyID:`${o} ${c}`,counterparty:s}),d=new t3().lock(tv.fromString(l).toAddress()).toHex(),{tx:h}=await this.wallet.createAction({description:`Payment for request to ${new URL(e).origin}`,outputs:[{satoshis:n,lockingScript:d,customInstructions:JSON.stringify({derivationPrefix:o,derivationSuffix:c,payee:s}),outputDescription:"HTTP request payment"}],options:{randomizeOutputs:!1}});return t.headers=t.headers||{},t.headers["x-bsv-payment"]=JSON.stringify({derivationPrefix:o,derivationSuffix:c,transaction:eW(h)}),t.retryCounter??=3,this.fetch(e,t)}async normalizeBodyToNumberArray(e){if(null==e)return[];if("object"==typeof e)return eF(JSON.stringify(e,"utf8"));if(Array.isArray(e)&&e.every(e=>"number"==typeof e))return e;if("string"==typeof e)return eF(e,"utf8");if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return Array.from(new Uint8Array(e instanceof ArrayBuffer?e:e.buffer));if(e instanceof Blob)return Array.from(new Uint8Array(await e.arrayBuffer()));if(e instanceof FormData){let t=[];return e.forEach((e,r)=>{t.push([r,e.toString()])}),eF(new URLSearchParams(t).toString(),"utf8")}if(e instanceof URLSearchParams)return eF(e.toString(),"utf8");if(e instanceof ReadableStream)throw Error("ReadableStream cannot be directly converted to number[].");throw Error("Unsupported body type in this SimplifiedFetch implementation.")}}class iu{pushDrop;static decode(e){let t=t7.decode(e);if(t.fields.length<4)throw Error("Invalid SHIP/SLAP advertisement!");let r=e$(t.fields[0]);if("SHIP"!==r&&"SLAP"!==r)throw Error("Invalid protocol type!");let i=eK(t.fields[1]);return{protocol:r,identityKey:i,domain:e$(t.fields[2]),topicOrService:e$(t.fields[3])}}constructor(e){this.pushDrop=new t7(e)}async lock(e,t,r){let{publicKey:i}=await this.pushDrop.wallet.getPublicKey({identityKey:!0});return await this.pushDrop.lock([eF(e,"utf8"),eF(i,"hex"),eF(t,"utf8"),eF(r,"utf8")],[2,"SHIP"===e?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}unlock(e){return this.pushDrop.unlock([2,"SHIP"===e?"Service Host Interconnect":"Service Lookup Availability"],"1","self")}}let ip=["https://overlay-us-1.bsvb.tech","https://overlay-eu-1.bsvb.tech","https://overlay-ap-1.bsvb.tech","https://users.bapp.dev"],ib=["https://testnet-users.bapp.dev"];class ig{fetchClient;allowHTTP;constructor(e=fetch,t=!1){this.fetchClient=e,this.allowHTTP=t}async lookup(e,t,r=5e3){if(!e.startsWith("https:")&&!this.allowHTTP)throw Error('HTTPS facilitator can only use URLs that start with "https:"');let i=new Promise((e,t)=>setTimeout(()=>t(Error("Request timed out")),r)),a=fetch(`${e}/lookup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({service:t.service,query:t.query})}),n=await Promise.race([a,i]);if(n.ok)return await n.json();throw Error("Failed to facilitate lookup")}}class im{facilitator;slapTrackers;hostOverrides;additionalHosts;networkPreset;constructor(e={}){this.networkPreset=e.networkPreset??"mainnet",this.facilitator=e.facilitator??new ig(void 0,"local"===this.networkPreset),this.slapTrackers=e.slapTrackers??("mainnet"===this.networkPreset?ip:ib),this.hostOverrides=e.hostOverrides??{},this.additionalHosts=e.additionalHosts??{}}async query(e,t){let r=[];if(r="ls_slap"===e.service?"local"===this.networkPreset?["http://localhost:8080"]:this.slapTrackers:null!=this.hostOverrides[e.service]?this.hostOverrides[e.service]:"local"===this.networkPreset?["http://localhost:8080"]:await this.findCompetentHosts(e.service),this.additionalHosts[e.service]?.length>0&&(r=[...r,...this.additionalHosts[e.service]]),r.length<1)throw Error(`No competent ${this.networkPreset} hosts found by the SLAP trackers for lookup service: ${e.service}`);let i=(await Promise.allSettled(r.map(async r=>await this.facilitator.lookup(r,e,t)))).filter(e=>"fulfilled"===e.status).map(e=>e.value);if(0===i.length)throw Error("No successful responses from any hosts");let a=new Map;for(let e of i)if("output-list"===e.type)try{for(let t of e.outputs)try{let e=rb.fromBEEF(t.beef).id("hex"),r=`${e}.${t.outputIndex}`;a.set(r,t)}catch{continue}}catch(e){}return{type:"output-list",outputs:Array.from(a.values())}}async findCompetentHosts(e){let t={service:"ls_slap",query:{service:e}},r=await Promise.allSettled(this.slapTrackers.map(async e=>await this.facilitator.lookup(e,t,5e3))),i=new Set;for(let t of r)if("fulfilled"!==t.status)continue;else{let r=t.value;if("output-list"!==r.type)continue;for(let t of r.outputs)try{let r=rb.fromBEEF(t.beef).outputs[t.outputIndex].lockingScript,a=iu.decode(r);if(a.topicOrService!==e||"SLAP"!==a.protocol)continue;i.add(a.domain)}catch{continue}}return[...i]}}class iy{httpClient;allowHTTP;constructor(e=fetch,t=!1){this.httpClient=e,this.allowHTTP=t}async send(e,t){let r;if(!e.startsWith("https:")&&!this.allowHTTP)throw Error('HTTPS facilitator can only use URLs that start with "https:"');let i={"Content-Type":"application/octet-stream","X-Topics":JSON.stringify(t.topics)};if(Array.isArray(t.offChainValues)){i["x-includes-off-chain-values"]="true";let e=new eZ;e.writeVarIntNum(t.beef.length),e.write(t.beef),e.write(t.offChainValues),r=new Uint8Array(e.toArray())}else r=new Uint8Array(t.beef);let a=await fetch(`${e}/submit`,{method:"POST",headers:i,body:r});if(a.ok)return await a.json();throw Error("Failed to facilitate broadcast")}}class iw{topics;facilitator;resolver;requireAcknowledgmentFromAllHostsForTopics;requireAcknowledgmentFromAnyHostForTopics;requireAcknowledgmentFromSpecificHostsForTopics;networkPreset;constructor(e,t={}){if(0===e.length)throw Error("At least one topic is required for broadcast.");if(e.some(e=>!e.startsWith("tm_")))throw Error('Every topic must start with "tm_".');this.topics=e,this.networkPreset=t.networkPreset??"mainnet",this.facilitator=t.facilitator??new iy(void 0,"local"===this.networkPreset),this.resolver=t.resolver??new im({networkPreset:this.networkPreset}),this.requireAcknowledgmentFromAllHostsForTopics=t.requireAcknowledgmentFromAllHostsForTopics??[],this.requireAcknowledgmentFromAnyHostForTopics=t.requireAcknowledgmentFromAnyHostForTopics??"all",this.requireAcknowledgmentFromSpecificHostsForTopics=t.requireAcknowledgmentFromSpecificHostsForTopics??{}}async broadcast(e){let t,r,i,a,n,s=e.metadata.get("OffChainValues");try{t=e.toBEEF()}catch(e){throw Error("Transactions sent via SHIP to Overlay Services must be serializable to BEEF format.")}let o=await this.findInterestedHosts();if(0===Object.keys(o).length)return{status:"error",code:"ERR_NO_HOSTS_INTERESTED",description:`No ${this.networkPreset} hosts are interested in receiving this transaction.`};let c=Object.entries(o).map(async([e,r])=>{try{let i=await this.facilitator.send(e,{beef:t,offChainValues:s,topics:[...r]});if(null==i||0===Object.keys(i).length)throw Error("Steak has no topics.");return{host:e,success:!0,steak:i}}catch(t){return console.error(t),{host:e,success:!1,error:t}}}),l=(await Promise.all(c)).filter(e=>e.success);if(0===l.length)return{status:"error",code:"ERR_ALL_HOSTS_REJECTED",description:`All ${this.networkPreset} topical hosts have rejected the transaction.`};let d={};for(let e of l){let t=e.host,r=e.steak,i=new Set;for(let[e,t]of Object.entries(r)){let r=t.outputsToAdmit,a=t.coinsToRetain,n=t.coinsRemoved;(r?.length>0||a?.length>0||n?.length>0)&&i.add(e)}d[t]=i}return("all"===this.requireAcknowledgmentFromAllHostsForTopics?(r=this.topics,i="all"):"any"===this.requireAcknowledgmentFromAllHostsForTopics?(r=this.topics,i="any"):(r=Array.isArray(this.requireAcknowledgmentFromAllHostsForTopics)?this.requireAcknowledgmentFromAllHostsForTopics:this.topics,i="all"),r.length>0&&!this.checkAcknowledgmentFromAllHosts(d,r,i))?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ALL_HOSTS_FAILED",description:"Not all hosts acknowledged the required topics."}:("all"===this.requireAcknowledgmentFromAnyHostForTopics?(a=this.topics,n="all"):"any"===this.requireAcknowledgmentFromAnyHostForTopics?(a=this.topics,n="any"):(a=Array.isArray(this.requireAcknowledgmentFromAnyHostForTopics)?this.requireAcknowledgmentFromAnyHostForTopics:[],n="all"),a.length>0&&!this.checkAcknowledgmentFromAnyHost(d,a,n))?{status:"error",code:"ERR_REQUIRE_ACK_FROM_ANY_HOST_FAILED",description:"No host acknowledged the required topics."}:Object.keys(this.requireAcknowledgmentFromSpecificHostsForTopics).length>0&&!this.checkAcknowledgmentFromSpecificHosts(d,this.requireAcknowledgmentFromSpecificHostsForTopics)?{status:"error",code:"ERR_REQUIRE_ACK_FROM_SPECIFIC_HOSTS_FAILED",description:"Specific hosts did not acknowledge the required topics."}:{status:"success",txid:e.id("hex"),message:`Sent to ${l.length} Overlay Services ${1===l.length?"host":"hosts"}.`}}checkAcknowledgmentFromAllHosts(e,t,r){for(let i of Object.values(e))if("all"===r){for(let e of t)if(!i.has(e))return!1}else if("any"===r){let e=!1;for(let r of t)if(i.has(r)){e=!0;break}if(!e)return!1}return!0}checkAcknowledgmentFromAnyHost(e,t,r){if("all"===r){for(let r of Object.values(e)){let e=!0;for(let i of t)if(!r.has(i)){e=!1;break}if(e)return!0}return!1}for(let r of Object.values(e))for(let e of t)if(r.has(e))return!0;return!1}checkAcknowledgmentFromSpecificHosts(e,t){for(let[r,i]of Object.entries(t)){let t,a,n=e[r];if(null==n)return!1;if("all"===i||"any"===i)a=i,t=this.topics;else{if(!Array.isArray(i))continue;t=i,a="all"}if("all"===a){for(let e of t)if(!n.has(e))return!1}else if("any"===a){let e=!1;for(let r of t)if(n.has(r)){e=!0;break}if(!e)return!1}}return!0}async findInterestedHosts(){if("local"===this.networkPreset){let e=new Set;for(let t=0;t<this.topics.length;t++)e.add(this.topics[t]);return{"http://localhost:8080":e}}let e={},t=await this.resolver.query({service:"ls_ship",query:{topics:this.topics}},5e3);if("output-list"!==t.type)throw Error("SHIP answer is not an output list.");for(let r of t.outputs)try{let t=rb.fromBEEF(r.beef).outputs[r.outputIndex].lockingScript,i=iu.decode(t);if(!this.topics.includes(i.topicOrService)||"SHIP"!==i.protocol)continue;void 0===e[i.domain]&&(e[i.domain]=new Set),e[i.domain].add(i.topicOrService)}catch(e){continue}return e}}let iI=e=>(e.toLowerCase().startsWith("uhrp:")&&(e=e.slice(5)),e.startsWith("//")&&(e=e.slice(2)),e),iv=e=>{if(32!==e.length)throw Error("Hash length must be 32 bytes (sha256)");return eY(e,eF("ce00","hex"))},ik=e=>iv($(e)),iS=e=>{let{data:t,prefix:r}=eJ(e=iI(e),void 0,2);if(32!==t.length)throw Error("Invalid length!");if("ce00"!==eK(r))throw Error("Bad prefix");return t},ix=e=>{try{return iS(e),!0}catch(e){return!1}};class iP{authFetch;baseURL;constructor(e){this.baseURL=e.storageURL,this.authFetch=new ih(e.wallet)}async getUploadInfo(e,t){let r=`${this.baseURL}/upload`,i=await this.authFetch.fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileSize:e,retentionPeriod:t})});if(!i.ok)throw Error(`Upload info request failed: HTTP ${i.status}`);let a=await i.json();if("error"===a.status)throw Error("Upload route returned an error.");return{uploadURL:a.uploadURL,requiredHeaders:a.requiredHeaders,amount:a.amount}}async uploadFile(e,t,r){let i=Uint8Array.from(t.data),a=await fetch(e,{method:"PUT",body:i,headers:{"Content-Type":t.type,...r}});if(!a.ok)throw Error(`File upload failed: HTTP ${a.status}`);return{published:!0,uhrpURL:await ik(t.data)}}async publishFile(e){let{file:t,retentionPeriod:r}=e,i=t.data.length,{uploadURL:a,requiredHeaders:n}=await this.getUploadInfo(i,r);return await this.uploadFile(a,t,n)}async findFile(e){let t=new URL(`${this.baseURL}/find`);t.searchParams.set("uhrpUrl",e);let r=await this.authFetch.fetch(t.toString(),{method:"GET"});if(!r.ok)throw Error(`findFile request failed: HTTP ${r.status}`);let i=await r.json();if("error"===i.status){let e=i.code??"unknown-code",t=i.description??"no-description";throw Error(`findFile returned an error: ${e} - ${t}`)}return i.data}async listUploads(){let e=`${this.baseURL}/list`,t=await this.authFetch.fetch(e,{method:"GET"});if(!t.ok)throw Error(`listUploads request failed: HTTP ${t.status}`);let r=await t.json();if("error"===r.status){let e=r.code??"unknown-code",t=r.description??"no-description";throw Error(`listUploads returned an error: ${e} - ${t}`)}return r.uploads}async renewFile(e,t){let r=`${this.baseURL}/renew`,i=await this.authFetch.fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({uhrpUrl:e,additionalMinutes:t})});if(!i.ok)throw Error(`renewFile request failed: HTTP ${i.status}`);let a=await i.json();if("error"===a.status){let e=a.code??"unknown-code",t=a.description??"no-description";throw Error(`renewFile returned an error: ${e} - ${t}`)}return{status:a.status,prevExpiryTime:a.prevExpiryTime,newExpiryTime:a.newExpiryTime,amount:a.amount}}}class iE{networkPreset="mainnet";constructor(e){this.networkPreset=e?.networkPreset}async resolve(e){let t=new im({networkPreset:this.networkPreset}),r=await t.query({service:"ls_uhrp",query:{uhrpUrl:e}});if("output-list"!==r.type)throw Error("Lookup answer must be an output list");let i=[],a=Math.floor(Date.now()/1e3);for(let e=0;e<r.outputs.length;e++){let t=rb.fromBEEF(r.outputs[e].beef),{fields:n}=t7.decode(t.outputs[r.outputs[e].outputIndex].lockingScript);new eQ(n[3]).readVarIntNum()<a||i.push(e$(n[2]))}return i}async download(e){if(!ix(e))throw Error("Invalid parameter UHRP url");let t=iS(e),r=await this.resolve(e);if(!Array.isArray(r)||0===r.length)throw Error("No one currently hosts this file!");for(let e=0;e<r.length;e++)try{let i=await fetch(r[e],{method:"GET"});if(!i.ok||i.status>=400)continue;let a=await i.arrayBuffer(),n=[...new Uint8Array(a)],s=$(n);for(let e=0;e<s.length;++e)if(s[e]!==t[e])throw Error("Value of content does not match hash of the url given");return{data:n,mimeType:i.headers.get("Content-Type")}}catch(e){continue}throw Error(`Unable to download content from ${e}`)}}let iN={name:"Unknown Identity",avatarURL:"XUUB8bbn9fEthk15Ge3zTQXypUShfC94vFjp65v7u5CQ8qkpxzst",identityKey:"",abbreviatedKey:"",badgeIconURL:"XUUV39HVPkpmMzYNTx7rpKzJvXfeiVyQWg2vfSpjBAuhunTCA9uG",badgeLabel:"Not verified by anyone you trust.",badgeClickURL:"https://projectbabbage.com/docs/unknown-identity"},iO={protocolID:[1,"identity"],keyID:"1",tokenAmount:1,outputIndex:0},i_={identiCert:"z40BOInXkI8m7f/wBrv4MJ09bZfzZbTj2fJqCtONqCY=",discordCert:"2TgqRC35B1zehGmB21xveZNc7i5iqHc0uxMb+1NMPW4=",phoneCert:"mffUklUzxbHr65xLohn0hRL0Tq2GjW1GYF/OPfzqJ6A=",xCert:"vdDWvftf1H+5+ZprUw123kjHlywH+v20aPQTuXgMpNc=",registrant:"YoPsbfR6YQczjzPdHCoGC7nJsOdPQR50+SYqcWpJ0y0=",emailCert:"exOl3KM0dIJ04EW5pZgbZmPag6MdJXd3/a1enmUU/BA=",anyone:"mfkOMfLDQmrr3SBxBQ5WeE+6Hy3VJRFq6w4A5Ljtlis=",self:"Hkge6X5JRxt1cWXtHLCrSTg6dCVTxjQJJ48iOYd7n3g=",coolCert:"AGfk/WrT1eBDXpz3mcw386Zww2HmqcIn3uY6x4Af1eo="};class iA{options;originator;authClient;wallet;constructor(e,t=iO,r){this.options=t,this.originator=r,this.wallet=e??new r5,this.authClient=new ih(this.wallet)}async publiclyRevealAttributes(e,t){if(0===Object.keys(e.fields).length)throw Error("Public reveal failed: Certificate has no fields to reveal!");if(0===t.length)throw Error("Public reveal failed: You must reveal at least one field!");try{let t=new rQ(e.type,e.serialNumber,e.subject,e.certifier,e.revocationOutpoint,e.fields,e.signature);await t.verify()}catch(e){throw Error("Public reveal failed: Certificate verification failed!")}let{keyringForVerifier:r}=await this.wallet.proveCertificate({certificate:e,fieldsToReveal:t,verifier:new tO(1).toPublicKey().toString()}),i=await new t7(this.wallet).lock([eF(JSON.stringify({...e,keyring:r}))],this.options.protocolID,this.options.keyID,"anyone",!0,!0),{tx:a}=await this.wallet.createAction({description:"Create a new Identity Token",outputs:[{satoshis:this.options.tokenAmount,lockingScript:i.toHex(),outputDescription:"Identity Token"}],options:{randomizeOutputs:!1}});if(void 0!==a){let e=new iw(["tm_identity"],{networkPreset:(await this.wallet.getNetwork({})).network});return await e.broadcast(rb.fromAtomicBEEF(a))}throw Error("Public reveal failed: failed to create action!")}async resolveByIdentityKey(e){let{certificates:t}=await this.wallet.discoverByIdentityKey(e,this.originator);return t.map(e=>iA.parseIdentity(e))}async resolveByAttributes(e){let{certificates:t}=await this.wallet.discoverByAttributes(e,this.originator);return t.map(e=>iA.parseIdentity(e))}static parseIdentity(e){let t,r,i,a,n,{type:s,decryptedFields:o,certifierInfo:c}=e;switch(s){case i_.xCert:t=o.userName,r=o.profilePhoto,i=`X account certified by ${c.name}`,a=c.iconUrl,n="https://socialcert.net";break;case i_.discordCert:t=o.userName,r=o.profilePhoto,i=`Discord account certified by ${c.name}`,a=c.iconUrl,n="https://socialcert.net";break;case i_.emailCert:t=o.email,r="XUTZxep7BBghAJbSBwTjNfmcsDdRFs5EaGEgkESGSgjJVYgMEizu",i=`Email certified by ${c.name}`,a=c.iconUrl,n="https://socialcert.net";break;case i_.phoneCert:t=o.phoneNumber,r="XUTLxtX3ELNUwRhLwL7kWNGbdnFM8WG2eSLv84J7654oH8HaJWrU",i=`Phone certified by ${c.name}`,a=c.iconUrl,n="https://socialcert.net";break;case i_.identiCert:t=`${o.firstName} ${o.lastName}`,r=o.profilePhoto,i=`Government ID certified by ${c.name}`,a=c.iconUrl,n="https://identicert.me";break;case i_.registrant:t=o.name,r=o.icon,i=`Entity certified by ${c.name}`,a=c.iconUrl,n="https://projectbabbage.com/docs/registrant";break;case i_.coolCert:t="true"===o.cool?"Cool Person!":"Not cool!";break;case i_.anyone:t="Anyone",r="XUT4bpQ6cpBaXi1oMzZsXfpkWGbtp2JTUYAoN7PzhStFJ6wLfoeR",i="Represents the ability for anyone to access this information.",a="XUUV39HVPkpmMzYNTx7rpKzJvXfeiVyQWg2vfSpjBAuhunTCA9uG",n="https://projectbabbage.com/docs/anyone-identity";break;case i_.self:t="You",r="XUT9jHGk2qace148jeCX5rDsMftkSGYKmigLwU2PLLBc7Hm63VYR",i="Represents your ability to access this information.",a="XUUV39HVPkpmMzYNTx7rpKzJvXfeiVyQWg2vfSpjBAuhunTCA9uG",n="https://projectbabbage.com/docs/self-identity";break;default:t=iN.name,r=o.profilePhoto,i=iN.badgeLabel,a=iN.badgeIconURL,n=iN.badgeClickURL}return{name:t,avatarURL:r,abbreviatedKey:e.subject.length>0?`${e.subject.substring(0,10)}...`:"",identityKey:e.subject,badgeIconURL:a,badgeLabel:i,badgeClickURL:n}}}class iT{wallet;network;constructor(e=new r5){this.wallet=e}async registerDefinition(e){let t=(await this.wallet.getPublicKey({identityKey:!0})).publicKey,r=new t7(this.wallet),i=this.buildPushDropFields(e,t),a=this.mapDefinitionTypeToWalletProtocol(e.definitionType),n=await r.lock(i,a,"1","anyone",!0),{tx:s}=await this.wallet.createAction({description:`Register a new ${e.definitionType} item`,outputs:[{satoshis:1,lockingScript:n.toHex(),outputDescription:`New ${e.definitionType} registration token`,basket:this.mapDefinitionTypeToBasketName(e.definitionType)}],options:{randomizeOutputs:!1}});if(void 0===s)throw Error(`Failed to create ${e.definitionType} registration transaction!`);let o=new iw([this.mapDefinitionTypeToTopic(e.definitionType)],{networkPreset:this.network??=(await this.wallet.getNetwork({})).network});return await o.broadcast(rb.fromAtomicBEEF(s))}async resolve(e,t){let r=new im,i=this.mapDefinitionTypeToServiceName(e),a=await r.query({service:i,query:t});if("output-list"!==a.type)return[];let n=[];for(let t of a.outputs)try{let r=rb.fromBEEF(t.beef).outputs[t.outputIndex].lockingScript,i=await this.parseLockingScript(e,r);n.push(i)}catch{}return n}async listOwnRegistryEntries(e){let t=this.mapDefinitionTypeToBasketName(e),{outputs:r,BEEF:i}=await this.wallet.listOutputs({basket:t,include:"entire transactions"}),a=[];for(let t of r)if(t.spendable)try{let[r,n]=t.outpoint.split("."),s=rb.fromBEEF(i).outputs[n].lockingScript,o=await this.parseLockingScript(e,s);a.push({...o,txid:r,outputIndex:Number(n),satoshis:t.satoshis,lockingScript:s.toHex(),beef:i})}catch{}return a}async revokeOwnRegistryEntry(e){if(void 0===e.txid||void 0===e.outputIndex||void 0===e.lockingScript)throw Error("Invalid registry record. Missing txid, outputIndex, or lockingScript.");let t=(await this.wallet.getPublicKey({identityKey:!0})).publicKey;if(e.registryOperator!==t)throw Error("This registry token does not belong to the current wallet.");let r="basket"===e.definitionType?e.basketID:"protocol"===e.definitionType?e.name:"certificate"===e.definitionType?void 0!==e.name?e.name:e.type:"unknown",i=`${e.txid}.${e.outputIndex}`,{signableTransaction:a}=await this.wallet.createAction({description:`Revoke ${e.definitionType} item: ${r}`,inputBEEF:e.beef,inputs:[{outpoint:i,unlockingScriptLength:73,inputDescription:`Revoking ${e.definitionType} token`}]});if(void 0===a)throw Error("Failed to create signable transaction.");let n=rb.fromBEEF(a.tx),s=new t7(this.wallet),o=await s.unlock(this.mapDefinitionTypeToWalletProtocol(e.definitionType),"1","anyone","all",!1,e.satoshis,tJ.fromHex(e.lockingScript)),c=await o.sign(n,e.outputIndex),{tx:l}=await this.wallet.signAction({reference:a.reference,spends:{[e.outputIndex]:{unlockingScript:c.toHex()}},options:{acceptDelayedBroadcast:!1}});if(void 0===l)throw Error("Failed to finalize the transaction signature.");let d=new iw([this.mapDefinitionTypeToTopic(e.definitionType)],{networkPreset:this.network??=(await this.wallet.getNetwork({})).network});return await d.broadcast(rb.fromAtomicBEEF(l))}buildPushDropFields(e,t){let r;switch(e.definitionType){case"basket":r=[e.basketID,e.name,e.iconURL,e.description,e.documentationURL];break;case"protocol":r=[JSON.stringify(e.protocolID),e.name,e.iconURL,e.description,e.documentationURL];break;case"certificate":r=[e.type,e.name,e.iconURL,e.description,e.documentationURL,JSON.stringify(e.fields)];break;default:throw Error("Unsupported definition type")}return r.push(t),r.map(e=>eF(e))}async parseLockingScript(e,t){let r,i,a=t7.decode(t);if(0===a.fields.length)throw Error("Not a valid registry pushdrop script.");switch(e){case"basket":{if(7!==a.fields.length)throw Error("Unexpected field count for basket type.");let[e,t,n,s,o,c]=a.fields;r=e$(c),i={definitionType:"basket",basketID:e$(e),name:e$(t),iconURL:e$(n),description:e$(s),documentationURL:e$(o)};break}case"protocol":{if(7!==a.fields.length)throw Error("Unexpected field count for protocol type.");let[e,t,n,s,o,c]=a.fields;r=e$(c),i={definitionType:"protocol",protocolID:iC(e$(e)),name:e$(t),iconURL:e$(n),description:e$(s),documentationURL:e$(o)};break}case"certificate":{if(8!==a.fields.length)throw Error("Unexpected field count for certificate type.");let[e,t,n,s,o,c,l]=a.fields;r=e$(l);let d={};try{d=JSON.parse(e$(c))}catch{}i={definitionType:"certificate",type:e$(e),name:e$(t),iconURL:e$(n),description:e$(s),documentationURL:e$(o),fields:d};break}default:throw Error(`Unsupported definition type: ${e}`)}return{...i,registryOperator:r}}mapDefinitionTypeToWalletProtocol(e){switch(e){case"basket":return[1,"basketmap"];case"protocol":return[1,"protomap"];case"certificate":return[1,"certmap"];default:throw Error(`Unknown definition type: ${e}`)}}mapDefinitionTypeToBasketName(e){switch(e){case"basket":return"basketmap";case"protocol":return"protomap";case"certificate":return"certmap";default:throw Error(`Unknown definition type: ${e}`)}}mapDefinitionTypeToTopic(e){switch(e){case"basket":return"tm_basketmap";case"protocol":return"tm_protomap";case"certificate":return"tm_certmap";default:throw Error(`Unknown definition type: ${e}`)}}mapDefinitionTypeToServiceName(e){switch(e){case"basket":return"ls_basketmap";case"protocol":return"ls_protomap";case"certificate":return"ls_certmap";default:throw Error(`Unknown definition type: ${e}`)}}}function iC(e){let t=JSON.parse(e);if(!Array.isArray(t)||2!==t.length)throw Error("Invalid wallet protocol format.");let[r,i]=t;if(![0,1,2].includes(r))throw Error("Invalid security level.");if("string"!=typeof i)throw Error("Invalid protocolID");return[r,i]}class iV{wallet;context;encrypt;originator;acceptDelayedBroadcast=!1;keyLocks=new Map;constructor(e=new r5,t="kvstore default",r=!0,i,a=!1){if("string"!=typeof t||t.length<1)throw Error("A context in which to operate is required.");this.wallet=e,this.context=t,this.encrypt=r,this.originator=i,this.acceptDelayedBroadcast=a}async queueOperationOnKey(e){let t=this.keyLocks.get(e);null==t&&(t=[],this.keyLocks.set(e,t));let r=()=>{},i=new Promise(e=>{r=e,null!=t&&t.push(e)});return 1===t.length&&r(),await i,t}finishOperationOnKey(e,t){t.shift(),t.length>0&&t[0]()}getProtocol(e){return{protocolID:[2,this.context],keyID:e}}async getOutputs(e,t){return await this.wallet.listOutputs({basket:this.context,tags:[e],tagQueryMode:"all",include:"entire transactions",limit:t})}async get(e,t){let r=await this.queueOperationOnKey(e);try{return(await this.lookupValue(e,t,5)).value}finally{this.finishOperationOnKey(e,r)}}getLockingScript(e,t){let[r,i]=e.outpoint.split("."),a=t.findTxid(r)?.tx;if(null==a)throw Error(`beef must contain txid ${r}`);return a.outputs[Number(i)].lockingScript}async lookupValue(e,t,r){let i,a=await this.getOutputs(e,r),n={value:t,outpoint:void 0,lor:a},{outputs:s}=a;if(0===s.length)return n;let o=s.slice(-1)[0];n.outpoint=o.outpoint;try{if(void 0===a.BEEF)throw Error("entire transactions listOutputs option must return valid BEEF");let e=this.getLockingScript(o,rp.fromBinary(a.BEEF)),t=t7.decode(e);if(t.fields.length<1||t.fields.length>2)throw Error("Invalid token.");i=t.fields[0]}catch(e){throw Error(`Invalid value found. You need to call set to collapse the corrupted state (or relinquish the corrupted ${s[0].outpoint} output from the ${this.context} basket) before you can get this value again.`)}if(this.encrypt){let{plaintext:t}=await this.wallet.decrypt({...this.getProtocol(e),ciphertext:i});n.value=e$(t)}else n.value=e$(i);return n}getInputs(e){let t=[];for(let r=0;r<e.length;r++)t.push({outpoint:e[r].outpoint,unlockingScriptLength:74,inputDescription:"Previous key-value token"});return t}async getSpends(e,t,r,i){let a=this.getProtocol(e),n=rb.fromAtomicBEEF(i),s={};for(let e=0;e<t.length;e++){let t=r.unlock(a.protocolID,a.keyID,"self"),i=await t.sign(n,e);s[e]={unlockingScript:i.toHex()}}return s}async set(e,t){let r=await this.queueOperationOnKey(e);try{let r,i=await this.lookupValue(e,void 0,10);if(i.value===t){if(void 0===i.outpoint)throw Error("outpoint must be valid when value is valid and unchanged");return i.outpoint}let a=this.getProtocol(e),n=eF(t,"utf8");if(this.encrypt){let{ciphertext:e}=await this.wallet.encrypt({...a,plaintext:n});n=e}let s=new t7(this.wallet,this.originator),o=await s.lock([n],a.protocolID,a.keyID,"self"),{outputs:c,BEEF:l}=i.lor;try{let t=this.getInputs(c),{txid:i,signableTransaction:a}=await this.wallet.createAction({description:`Update ${e} in ${this.context}`,inputBEEF:l,inputs:t,outputs:[{basket:this.context,tags:[e],lockingScript:o.toHex(),satoshis:1,outputDescription:"Key-value token"}],options:{acceptDelayedBroadcast:this.acceptDelayedBroadcast,randomizeOutputs:!1}});if(c.length>0&&"object"!=typeof a)throw Error("Wallet did not return a signable transaction when expected.");if(null==a)r=`${i}.0`;else{let t=await this.getSpends(e,c,s,a.tx),{txid:i}=await this.wallet.signAction({reference:a.reference,spends:t});r=`${i}.0`}}catch(t){throw Error(`There are ${c.length} outputs with tag ${e} that cannot be unlocked.`)}return r}finally{this.finishOperationOnKey(e,r)}}async remove(e){let t=await this.queueOperationOnKey(e);try{let t=[];for(;;){let{outputs:r,BEEF:i,totalOutputs:a}=await this.getOutputs(e);if(r.length>0){let n=new t7(this.wallet,this.originator);try{let a=this.getInputs(r),{signableTransaction:s}=await this.wallet.createAction({description:`Remove ${e} in ${this.context}`,inputBEEF:i,inputs:a,options:{acceptDelayedBroadcast:this.acceptDelayedBroadcast}});if("object"!=typeof s)throw Error("Wallet did not return a signable transaction when expected.");let o=await this.getSpends(e,r,n,s.tx),{txid:c}=await this.wallet.signAction({reference:s.reference,spends:o});if(void 0===c)throw Error("signAction must return a valid txid");t.push(c)}catch(t){throw Error(`There are ${a} outputs with tag ${e} that cannot be unlocked.`)}}if(r.length===a)break}return t}finally{this.finishOperationOnKey(e,t)}}}return s})());
|
|
20
|
+
//# sourceMappingURL=bundle.js.map
|