@cetusprotocol/deepbook-utils 1.4.1 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,31 @@
1
- "use strict";var it=Object.create;var Y=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,dt=Object.prototype.hasOwnProperty;var ut=(c,e,t)=>e in c?Y(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t;var lt=(c,e)=>{for(var t in e)Y(c,t,{get:e[t],enumerable:!0})},qe=(c,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of at(e))!dt.call(c,n)&&n!==t&&Y(c,n,{get:()=>e[n],enumerable:!(r=ot(e,n))||r.enumerable});return c};var Pe=(c,e,t)=>(t=c!=null?it(ct(c)):{},qe(e||!c||!c.__esModule?Y(t,"default",{value:c,enumerable:!0}):t,c)),gt=c=>qe(Y({},"__esModule",{value:!0}),c);var Ie=(c,e,t)=>(ut(c,typeof e!="symbol"?e+"":e,t),t);var br={};lt(br,{CLOCK_ADDRESS:()=>tr,CachedContent:()=>K,CetusClmmSDK:()=>ne,ClmmExpectSwapModule:()=>ar,ClmmFetcherModule:()=>or,ClmmIntegratePoolModule:()=>rr,ClmmIntegratePoolV2Module:()=>nr,ClmmIntegrateRouterModule:()=>sr,ClmmIntegrateRouterWithPartnerModule:()=>ir,ClmmIntegrateUtilsModule:()=>cr,CoinAssist:()=>v,CoinInfoAddress:()=>dr,CoinStoreAddress:()=>ur,DEEP_SCALAR:()=>ge,DEFAULT_GAS_BUDGET_FOR_MERGE:()=>Et,DEFAULT_GAS_BUDGET_FOR_SPLIT:()=>Bt,DEFAULT_GAS_BUDGET_FOR_STAKE:()=>qt,DEFAULT_GAS_BUDGET_FOR_TRANSFER:()=>vt,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI:()=>Mt,DEFAULT_NFT_TRANSFER_GAS_FEE:()=>It,DeepbookClobV2Moudle:()=>gr,DeepbookCustodianV2Moudle:()=>lr,DeepbookEndpointsV2Moudle:()=>pr,DeepbookUtilsModule:()=>ee,FLOAT_SCALAR:()=>U,FLOAT_SCALING:()=>$,GAS_SYMBOL:()=>Pt,GAS_TYPE_ARG:()=>ce,GAS_TYPE_ARG_LONG:()=>he,MarginUtilsModule:()=>te,NORMALIZED_SUI_COIN_TYPE:()=>At,OrderType:()=>nt,RpcModule:()=>re,SUI_SYSTEM_STATE_OBJECT_ID:()=>Dt,SelfMatchingOption:()=>st,TransactionUtil:()=>F,YEAR_MS:()=>Ye,addHexPrefix:()=>_e,asIntN:()=>Rt,asUintN:()=>Ut,bufferToHex:()=>bt,cacheTime1min:()=>fe,cacheTime24h:()=>V,cacheTime5min:()=>ke,calc100PercentRepay:()=>er,calcDebtDetail:()=>tt,calcInterestRate:()=>et,calcUtilizationRate:()=>Xe,calculateRiskRatio:()=>Zt,checkAddress:()=>_t,composeType:()=>be,d:()=>g,decimalsMultiplier:()=>de,default:()=>_r,extractAddressFromType:()=>Ot,extractStructTagFromType:()=>R,fixCoinType:()=>Tt,fixDown:()=>G,fixSuiObjectId:()=>Ve,fromDecimalsAmount:()=>x,getDefaultSuiInputType:()=>mr,getFutureTime:()=>z,getMoveObject:()=>le,getMoveObjectType:()=>Qe,getMovePackageContent:()=>Lt,getObjectDeletedResponse:()=>xe,getObjectDisplay:()=>zt,getObjectFields:()=>Se,getObjectId:()=>Ae,getObjectNotExistsResponse:()=>Ke,getObjectOwner:()=>Kt,getObjectPreviousTransactionDigest:()=>xt,getObjectReference:()=>Te,getObjectType:()=>Gt,getObjectVersion:()=>Vt,getSuiObjectData:()=>Q,hasPublicTransfer:()=>Qt,hexToNumber:()=>ht,hexToString:()=>yt,isSortedSymbols:()=>Ct,isSuiObjectResponse:()=>ze,maxDecimal:()=>ue,mulRoundUp:()=>Me,normalizeCoinType:()=>oe,patchFixSuiObjectId:()=>ae,printTransaction:()=>Ht,removeHexPrefix:()=>ie,secretKeyToEd25519Keypair:()=>$t,secretKeyToSecp256k1Keypair:()=>Ft,shortAddress:()=>mt,shortString:()=>De,sleepTime:()=>Oe,toBuffer:()=>Ue,toDecimalsAmount:()=>J,utf8to16:()=>Re,wrapDeepBookMarginPoolInfo:()=>Be,wrapDeepBookPoolInfo:()=>je});module.exports=gt(br);var rt=require("@mysten/sui/graphql");var We=require("@mysten/deepbook-v3"),k=require("@mysten/sui/bcs"),S=require("@mysten/sui/transactions"),B=require("@mysten/sui/utils"),Je=require("js-base64");var ye=require("@mysten/sui/transactions");var L=require("@mysten/sui/utils");var pt=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function _e(c){return c.startsWith("0x")?c:`0x${c}`}function ie(c){return c.startsWith("0x")?`${c.slice(2)}`:c}function De(c,e=4,t=4){let r=Math.max(e,1),n=Math.max(t,1);return`${c.slice(0,r+2)} ... ${c.slice(-n)}`}function mt(c,e=4,t=4){return De(_e(c),e,t)}function _t(c,e={leadingZero:!0}){if(typeof c!="string")return!1;let t=c;if(e.leadingZero){if(!c.startsWith("0x"))return!1;t=t.substring(2)}return pt.test(t)}function Ue(c){if(!Buffer.isBuffer(c))if(Array.isArray(c))c=Buffer.from(c);else if(typeof c=="string")exports.isHexString(c)?c=Buffer.from(exports.padToEven(exports.stripHexPrefix(c)),"hex"):c=Buffer.from(c);else if(typeof c=="number")c=exports.intToBuffer(c);else if(c==null)c=Buffer.allocUnsafe(0);else if(c.toArray)c=Buffer.from(c.toArray());else throw new Error("invalid type");return c}function bt(c){return _e(Ue(c).toString("hex"))}function ht(c){let e=new ArrayBuffer(4),t=new DataView(e);for(let n=0;n<c.length;n++)t.setUint8(n,c.charCodeAt(n));return t.getUint32(0,!0)}function Re(c){let e,t,r,n,s;e="";let i=c.length;for(t=0;t<i;)switch(r=c.charCodeAt(t++),r>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=c.charAt(t-1);break;case 12:case 13:n=c.charCodeAt(t++),e+=String.fromCharCode((r&31)<<6|n&63);break;case 14:n=c.charCodeAt(t++),s=c.charCodeAt(t++),e+=String.fromCharCode((r&15)<<12|(n&63)<<6|(s&63)<<0);break}return e}function yt(c){let e="",t=ie(c),r=t.length/2;for(let n=0;n<r;n++)e+=String.fromCharCode(Number.parseInt(t.substr(n*2,2),16));return Re(e)}var ft=0,Fe=1,kt=2;function $e(c,e){return c===e?ft:c<e?Fe:kt}function wt(c,e){let t=0,r=c.length<=e.length?c.length:e.length,n=$e(c.length,e.length);for(;t<r;){let s=$e(c.charCodeAt(t),e.charCodeAt(t));if(t+=1,s!==0)return s}return n}function Ct(c,e){return wt(c,e)===Fe}function be(c,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],n=[c,...e].filter(Boolean).join("::");return t&&t.length&&(n+=`<${t.join(", ")}>`),n}function Ot(c){return c.split("::")[0]}function R(c){try{let e=c.replace(/\s/g,""),r=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(r){e=e.slice(0,e.indexOf("<"));let a={...R(e),type_arguments:r.map(d=>R(d).source_address)};return a.type_arguments=a.type_arguments.map(d=>v.isSuiCoin(d)?d:R(d).source_address),a.source_address=be(a.full_address,a.type_arguments),a}let n=e.split("::"),i={full_address:e,address:e===ce||e===he?"0x2":(0,L.normalizeSuiObjectId)(n[0]),module:n[1],name:n[2],type_arguments:[],source_address:""};return i.full_address=`${i.address}::${i.module}::${i.name}`,i.source_address=be(i.full_address,i.type_arguments),i}catch{return{full_address:c,address:"",module:"",name:"",type_arguments:[],source_address:c}}}function oe(c){return R(c).source_address}function Ve(c){return c.toLowerCase().startsWith("0x")?(0,L.normalizeSuiObjectId)(c):c}var Tt=(c,e=!0)=>{let t=c.split("::"),r=t.shift(),n=(0,L.normalizeSuiObjectId)(r);return e&&(n=ie(n)),`${n}::${t.join("::")}`};function ae(c){for(let e in c){let t=typeof c[e];if(t==="object")ae(c[e]);else if(t==="string"){let r=c[e];c[e]=Ve(r)}}}var At=(0,L.normalizeStructTag)(L.SUI_TYPE_ARG);var St="0x2::coin::Coin",jt=/^0x2::coin::Coin<(.+)>$/,Bt=1e3,Et=500,vt=100,Mt=100,qt=1e3,ce="0x2::sui::SUI",he="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Pt="SUI",It=450,Dt="0x0000000000000000000000000000000000000005",v=class{static getCoinTypeArg(e){let t=e.type.match(jt);return t?t[1]:null}static isSUI(e){let t=v.getCoinTypeArg(e);return t?v.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let r=BigInt(0);return e.forEach(n=>{t===n.coinAddress&&(r+=BigInt(n.balance))}),r}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${St}<${e}>`}static getCoinAssets(e,t){let r=[];return t.forEach(n=>{oe(n.coinAddress)===oe(e)&&r.push(n)}),r}static isSuiCoin(e){return R(e).full_address===ce}static selectCoinObjectIdGreaterThanOrEqual(e,t,r=[]){let n=v.selectCoinAssetGreaterThanOrEqual(e,t,r),s=n.selectedCoins.map(a=>a.coinObjectId),i=n.remainingCoins,o=n.selectedCoins.map(a=>a.balance.toString());return{objectArray:s,remainCoins:i,amountArray:o}}static selectCoinAssetGreaterThanOrEqual(e,t,r=[]){let n=v.sortByBalance(e.filter(d=>!r.includes(d.coinObjectId))),s=v.calculateTotalBalance(n);if(s<t)return{selectedCoins:[],remainingCoins:n};if(s===t)return{selectedCoins:n,remainingCoins:[]};let i=BigInt(0),o=[],a=[...n];for(;i<s;){let d=t-i,l=a.findIndex(m=>m.balance>=d);if(l!==-1){o.push(a[l]),a.splice(l,1);break}let u=a.pop();u.balance>0&&(o.push(u),i+=u.balance)}return{selectedCoins:v.sortByBalance(o),remainingCoins:v.sortByBalance(a)}}static sortByBalance(e){return e.sort((t,r)=>t.balance<r.balance?-1:t.balance>r.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,r)=>t.balance>r.balance?-1:t.balance<r.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,r)=>t+r.balance,BigInt(0))}static buildCoinWithBalance(e,t,r){return e===BigInt(0)&&v.isSuiCoin(t)?r.add((0,ye.coinWithBalance)({balance:e,useGasCoin:!1})):r.add((0,ye.coinWithBalance)({balance:e,type:t}))}};var fe=6e4,ke=3e5,V=864e5;function z(c){return Date.parse(new Date().toString())+c}var K=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};var W=require("@mysten/bcs"),we=require("@mysten/sui/keypairs/ed25519"),Ce=require("@mysten/sui/keypairs/secp256k1");var X=Pe(require("decimal.js"));function g(c){return X.default.isDecimal(c)?c:new X.default(c===void 0?0:c)}function de(c){return g(10).pow(g(c).abs())}var G=(c,e)=>{try{return g(c).toDP(e,X.default.ROUND_DOWN).toString()}catch{return c}},ue=(c,e)=>X.default.max(g(c),g(e));function J(c,e){let t=de(g(e));return Number(g(c).mul(t))}function Ut(c,e=32){return BigInt.asUintN(e,BigInt(c)).toString()}function Rt(c,e=32){return Number(BigInt.asIntN(e,BigInt(c)))}function x(c,e){let t=de(g(e));return Number(g(c).div(t))}function $t(c,e="hex"){if(c instanceof Uint8Array){let r=Buffer.from(c);return we.Ed25519Keypair.fromSecretKey(r)}let t=e==="hex"?(0,W.fromHEX)(c):(0,W.fromB64)(c);return we.Ed25519Keypair.fromSecretKey(t)}function Ft(c,e="hex"){if(c instanceof Uint8Array){let r=Buffer.from(c);return Ce.Secp256k1Keypair.fromSecretKey(r)}let t=e==="hex"?(0,W.fromHEX)(c):(0,W.fromB64)(c);return Ce.Secp256k1Keypair.fromSecretKey(t)}var Oe=async c=>new Promise(e=>{setTimeout(()=>{e(1)},c)});var Ne={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},Le={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6};function Ge(...c){let e="DeepbookV3_Utils_Sdk###"}function Q(c){return c.data}function xe(c){if(c.error&&"object_id"in c.error&&"version"in c.error&&"digest"in c.error){let{error:e}=c;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Ke(c){if(c.error&&"object_id"in c.error&&!("version"in c.error)&&!("digest"in c.error))return c.error.object_id}function Te(c){if("reference"in c)return c.reference;let e=Q(c);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:xe(c)}function Ae(c){return"objectId"in c?c.objectId:Te(c)?.objectId??Ke(c)}function Vt(c){return"version"in c?c.version:Te(c)?.version}function ze(c){return c.data!==void 0}function Nt(c){return c.content!==void 0}function Lt(c){let e=Q(c);if(e?.content?.dataType==="package")return e.content.disassembled}function le(c){let e="data"in c?Q(c):c;if(!(!e||!Nt(e)||e.content.dataType!=="moveObject"))return e.content}function Qe(c){return le(c)?.type}function Gt(c){let e=ze(c)?c.data:c;return!e?.type&&"data"in c?e?.content?.dataType==="package"?"package":Qe(c):e?.type}function xt(c){return Q(c)?.previousTransaction}function Kt(c){return Q(c)?.owner}function zt(c){let e=Q(c)?.display;return e||{data:null,error:null}}function Se(c){let e=le(c)?.fields;if(e)return"fields"in e?e.fields:e}function Qt(c){return le(c)?.hasPublicTransfer??!1}var He=require("@mysten/sui/transactions");async function Ht(c,e=!0){c.blockData.transactions.forEach((t,r)=>{})}var N=class{static async adjustTransactionForGas(e,t,r,n){n.setSender(e.senderAddress);let s=v.selectCoinAssetGreaterThanOrEqual(t,r).selectedCoins;if(s.length===0)throw new Error("Insufficient balance");let i=v.calculateTotalBalance(t);if(i-r>1e9)return{fixAmount:r};let o=await e.fullClient.calculationTxGas(n);if(v.selectCoinAssetGreaterThanOrEqual(t,BigInt(o),s.map(d=>d.coinObjectId)).selectedCoins.length===0){let d=BigInt(o)+BigInt(500);if(i-r<d){if(r-=d,r<0)throw new Error("gas Insufficient balance");let l=new He.Transaction;return{fixAmount:r,newTx:l}}}return{fixAmount:r}}static buildCoinForAmount(e,t,r,n,s=!0,i=!1){let o=v.getCoinAssets(n,t);if(r===BigInt(0)&&o.length===0)return N.buildZeroValueCoin(t,e,n,s);let a=v.calculateTotalBalance(o);if(a<r)throw new Error(`The amount(${a}) is Insufficient balance for ${n} , expect ${r} `);return N.buildCoin(e,t,o,r,n,s,i)}static buildCoin(e,t,r,n,s,i=!0,o=!1){if(v.isSuiCoin(s)){if(i){let h=e.splitCoins(e.gas,[e.pure.u64(n)]);return{targetCoin:e.makeMoveVec({elements:[h]}),remainCoins:t,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(n===0n&&r.length>1){let h=v.selectCoinObjectIdGreaterThanOrEqual(r,n);return{targetCoin:e.object(h.objectArray[0]),remainCoins:h.remainCoins,tragetCoinAmount:h.amountArray[0],isMintZeroCoin:!1}}let f=v.selectCoinObjectIdGreaterThanOrEqual(r,n);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(n)]),remainCoins:f.remainCoins,tragetCoinAmount:n.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let a=v.selectCoinObjectIdGreaterThanOrEqual(r,n),d=a.amountArray.reduce((f,O)=>Number(f)+Number(O),0).toString(),l=a.objectArray;if(i)return{targetCoin:e.makeMoveVec({elements:l.map(f=>e.object(f))}),remainCoins:a.remainCoins,tragetCoinAmount:a.amountArray.reduce((f,O)=>Number(f)+Number(O),0).toString(),isMintZeroCoin:!1};let[u,...m]=l,p=e.object(u),_=p,b=a.amountArray.reduce((f,O)=>Number(f)+Number(O),0).toString(),w;return m.length>0&&e.mergeCoins(p,m.map(f=>e.object(f))),o&&Number(d)>Number(n)&&(_=e.splitCoins(p,[e.pure.u64(n)]),b=n.toString(),w=p),{targetCoin:_,remainCoins:a.remainCoins,originalSplitedCoin:w,tragetCoinAmount:b,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,r,n=!0){let s=N.callMintZeroValueCoin(t,r),i;return n?i=t.makeMoveVec({elements:[s]}):i=s,{targetCoin:i,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,r,n,s=!0){let i=v.getCoinAssets(n,t);if(r.amountFirst===BigInt(0))return i.length>0?N.buildCoin(e,[...t],[...i],r.amountFirst,n,s):N.buildZeroValueCoin(t,e,n,s);let o=v.calculateTotalBalance(i);if(o>=r.amountFirst)return N.buildCoin(e,[...t],[...i],r.amountFirst,n,s);if(o<r.amountSecond)throw new Error(`The amount(${o}) is Insufficient balance for ${n} , expect ${r.amountSecond} `);return N.buildCoin(e,[...t],[...i],r.amountSecond,n,s)}static buildCoinTypePair(e,t){let r=[];if(e.length===2){let n=[];n.push(e[0],e[1]),r.push(n)}else{let n=[];n.push(e[0],e[e.length-1]),r.push(n);for(let s=1;s<e.length-1;s+=1){if(t[s-1]===0)continue;let i=[];i.push(e[0],e[s],e[e.length-1]),r.push(i)}}return r}},F=N;Ie(F,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));var ge=1e6,U=1e9,Wt={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},Jt={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},ee=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?Jt:Wt}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new S.Transaction,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}createAndDepsit({account:e,coin:t,amountToDeposit:r}){let n=new S.Transaction;n.setSenderIfNotSet(e);let s=n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),i=(0,S.coinWithBalance)({type:t.coinType,balance:BigInt(r)});return n.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[s,i],typeArguments:[t.coinType]}),n.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[n.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),s],typeArguments:[]}),n.moveCall({target:"0x2::transfer::public_share_object",arguments:[s],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),n}depositIntoManager({account:e,balanceManager:t,coin:r,amountToDeposit:n,tx:s}){let i=s||new S.Transaction;if(t){i.setSenderIfNotSet(e);let o=(0,S.coinWithBalance)({type:r.coinType,balance:BigInt(n)});return i.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[i.object(t),o],typeArguments:[r.coinType]}),i}return null}withdrawFromManager({account:e,balanceManager:t,coin:r,amountToWithdraw:n,returnAssets:s,txb:i}){let o=i||new S.Transaction,a=o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[o.object(t),o.pure.u64(n)],typeArguments:[r.coinType]});return s?a:(o.transferObjects([a],e),o)}withdrawManagersFreeBalance({account:e,balanceManagers:t,tx:r=new S.Transaction}){for(let n in t)t[n].forEach(i=>{let o=r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::withdraw`,arguments:[r.object(n),r.pure.u64(i.amount)],typeArguments:[i.coinType]});r.transferObjects([o],e)});return r}async getBalanceManager(e,t=!0){let r=`getBalanceManager_${e}`,n=this.getCache(r,t);if(!t&&n!==void 0)return n;try{let s=new S.Transaction;s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),s.pure.address(e)],typeArguments:[]});let a=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}))?.events?.filter(l=>l.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],d=[];return a.forEach(l=>{d.push({balanceManager:l,cetusBalanceManager:""})}),this.updateCache(r,d,864e5),d||[]}catch(s){throw s instanceof Error?s:new Error(String(s))}}withdrawSettledAmounts({poolInfo:e,balanceManager:t},r=new S.Transaction){let n=r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[r.object(t)]});return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[r.object(e.address),r.object(t),n],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),r}async getManagerBalance({account:e,balanceManager:t,coins:r}){try{let n=new S.Transaction;r.forEach(o=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[n.object(t)],typeArguments:[o.coinType]})});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n}),i={};return s.results?.forEach((o,a)=>{let d=r[a],l=o.returnValues[0][0],u=k.bcs.U64.parse(new Uint8Array(l)),m=g(u),p=m.eq(0)?"0":m.div(Math.pow(10,d.decimals)).toString();i[d.coinType]={adjusted_balance:p,balance:m.toString()}}),i}catch(n){throw n instanceof Error?n:new Error(String(n))}}async getAccountAllManagerBalance({account:e,coins:t}){try{let r=new S.Transaction,n=await this.getBalanceManager(e,!0);if(!Array.isArray(n)||n.length===0)return{};n.forEach(o=>{t.forEach(a=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[r.object(o.balanceManager)],typeArguments:[a.coinType]})})});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}),i={};return n.forEach((o,a)=>{let d={},l=a*t.length;t.forEach((u,m)=>{let p=l+m,_=s.results?.[p];if(_){let b=_.returnValues[0][0],w=k.bcs.U64.parse(new Uint8Array(b)),f=g(w),O=f.eq(0)?"0":f.div(Math.pow(10,u.decimals)).toString();d[u.coinType]={adjusted_balance:O,balance:f.toString()}}}),i[o.balanceManager]=d}),i}catch(r){throw r instanceof Error?r:new Error(String(r))}}async getMarketPrice(e){try{let t=new S.Transaction;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let n=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],s=Number(k.bcs.U64.parse(new Uint8Array(n))),i=Math.pow(10,e.baseCoin.decimals).toString(),o=Math.pow(10,e.quoteCoin.decimals).toString();return g(s).mul(i).div(o).div(U).toString()}catch(t){return Ge("getMarketPrice ~ error:",t),"0"}}async getPools(e=!1){let t="Deepbook_getPools",r=this.getCache(t,e);if(r!==void 0)return r;let n=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),s=/<([^>]+)>/,i=[];return n?.data?.forEach(o=>{let a=o?.parsedJson,d=o.type.match(s);if(d){let u=d[1].split(", ");i.push({...a,baseCoinType:u[0],quoteCoinType:u[1]})}}),this.updateCache(t,i,864e5),i}async getQuoteQuantityOut(e,t,r){let n=new S.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:n}),i=String(k.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),o=String(k.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[1][0]))),a=String(k.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[2][0])));return{baseQuantityDisplay:g(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:g(i).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:g(o).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:g(a).div(ge).toString(),baseQuantity:t,baseOut:i,quoteOut:o,deepRequired:a}}async getBaseQuantityOut(e,t,r){let n=new S.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[n.object(e.address),n.pure.u64(t),n.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:n}),i=String(k.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),o=String(k.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[1][0]))),a=String(k.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[2][0])));return{quoteQuantityDisplay:g(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:g(i).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:g(o).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:g(a).div(ge).toString(),quoteQuantity:t,baseOut:i,quoteOut:o,deepRequired:a}}async getQuantityOut(e,t,r,n){let s=new S.Transaction;s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[s.object(e.address),s.pure.u64(t),s.pure.u64(r),s.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:n,transactionBlock:s}),o=Number(k.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0]))),a=Number(k.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]))),d=Number(k.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])));return{baseQuantityDisplay:g(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:g(r).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:g(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:g(a).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:g(d).div(ge).toString(),baseQuantity:t,quoteQuantity:r,baseOut:o,quoteOut:a,deepRequired:d}}async getReferencePool(e){let t=await this.getPools(),r=e.baseCoin.coinType,n=e.quoteCoin.coinType,s=this._deep.coinType;for(let i=0;i<t.length;i++){let o=t[i];if(o.address===e.address)continue;let a=[o.baseCoinType,o.quoteCoinType];if(o.baseCoinType===s&&(a.includes(r)||a.includes(n)))return o}return null}async updateDeepPrice(e,t){let r=await this.getReferencePool(e);return r?(t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::add_deep_price_point`,arguments:[t.object(e.address),t.object(r.pool_id),t.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType,r.baseCoinType,r.quoteCoinType]}),t):null}async estimatedMaxFee(e,t,r,n,s,i,o){let a=this.deepCoin;try{let{taker_fee:d,maker_fee:l}=e,u=g(d).div(U).toString(),m=g(l).div(U).toString(),p=await this.getMarketPrice(e),_=i?r:p!=="0"?p:o;if(_==="0")throw new Error("Cannot get market price");let b=Math.pow(10,e.baseCoin.decimals).toString(),w=Math.pow(10,e.quoteCoin.decimals).toString(),f=g(_).div(b).mul(w).mul(U).toString();if(n){let A=await this.getMarketPrice(e),T=g(i?r:A!=="0"?A:o).div(b).mul(w).mul(U).toString(),M=await this.getOrderDeepPrice(e);if(!M)throw new Error("Cannot get deep price");let q=ue(T,r),I=g(t).mul(g(u)).mul(g(M.deep_per_asset)).div(g(U)),P=g(t).mul(g(m)).mul(g(M.deep_per_asset)).div(g(U));M.asset_is_base||(I=I.mul(q).div(g(U)),P=P.mul(q).div(g(U)));let D=I.ceil().toString(),se=P.ceil().toString();return{takerFee:D,makerFee:se,takerFeeDisplay:x(D,a.decimals).toString(),makerFeeDisplay:x(se,a.decimals).toString(),feeType:a.coinType}}if(s){let A=ue(f,i?r:p),j=g(t).mul(A).mul(g(u).mul(1.25)).div(g(U)).ceil().toFixed(0),T=g(t).mul(A).mul(g(m).mul(1.25)).div(g(U)).ceil().toFixed(0);return{takerFee:j,makerFee:T,takerFeeDisplay:x(j,e.quoteCoin.decimals).toString(),makerFeeDisplay:x(T,e.quoteCoin.decimals).toString(),feeType:e.quoteCoin.coinType}}let O=g(t).mul(g(u).mul(1.25)).ceil().toFixed(0),h=g(t).mul(g(m).mul(1.25)).ceil().toFixed(0);return{takerFee:O,makerFee:h,takerFeeDisplay:x(O,e.baseCoin.decimals).toString(),makerFeeDisplay:x(h,e.baseCoin.decimals).toString(),feeType:e.baseCoin.coinType}}catch(d){throw d instanceof Error?d:new Error(String(d))}}async getOrderDeepPrice(e,t=!0){let r=`getOrderDeepPrice_${e.address}}`,n=this.getCache(r);if(n!==void 0)return n;try{let s=new S.Transaction,i=!1;t&&e?.baseCoin?.coinType!==this._deep.coinType&&e?.quoteCoin?.coinType!==this._deep.coinType&&await this.updateDeepPrice(e,s)&&(i=!0),s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[s.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:s}),a=i?o.results[1]?.returnValues[0]?.[0]:o.results[0]?.returnValues[0]?.[0],d=this.parseOrderDeepPrice(new Uint8Array(a));return this.updateCache(r,d,6e4),d}catch{return await Oe(2e3),this.getOrderDeepPrice(e,!1)}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),r=t.getUint8(0)!==0,n=Number(t.getBigUint64(1,!0));return{asset_is_base:r,deep_per_asset:n}}getCoinAssets(e,t,r,n){return F.buildCoinForAmount(n,r,BigInt(g(t).abs().ceil().toString()),e,!1,!0).targetCoin}async getTransactionRelatedBalance(e,t,r,n,s,i,o){let a=this.deepCoin;if(!o)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};try{let d=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];n&&d.push(a);let l=await this.getManagerBalance({account:s,balanceManager:o,coins:d}),u=l?.[t]?.balance||"0",m=l?.[r]?.balance||"0",p=i&&l?.[a.coinType]?.balance||"0";return{baseManagerBlance:u,quoteManagerBlance:m,feeManaerBalance:p}}catch(d){throw d instanceof Error?d:new Error(String(d))}}getFeeAsset(e,t,r,n,s,i,o,a,d,l){let u=g(e).gt(0)&&d,m="0";if(!u)return{feeAsset:this.getEmptyCoin(l,t),haveDepositFee:"0"};if(i||o){let p=g(s).sub(i?n:r);m=p.lte(0)?e:p.sub(e).lt(0)?p.sub(e).toString():"0"}else m=g(s).sub(e).lt("0")?g(s).sub(e).abs().toString():"0";return{feeAsset:g(m).gt("0")?this.getCoinAssets(t,m,a,l):this.getEmptyCoin(l,t),haveDepositFee:m}}async getTransactionRelatedAssets(e,t,r,n,s,i,o,a,d){try{let l=this.deepCoin,u=(0,B.normalizeStructTag)(e.baseCoin.coinType),m=(0,B.normalizeStructTag)(e.quoteCoin.coinType),p=u===l.coinType,_=m===l.coinType,b=!p&&!_,{baseManagerBlance:w,quoteManagerBlance:f,feeManaerBalance:O}=await this.getTransactionRelatedBalance(e,u,m,b,i,o,a);console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:897 ~ DeepbookUtilsModule ~ getTransactionRelatedAssets ~ quoteManagerBlance:",{baseManagerBlance:w,quoteManagerBlance:f});let h,A,j=!1,T=await this._sdk.getOwnerCoinAssets(i);if(s){o||(r=g(r).add(g(n)).toString());let q=g(f).sub(r).toString();g(q).lt(0)?(j=!0,A=this.getCoinAssets(m,q,T,d)):A=this.getEmptyCoin(d,m),h=this.getEmptyCoin(d,u)}else{o||(t=g(t).add(g(n)).toString());let q=g(w).sub(t).toString();g(q).lt(0)?(j=!0,h=this.getCoinAssets(u,q,T,d)):h=this.getEmptyCoin(d,u),A=this.getEmptyCoin(d,m)}let M=this.getFeeAsset(n,l.coinType,t,r,O,_,p,T,o,d);return{baseAsset:h,quoteAsset:A,feeAsset:M,haveDeposit:j}}catch(l){throw l instanceof Error?l:new Error(String(l))}}async getMarketTransactionRelatedAssets(e,t,r,n,s,i,o,a,d,l){try{let u=this.deepCoin,m=(0,B.normalizeStructTag)(e.baseCoin.coinType),p=(0,B.normalizeStructTag)(e.quoteCoin.coinType),_=m===u.coinType,b=p===u.coinType,w=!_&&!b,f=await this.getTransactionRelatedBalance(e,m,p,w,i,o,a),{feeManaerBalance:O}=f,h=g(f.baseManagerBlance).add(g(l?.base||"0")).toString(),A=g(f.quoteManagerBlance).add(g(l?.quote||"0")).toString(),j=await this._sdk.getOwnerCoinAssets(i),T;o&&g(O).lt(n)?T=this.getCoinAssets(u.coinType,g(n).sub(O).toString(),j,d):T=this.getEmptyCoin(d,u.coinType);let M,q;if(s){o||(r=g(r).add(g(n)).toString());let I=g(A).sub(r).toString();if(g(I).lt(0)){let P;g(A).gt(0)&&(P=this.withdrawFromManager({account:i,balanceManager:a,coin:e.quoteCoin,amountToWithdraw:A,returnAssets:!0,txb:d}));let D=this.getCoinAssets(p,I,j,d);P&&d.mergeCoins(D,[P]),q=D}else q=this.withdrawFromManager({account:i,balanceManager:a,coin:e.quoteCoin,amountToWithdraw:r,returnAssets:!0,txb:d});M=this.getEmptyCoin(d,m)}else{o||(t=g(t).add(g(n)).toString());let I=g(h).sub(t).toString();if(g(I).lt(0)){let P;g(h).gt(0)&&(P=this.withdrawFromManager({account:i,balanceManager:a,coin:e.baseCoin,amountToWithdraw:h,returnAssets:!0,txb:d}));let D=this.getCoinAssets(m,I,j,d);P&&d.mergeCoins(D,[P]),M=D}else M=this.withdrawFromManager({account:i,balanceManager:a,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:d});q=this.getEmptyCoin(d,p)}return{baseAsset:M,quoteAsset:q,feeAsset:T}}catch(u){throw u instanceof Error?u:new Error(String(u))}}async createDepositThenPlaceLimitOrder({poolInfo:e,priceInput:t,quantity:r,orderType:n,isBid:s,maxFee:i,account:o,payWithDeep:a,expirationTimestamp:d=Date.now()+31536e8}){try{let l=this.deepCoin,u=e.address,m=e.baseCoin.decimals,p=e.quoteCoin.decimals,_=e.baseCoin.coinType,b=e.quoteCoin.coinType,w=g(t).mul(10**(p-m+9)).toString(),f=(0,B.normalizeStructTag)(_),O=(0,B.normalizeStructTag)(b),h=new S.Transaction,A,j,T=await this._sdk.getOwnerCoinAssets(o);if(s){let P=g(t).mul(g(r).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();a||(P=g(P).add(g(i)).toString()),j=F.buildCoinForAmount(h,T,BigInt(P),O,!1,!0)?.targetCoin}else{let P=r;a||(P=g(r).abs().add(g(i)).toString()),A=F.buildCoinForAmount(h,T,BigInt(g(P).abs().toString()),f,!1,!0)?.targetCoin}let M=a?g(i).gt(0)?F.buildCoinForAmount(h,T,BigInt(g(i).abs().ceil().toString()),l.coinType,!1,!0).targetCoin:this.getEmptyCoin(h,l.coinType):this.getEmptyCoin(h,l.coinType),q=h.moveCall({typeArguments:[s?_:b],target:"0x2::coin::zero",arguments:[]}),I=[h.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),h.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),h.object(u),s?q:A,s?j:q,M,h.pure.u8(n),h.pure.u8(0),h.pure.u64(w),h.pure.u64(r),h.pure.bool(s),h.pure.bool(!1),h.pure.u64(d),h.object(B.SUI_CLOCK_OBJECT_ID)];return h.moveCall({typeArguments:[f,O],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:I}),h}catch(l){throw l instanceof Error?l:new Error(String(l))}}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder({poolInfo:e,quantity:t,isBid:r,maxFee:n,account:s,payWithDeep:i,slippage:o=.01}){try{let a=e.address,d=e.baseCoin.coinType,l=e.quoteCoin.coinType,u=(0,B.normalizeStructTag)(d),m=(0,B.normalizeStructTag)(l),p=new S.Transaction,_,b,w=t,f,O=await this.getOrderBook(e,"all",6);if(r){let T=O?.ask?.[0]?.price||"0",M=g(T).mul(g(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();f=g(M).plus(g(M).mul(o)).ceil().toString()}else{let T=await O?.bid?.[0]?.price||"0",M=g(T).mul(g(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();f=g(M).minus(g(M).mul(o)).floor().toString()}let h=await this._sdk.getOwnerCoinAssets(s);r?(i||(f=g(f).add(g(n)).toString()),b=this.getCoinAssets(m,f,h,p),_=this.getEmptyCoin(p,u)):(i||(w=g(w).add(g(n)).toString()),b=this.getEmptyCoin(p,m),_=this.getCoinAssets(u,w,h,p));let A=i?g(n).gt(0)?F.buildCoinForAmount(p,h,BigInt(g(n).abs().ceil().toString()),this.deepCoin.coinType,!1,!0).targetCoin:this.getEmptyCoin(p,this.deepCoin.coinType):this.getEmptyCoin(p,this.deepCoin.coinType),j=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(a),_,b,A,p.pure.u8(0),p.pure.u64(t),p.pure.bool(r),p.pure.bool(i),p.pure.u64(f),p.object(B.SUI_CLOCK_OBJECT_ID)];return p.moveCall({typeArguments:[u,m],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:j}),p}catch(a){throw a instanceof Error?a:new Error(String(a))}}async placeLimitOrder({balanceManager:e,poolInfo:t,priceInput:r,quantity:n,isBid:s,orderType:i,maxFee:o,account:a,payWithDeep:d,expirationTimestamp:l=Date.now()+31536e8}){try{let u=this.deepCoin,m=g(r).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),p=t.baseCoin.coinType,_=t.quoteCoin.coinType,b=new S.Transaction,w=s?g(r).mul(g(n).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",f=s?"0":n,{baseAsset:O,quoteAsset:h,feeAsset:A,haveDeposit:j}=await this.getTransactionRelatedAssets(t,f,w,o,s,a,d,e,b);if(j){let q=[b.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),b.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),b.object(t.address),b.object(e),O,h,A.feeAsset,b.pure.u8(i),b.pure.u8(0),b.pure.u64(m),b.pure.u64(n),b.pure.bool(s),b.pure.bool(d),b.pure.u64(l),b.object(B.SUI_CLOCK_OBJECT_ID)];return b.moveCall({typeArguments:[p,_],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:q}),b}let T=new S.Transaction;g(A.haveDepositFee).gt(0)&&this.depositIntoManager({account:a,balanceManager:e,coin:u,amountToDeposit:A.haveDepositFee,tx:T});let M=[T.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),T.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),T.object(t.address),T.object(e),T.pure.u8(i),T.pure.u8(0),T.pure.u64(m),T.pure.u64(n),T.pure.bool(s),T.pure.bool(d),T.pure.u64(l),T.object(B.SUI_CLOCK_OBJECT_ID)];return T.moveCall({typeArguments:[p,_],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:M}),T}catch(u){throw u instanceof Error?u:new Error(String(u))}}modifyOrder({balanceManager:e,poolInfo:t,orderId:r,newOrderQuantity:n}){let s=new S.Transaction;return s.moveCall({typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::modify_order`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),s.object(e),s.object(t.address),s.pure.u128(r),s.pure.u64(n),s.object(B.SUI_CLOCK_OBJECT_ID)]}),s}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:r}=e,n=new S.Transaction,s=await this.getMarketPrice(e),i=g(s).gt(0)?s:Math.pow(10,-1),o=Math.pow(10,6),a=g(i).mul(Math.pow(10,9+r.decimals-t.decimals)).toString(),d=g(o).mul(Math.pow(10,9+r.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(a),n.pure.u64(d),n.pure.bool(!1),n.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,r.coinType]});let l=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:l,transactionBlock:n}),m=[],p=u.results[0].returnValues[0][0],_=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(p)),b=u.results[0].returnValues[1][0],w=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(b));return _.forEach((f,O)=>{let h=g(f).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),A=g(w[O]).div(Math.pow(10,t.decimals)).toString();m.push({price:h,quantity:A})}),m?.[0]?.price||0}catch{return 0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:r}=e,n=new S.Transaction,s=await this.getMarketPrice(e),i=g(s).gt(0)?g(s).div(3).toNumber():Math.pow(10,-6),o=g(s).gt(0)?s:Math.pow(10,6),a=g(i).mul(Math.pow(10,9+r.decimals-t.decimals)).toString(),d=g(o).mul(Math.pow(10,9+r.decimals-t.decimals)).toString();n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[n.object(e.address),n.pure.u64(G(a,0)),n.pure.u64(G(d,0)),n.pure.bool(!0),n.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,r.coinType]});let l=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:l,transactionBlock:n}),m=[],p=u.results[0].returnValues[0][0],_=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(p)),b=u.results[0].returnValues[1][0],w=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(b));return _.forEach((f,O)=>{let h=g(f).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),A=g(w[O]).div(Math.pow(10,t.decimals)).toString();m.push({price:h,quantity:A})}),m?.[0]?.price||0}catch{return 0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:r,quoteCoin:n}=e,s=new S.Transaction,i=await this.getMarketPrice(e),o,a;t?(o=g(i).gt(0)?g(i).div(3).toNumber():Math.pow(10,-6),a=g(i).gt(0)?i:Math.pow(10,6)):(o=g(i).gt(0)?i:Math.pow(10,-1),a=g(i).gt(0)?g(i).mul(3).toNumber():Math.pow(10,6));let d=g(o).mul(Math.pow(10,9+n.decimals-r.decimals)).toString(),l=g(a).mul(Math.pow(10,9+n.decimals-r.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(G(d,0)),s.pure.u64(G(l,0)),s.pure.bool(t),s.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]});let u=this._sdk.sdkOptions.simulationAccount.address,m=await this._sdk.fullClient.devInspectTransactionBlock({sender:u,transactionBlock:s}),p=[],_=m.results[0].returnValues[0][0],b=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(_)),w=m.results[0].returnValues[1][0],f=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(w));return b.forEach((O,h)=>{let A=g(O).div(Math.pow(10,9+n.decimals-r.decimals)).toString(),j=g(f[h]).div(Math.pow(10,r.decimals)).toString();p.push({price:A,quantity:j})}),p?.[0]?.price||0}catch{return 0}}async placeMarketOrder({balanceManager:e,poolInfo:t,baseQuantity:r,quoteQuantity:n,isBid:s,maxFee:i,account:o,payWithDeep:a,slippage:d=.01,settled_balances:l={base:"0",quote:"0"}}){try{let u=(0,B.normalizeStructTag)(t.baseCoin.coinType),m=(0,B.normalizeStructTag)(t.quoteCoin.coinType),p=new S.Transaction;l&&(g(l.base).gt(0)||g(l.quote).gt(0))&&this.withdrawSettledAmounts({poolInfo:t,balanceManager:e},p);let{baseAsset:_,quoteAsset:b,feeAsset:w}=await this.getMarketTransactionRelatedAssets(t,r,n,i,s,o,a,e,p,l),f=await this.getOrderBook(t,"all",6);if(s){let A=f?.ask?.[0]?.price||"0",j=g(A).mul(g(r).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=g(j).plus(g(j).mul(d)).ceil().toString()}else{let A=await f?.bid?.[0]?.price||"0",j=g(A).mul(g(r).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();n=g(j).minus(g(j).mul(d)).floor().toString()}let O=n,h=[p.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),p.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),p.object(t.address),p.object(e),_,b,w,p.pure.u8(0),p.pure.u64(r),p.pure.bool(s),p.pure.bool(a),p.pure.u64(O),p.object(B.SUI_CLOCK_OBJECT_ID)];return p.setSenderIfNotSet(o),p.moveCall({typeArguments:[u,m],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:h}),p}catch(u){throw u instanceof Error?u:new Error(String(u))}}async getOrderInfoList(e,t){try{let r=new S.Transaction;e.forEach(d=>{let l=d?.pool,u=d?.orderId;r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[r.object(l.pool_id),r.pure.u128(BigInt(u))],typeArguments:[l.baseCoinType,l.quoteCoinType]})});let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:r}),s=k.bcs.struct("ID",{bytes:k.bcs.Address}),i=k.bcs.struct("OrderDeepPrice",{asset_is_base:k.bcs.bool(),deep_per_asset:k.bcs.u64()}),o=k.bcs.struct("Order",{balance_manager_id:s,order_id:k.bcs.u128(),client_order_id:k.bcs.u64(),quantity:k.bcs.u64(),filled_quantity:k.bcs.u64(),fee_is_deep:k.bcs.bool(),order_deep_price:i,epoch:k.bcs.u64(),status:k.bcs.u8(),expire_timestamp:k.bcs.u64()}),a=[];return n?.results?.forEach(d=>{let l=d.returnValues[0][0],u=o.parse(new Uint8Array(l));a.push(u)}),a}catch{return[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),r=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),n=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:r,orderId:n}}async getOpenOrder(e,t,r,n,s=!1,i=new S.Transaction){let o;if(n)o=n;else{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[i.object(e.address),s?r:i.object(r)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let m=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:i})).results[s?1:0].returnValues[0][0];o=k.bcs.struct("VecSet",{constants:k.bcs.vector(k.bcs.U128)}).parse(new Uint8Array(m)).constants}if(o.length===0)return[];let a=o.map(u=>({pool:{pool_id:e.address,baseCoinType:e.baseCoin.coinType,quoteCoinType:e.quoteCoin.coinType},orderId:u})),d=await this.getOrderInfoList(a,t)||[],l=[];return d.forEach(u=>{let m=this.decodeOrderId(BigInt(u.order_id));l.push({...u,price:m.price,isBid:m.isBid,pool:e})}),l}async getAllMarketsOpenOrders(e,t){try{let r=await this.getPools(),n=new S.Transaction;r.forEach(u=>{n.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[n.object(u.pool_id),n.object(t)],typeArguments:[u.baseCoinType,u.quoteCoinType]})});let i=(await this._sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:n})).results?.map(u=>u.returnValues?.[0]?.[0])||[],o=k.bcs.struct("VecSet",{constants:k.bcs.vector(k.bcs.U128)}),a=[];i.forEach((u,m)=>{let p=o.parse(new Uint8Array(u)).constants;p.length>0&&p.forEach(_=>{a.push({pool:r[m],orderId:_})})});let d=await this.getOrderInfoList(a,e)||[],l=[];return a.forEach((u,m)=>{let p=this.decodeOrderId(BigInt(u.orderId)),_=d.find(b=>b.order_id===u.orderId)||{};l.push({...u,..._,price:p.price,isBid:p.isBid})}),l}catch{return[]}}cancelOrders(e,t,r=new S.Transaction){return e.forEach(n=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[r.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),r.object(t),r.object(n.poolInfo.address),r.pure.u128(n.orderId),r.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.poolInfo.baseCoin.coinType,n.poolInfo.quoteCoin.coinType]})}),r}async getDeepbookOrderBook(e,t,r,n,s,i){let o=this._sdk.fullClient,d=await new We.DeepBookClient({client:o,address:s,env:"testnet",balanceManagers:{test1:{address:i,tradeCap:""}}}).getLevel2Range(e,t,r,n)}processOrderBookData(e,t,r,n){let s=e.returnValues[0][0],i=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(s)),o=e.returnValues[1][0],a=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(o)),d={};return i.forEach((u,m)=>{let p=g(u).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),_=g(a[m]).div(Math.pow(10,t.decimals)).toString();d[p]?d[p]={price:p,quantity:g(d[p].quantity).add(_).toString()}:d[p]={price:p,quantity:_}}),Object.values(d)}getLevel2RangeTx(e,t,r,n,s=new S.Transaction){let{baseCoin:i,quoteCoin:o}=e,a=G(g(r).mul(Math.pow(10,9+o.decimals-i.decimals)).toString(),0),d=G(g(n).mul(Math.pow(10,9+o.decimals-i.decimals)).toString(),0);return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(a),s.pure.u64(d),s.pure.bool(t),s.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[i.coinType,o.coinType]}),s}async fetchOrderBook(e,t,r,n,s,i){let o=new S.Transaction,{baseCoin:a,quoteCoin:d}=e;try{if(t==="bid"||t==="all"){let _=n,b=r==="0"?s:r;o=this.getLevel2RangeTx(e,!0,_,b,o)}if(t==="ask"||t==="all"){let _=r==="0"?n:r,b=s;o=this.getLevel2RangeTx(e,!1,_,b,o)}let l=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:l,transactionBlock:o}),m=[];(t==="bid"||t==="all")&&(m=u.results?.[0]?this.processOrderBookData(u.results[0],a,d,i):[]);let p=[];if(t==="ask"||t==="all"){let _=t==="ask"?0:1;p=u.results?.[_]?this.processOrderBookData(u.results[_],a,d,i):[]}return{bid:m.sort((_,b)=>b.price-_.price),ask:p.sort((_,b)=>_.price-b.price)}}catch{let u=this._sdk.sdkOptions.simulationAccount.address,m=[],p=[];try{let _=this.getLevel2RangeTx(e,!0,n,r),b=await this._sdk.fullClient.devInspectTransactionBlock({sender:u,transactionBlock:_});m=b.results?.[0]?this.processOrderBookData(b.results[0],a,d,i):[]}catch{m=[]}try{let _=this.getLevel2RangeTx(e,!1,n,r),b=await this._sdk.fullClient.devInspectTransactionBlock({sender:u,transactionBlock:_});p=b.results?.[0]?this.processOrderBookData(b.results[0],a,d,i):[]}catch{p=[]}return{bid:m,ask:p}}}async getOrderBook(e,t,r){let n={bid:[],ask:[]};try{let s=await this.getMarketPrice(e),i=t,o=Math.pow(10,-r),a=Math.pow(10,r),d=await this.fetchOrderBook(e,i,s,o,a,r);return{bid:d?.bid,ask:d?.ask}}catch{return n}}async getOrderBookOrigin(e,t){try{let r=new S.Transaction,n=await this.getMarketPrice(e),{baseCoin:s,quoteCoin:i}=e;if(t==="bid"||t==="all"){let u=Math.pow(10,-6),m=n,p=g(u).mul(Math.pow(10,9+i.decimals-s.decimals)).toString(),_=g(m).mul(Math.pow(10,9+i.decimals-s.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(p),r.pure.u64(_),r.pure.bool(!0),r.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.coinType,i.coinType]})}if(t==="ask"||t==="all"){let u=n,m=Math.pow(10,6),p=g(u).mul(Math.pow(10,9+i.decimals-s.decimals)).toString(),_=g(m).mul(Math.pow(10,9+i.decimals-s.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(p),r.pure.u64(_),r.pure.bool(!1),r.object(B.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.coinType,i.coinType]})}let o=this._sdk.sdkOptions.simulationAccount.address,a=await this._sdk.fullClient.devInspectTransactionBlock({sender:o,transactionBlock:r}),d=[];if(t==="bid"||t==="all"){let u=a.results[0]?.returnValues[0]?.[0],m=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(u)),p=a.results[0]?.returnValues[1]?.[0],_=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(p));m.forEach((b,w)=>{let f=g(b).div(Math.pow(10,9+i.decimals-s.decimals)).toString(),O=g(_[w]).div(Math.pow(10,s.decimals)).toString();d.push({price:f,quantity:O})})}let l=[];if(t==="ask"||t==="all"){let u=t==="ask"?0:1,m=a.results[u]?.returnValues[0]?.[0],p=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(m)),_=a.results[u]?.returnValues[1]?.[0],b=k.bcs.vector(k.bcs.u64()).parse(new Uint8Array(_));p.forEach((w,f)=>{let O=g(w).div(Math.pow(10,9+i.decimals-s.decimals)).toString(),h=g(b[f]).div(Math.pow(10,s.decimals)).toString();l.push({price:O,quantity:h})})}return{bid:d,ask:l}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((n,s)=>[(0,B.normalizeStructTag)(n.coinType),n]))}async getAccount(e,t,r=new S.Transaction){for(let o=0;o<t.length;o++){let a=t[o];r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::order_trader::get_account_id`,arguments:[r.object(a.address),typeof e=="string"?r.object(e):e],typeArguments:[a.baseCoin.coinType,a.quoteCoin.coinType]})}let n=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.senderAddress,transactionBlock:r}),s;if(n?.events.length===0)return null;let i=[];return n?.events?.forEach((o,a)=>{s=o?.parsedJson;let d=s.account.open_orders.contents,l=s.account.owed_balances,u=s.account.settled_balances,m=s.account.unclaimed_rebates,p=s.account.taker_volume;i.push({balance_manager_id:e,open_orders:d,owed_balances:l,settled_balances:u,unclaimed_rebates:m,taker_volume:p,poolInfo:t[a]})}),i}async getSuiTransactionResponse(e,t=!1){let r=`${e}_getSuiTransactionResponse`,n=this.getCache(r,t);if(n!==void 0)return n;let s;try{s=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{s=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(r,s,864e5),s}transformExtensions(e,t,r=!0){let n=[];for(let s of t){let{key:i}=s.fields,{value:o}=s.fields;if(i==="labels")try{o=JSON.parse(decodeURIComponent(Je.Base64.decode(o)))}catch{}r&&(e[i]=o),n.push({key:i,value:o})}delete e.extension_fields,r||(e.extensions=n)}async getCoinConfigs(e=!1,t=!0){let r=this.sdk.sdkOptions.coinlist.handle,n=`${r}_getCoinConfigs`,s=this.getCache(n,e);if(s)return s;let o=(await this._sdk.fullClient.getDynamicFieldsByPage(r)).data.map(l=>l.objectId),a=await this._sdk.fullClient.batchGetObjects(o,{showContent:!0}),d=[];return a.forEach(l=>{let u=this.buildCoinConfig(l,t);this.updateCache(`${r}_${u.address}_getCoinConfig`,u,864e5),d.push({...u})}),this.updateCache(n,d,864e5),d}buildCoinConfig(e,t=!0){let r=Se(e);r=r.value.fields;let n={...r};return n.id=Ae(e),n.address=R(r.coin_type.fields.name).full_address,r.pyth_id&&(n.pyth_id=(0,B.normalizeSuiObjectId)(r.pyth_id)),this.transformExtensions(n,r.extension_fields.fields.contents,t),delete n.coin_type,n}updateCache(e,t,r=3e5){let n=this._cache[e];n?(n.overdueTime=z(r),n.value=t):n=new K(t,z(r)),this._cache[e]=n}getCache(e,t=!1){let r=this._cache[e],n=r?.isValid();if(!t&&n)return r.value;n||delete this._cache[e]}async createPermissionlessPool({tickSize:e,lotSize:t,minSize:r,baseCoinType:n,quoteCoinType:s}){let i=new S.Transaction,o=v.buildCoinWithBalance(BigInt(500*10**6),"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",i);i.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}::pool::create_permissionless_pool`,typeArguments:[n,s],arguments:[i.object(this.sdk.sdkOptions.deepbook.registry_id),i.pure.u64(e),i.pure.u64(t),i.pure.u64(r),o]});try{let a=await this._sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:i});if(a.effects.status.status==="success")return i;if(a.effects.status.status==="failure"&&a.effects.status.error&&a.effects.status.error.indexOf('Some("register_pool") }, 1)')>-1)throw new Error("Pool already exists")}catch(a){throw a instanceof Error?a:new Error(String(a))}return i}};var H=require("@cetusprotocol/common-sdk"),y=require("@mysten/sui/bcs"),C=require("@mysten/sui/transactions"),E=require("@mysten/sui/utils");var Zt=({totalAssetsValue:c,totalDebtValue:e})=>g(e).eq(0)||g(c).eq(0)?"0":g(c).div(g(e)).toString(),je=c=>{let{base_margin_pool_id:e,quote_margin_pool_id:t,enabled:r,pool_liquidation_reward:n,user_liquidation_reward:s}=c.value.fields,{liquidation_risk_ratio:i,min_borrow_risk_ratio:o,min_withdraw_risk_ratio:a,target_liquidation_risk_ratio:d}=c.value.fields.risk_ratios.fields;return{id:c.id.id,name:c.name,base_margin_pool_id:e,quote_margin_pool_id:t,enabled:r,pool_liquidation_reward:n,user_liquidation_reward:s,liquidation_risk_ratio:i,min_borrow_risk_ratio:o,min_withdraw_risk_ratio:a,target_liquidation_risk_ratio:d}},Be=(c,e)=>{let{deposit_coin_type:t}=e,r=c.id.id,{max_utilization_rate:n,min_borrow:s,protocol_spread:i,supply_cap:o}=c.config.fields.margin_pool_config.fields,{maintainer_fees:a,protocol_fees:d}=c.protocol_fees.fields,{total_supply:l,total_borrow:u}=c.state.fields,m=g(o).sub(l).toString();return{deposit_coin_type:t,id:r,supply_cap:o,total_supply:l,total_borrow:u,available_supply:m,max_utilization_rate:n,min_borrow:s,protocol_spread:i,maintainer_fees:a,protocol_fees:d}};var me=require("@pythnetwork/pyth-sui-js");var Ee=10n;function Yt(c,e){if(!Ee)throw new Error("oraclePriceMultiplierDecimal is required");if(c===0n)throw new Error("Invalid oracle price");if(e<0n){let t=10n**(Ee- -e);return c*t}return c/10n**(e+Ee)}var Z=class{_sdk;connection;suiPythClient;hasChangeConnection=!1;_cache={};constructor(e){this._sdk=e,this.connection=new me.SuiPriceServiceConnection(this.sdk.sdkOptions.pythUrl),this.suiPythClient=new me.SuiPythClient(this._sdk.fullClient,this._sdk.sdkOptions.margin_utils.pyth_state_id,this._sdk.sdkOptions.margin_utils.wormhole_state_id)}get sdk(){return this._sdk}async updatePythPriceIDs(e,t){let r=null,n=null;try{r=await this.connection.getPriceFeedsUpdateData(e)}catch(o){n=o}if(r==null)throw new Error(`All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes. Detailed error: ${n?.message}`);let s=[];try{s=await this.suiPythClient.updatePriceFeeds(t,r,e)}catch(o){throw new Error(`All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes in the pythUrls parameter when initializing AggregatorClient, for example: new AggregatorClient({ pythUrls: ["https://your-pyth-node-url"] }). Detailed error: ${o}`)}let i=new Map;for(let o=0;o<e.length;o++)i.set(e[o],s[o]);return i}priceCheck(e,t=60){let r=Math.floor(Date.now()/1e3);if(!(Math.abs(r-e.last_update_time)>t))return e}async getLatestPrice(e,t=!1){let r={},n=[];if(t?e.forEach(o=>{let a=this._sdk.getCache(`getLatestPrice_${o.coinType}`);a&&this.priceCheck(a,60)?r[o.coinType]=a:n.push(o.coinType)}):n=e.map(o=>o.coinType),n.length===0)return r;let s=e.map(o=>o.feed);return(await this.connection.getLatestPriceUpdates(s))?.parsed?.forEach((o,a)=>{let d=o.price;if(d){let{price:l,expo:u}=d,m=g(l).mul(g(10).pow(g(u))).toString(),_={coin_type:e[a].coinType,price:m,oracle_price:0n,last_update_time:d.publish_time};_.oracle_price=Yt(BigInt(l),BigInt(u)),r[n[a]]=_,this._sdk.updateCache(`getLatestPrice_${_.coin_type}`,_)}}),r}};var te=class{_sdk;pythPrice;_deep;_cache={};constructor(e){if(!e)throw new Error("SDK instance is required");this._sdk=e,this.pythPrice=new Z(e),this._deep=e.sdkOptions.network==="mainnet"?Le:Ne}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareMarginManager(e,t=new C.Transaction){if(!e)throw new Error("Pool info is required");if(!e.id)throw new Error("Pool ID is required");if(!e.baseCoin?.coinType||!e.quoteCoin?.coinType)throw new Error("Base and quote coin types are required");let{baseCoin:r,quoteCoin:n}=e;try{let{margin_manager:s,initializer:i}=this.createMarginManager(e,t);return this.shareMarginManager({marginManager:s,initializer:i,baseCoin:r,quoteCoin:n},t),{tx:t,margin_manager:s,initializer:i}}catch(s){throw new Error(`Failed to create and share margin manager: ${s instanceof Error?s.message:String(s)}`)}}createMarginManager(e,t=new C.Transaction){if(!e)throw new Error("Pool info is required");if(!e.id)throw new Error("Pool ID is required");let{id:r,baseCoin:n,quoteCoin:s}=e;try{let[i,o]=t.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::create_margin_manager`,arguments:[t.object(this.sdk.sdkOptions.margin_utils.versioned_id),t.object(r),t.object(this._sdk.sdkOptions.margin_utils.registry_id),t.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),t.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.coinType,s.coinType]});return{tx:t,margin_manager:i,initializer:o}}catch(i){throw new Error(`Failed to create margin manager: ${i instanceof Error?i.message:String(i)}`)}}shareMarginManager({marginManager:e,initializer:t,baseCoin:r,quoteCoin:n},s=new C.Transaction){try{return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::share_margin_manager`,arguments:[e,t],typeArguments:[r.coinType,n.coinType]}),s}catch(i){throw new Error(`Failed to share margin manager: ${i instanceof Error?i.message:String(i)}`)}}async getBalanceManagerByMarginManager(e){if(!e||typeof e!="string")throw new Error("Valid account address is required");let t=`
1
+ var Zi=Object.defineProperty;var Ca=(n,e,t)=>e in n?Zi(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Xt=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+n+'" is not supported')});var Ta=(n,e)=>{for(var t in e)Zi(n,t,{get:e[t],enumerable:!0})};var zi=(n,e,t)=>(Ca(n,typeof e!="symbol"?e+"":e,t),t);import{isValidSuiAddress as Gl}from"@mysten/sui/utils";import{SuiGraphQLClient as Hl}from"@mysten/sui/graphql";import{SuiJsonRpcClient as Ql}from"@mysten/sui/jsonRpc";import{normalizeSuiAddress as Ss}from"@mysten/sui/utils";import{Ed25519Keypair as Yl}from"@mysten/sui/keypairs/ed25519";import{Secp256k1Keypair as td}from"@mysten/sui/keypairs/secp256k1";import{fromBase64 as nd,fromHex as id,normalizeSuiObjectId as Ds}from"@mysten/sui/utils";import{coinWithBalance as As}from"@mysten/sui/transactions";import{bcs as zt}from"@mysten/sui/bcs";import{deriveDynamicFieldID as ou}from"@mysten/sui/utils";import{getJsonRpcFullnodeUrl as Qs}from"@mysten/sui/jsonRpc";import{SuiJsonRpcClient as du}from"@mysten/sui/jsonRpc";import{graphql as hu}from"@mysten/sui/graphql/schema";import{SuiGrpcClient as fd}from"@mysten/sui/grpc";var Qr=class extends Error{constructor(e,t){super(e),this.name="ParseError",this.type=t.type,this.field=t.field,this.value=t.value,this.line=t.line}};function zn(n){}function Gi(n){if(typeof n=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");let{onEvent:e=zn,onError:t=zn,onRetry:r=zn,onComment:i}=n,s="",a=!0,o,u="",l="";function f(S){let j=a?S.replace(/^\xEF\xBB\xBF/,""):S,[x,q]=Ma(`${s}${j}`);for(let A of x)p(A);s=q,a=!1}function p(S){if(S===""){v();return}if(S.startsWith(":")){i&&i(S.slice(S.startsWith(": ")?2:1));return}let j=S.indexOf(":");if(j!==-1){let x=S.slice(0,j),q=S[j+1]===" "?2:1,A=S.slice(j+q);g(x,A,S);return}g(S,"",S)}function g(S,j,x){switch(S){case"event":l=j;break;case"data":u=`${u}${j}
2
+ `;break;case"id":o=j.includes("\0")?void 0:j;break;case"retry":/^\d+$/.test(j)?r(parseInt(j,10)):t(new Qr(`Invalid \`retry\` value: "${j}"`,{type:"invalid-retry",value:j,line:x}));break;default:t(new Qr(`Unknown field "${S.length>20?`${S.slice(0,20)}\u2026`:S}"`,{type:"unknown-field",field:S,value:j,line:x}));break}}function v(){u.length>0&&e({id:o,event:l||void 0,data:u.endsWith(`
3
+ `)?u.slice(0,-1):u}),o=void 0,u="",l=""}function C(S={}){s&&S.consume&&p(s),a=!0,o=void 0,u="",l="",s=""}return{feed:f,reset:C}}function Ma(n){let e=[],t="",r=0;for(;r<n.length;){let i=n.indexOf("\r",r),s=n.indexOf(`
4
+ `,r),a=-1;if(i!==-1&&s!==-1?a=Math.min(i,s):i!==-1?i===n.length-1?a=-1:a=i:s!==-1&&(a=s),a===-1){t=n.slice(r);break}else{let o=n.slice(r,a);e.push(o),r=a+1,n[r-1]==="\r"&&n[r]===`
5
+ `&&r++}}return[e,t]}var Jr=class extends Event{constructor(e,t){var r,i;super(e),this.code=(r=t?.code)!=null?r:void 0,this.message=(i=t?.message)!=null?i:void 0}[Symbol.for("nodejs.util.inspect.custom")](e,t,r){return r(Wi(this),t)}[Symbol.for("Deno.customInspect")](e,t){return e(Wi(this),t)}};function Sa(n){let e=globalThis.DOMException;return typeof e=="function"?new e(n,"SyntaxError"):new SyntaxError(n)}function Gn(n){return n instanceof Error?"errors"in n&&Array.isArray(n.errors)?n.errors.map(Gn).join(", "):"cause"in n&&n.cause instanceof Error?`${n}: ${Gn(n.cause)}`:n.message:`${n}`}function Wi(n){return{type:n.type,message:n.message,code:n.code,defaultPrevented:n.defaultPrevented,cancelable:n.cancelable,timeStamp:n.timeStamp}}var Ki=n=>{throw TypeError(n)},ei=(n,e,t)=>e.has(n)||Ki("Cannot "+t),te=(n,e,t)=>(ei(n,e,"read from private field"),t?t.call(n):e.get(n)),Ye=(n,e,t)=>e.has(n)?Ki("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),me=(n,e,t,r)=>(ei(n,e,"write to private field"),e.set(n,t),t),jt=(n,e,t)=>(ei(n,e,"access private method"),t),ot,Jt,gr,Xr,Yr,$r,br,Nr,Nt,_r,wr,yr,Dr,_t,Wn,Hn,Kn,Hi,Qn,Xn,Ur,Jn,Yn,Yt=class extends EventTarget{constructor(e,t){var r,i;super(),Ye(this,_t),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,Ye(this,ot),Ye(this,Jt),Ye(this,gr),Ye(this,Xr),Ye(this,Yr),Ye(this,$r),Ye(this,br),Ye(this,Nr,null),Ye(this,Nt),Ye(this,_r),Ye(this,wr,null),Ye(this,yr,null),Ye(this,Dr,null),Ye(this,Hn,async s=>{var a;te(this,_r).reset();let{body:o,redirected:u,status:l,headers:f}=s;if(l===204){jt(this,_t,Ur).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(u?me(this,gr,new URL(s.url)):me(this,gr,void 0),l!==200){jt(this,_t,Ur).call(this,`Non-200 status code (${l})`,l);return}if(!(f.get("content-type")||"").startsWith("text/event-stream")){jt(this,_t,Ur).call(this,'Invalid content type, expected "text/event-stream"',l);return}if(te(this,ot)===this.CLOSED)return;me(this,ot,this.OPEN);let p=new Event("open");if((a=te(this,Dr))==null||a.call(this,p),this.dispatchEvent(p),typeof o!="object"||!o||!("getReader"in o)){jt(this,_t,Ur).call(this,"Invalid response body, expected a web ReadableStream",l),this.close();return}let g=new TextDecoder,v=o.getReader(),C=!0;do{let{done:S,value:j}=await v.read();j&&te(this,_r).feed(g.decode(j,{stream:!S})),S&&(C=!1,te(this,_r).reset(),jt(this,_t,Jn).call(this))}while(C)}),Ye(this,Kn,s=>{me(this,Nt,void 0),!(s.name==="AbortError"||s.type==="aborted")&&jt(this,_t,Jn).call(this,Gn(s))}),Ye(this,Qn,s=>{typeof s.id=="string"&&me(this,Nr,s.id);let a=new MessageEvent(s.event||"message",{data:s.data,origin:te(this,gr)?te(this,gr).origin:te(this,Jt).origin,lastEventId:s.id||""});te(this,yr)&&(!s.event||s.event==="message")&&te(this,yr).call(this,a),this.dispatchEvent(a)}),Ye(this,Xn,s=>{me(this,$r,s)}),Ye(this,Yn,()=>{me(this,br,void 0),te(this,ot)===this.CONNECTING&&jt(this,_t,Wn).call(this)});try{if(e instanceof URL)me(this,Jt,e);else if(typeof e=="string")me(this,Jt,new URL(e,Aa()));else throw new Error("Invalid URL")}catch{throw Sa("An invalid or illegal string was specified")}me(this,_r,Gi({onEvent:te(this,Qn),onRetry:te(this,Xn)})),me(this,ot,this.CONNECTING),me(this,$r,3e3),me(this,Yr,(r=t?.fetch)!=null?r:globalThis.fetch),me(this,Xr,(i=t?.withCredentials)!=null?i:!1),jt(this,_t,Wn).call(this)}get readyState(){return te(this,ot)}get url(){return te(this,Jt).href}get withCredentials(){return te(this,Xr)}get onerror(){return te(this,wr)}set onerror(e){me(this,wr,e)}get onmessage(){return te(this,yr)}set onmessage(e){me(this,yr,e)}get onopen(){return te(this,Dr)}set onopen(e){me(this,Dr,e)}addEventListener(e,t,r){let i=t;super.addEventListener(e,i,r)}removeEventListener(e,t,r){let i=t;super.removeEventListener(e,i,r)}close(){te(this,br)&&clearTimeout(te(this,br)),te(this,ot)!==this.CLOSED&&(te(this,Nt)&&te(this,Nt).abort(),me(this,ot,this.CLOSED),me(this,Nt,void 0))}};ot=new WeakMap,Jt=new WeakMap,gr=new WeakMap,Xr=new WeakMap,Yr=new WeakMap,$r=new WeakMap,br=new WeakMap,Nr=new WeakMap,Nt=new WeakMap,_r=new WeakMap,wr=new WeakMap,yr=new WeakMap,Dr=new WeakMap,_t=new WeakSet,Wn=function(){me(this,ot,this.CONNECTING),me(this,Nt,new AbortController),te(this,Yr)(te(this,Jt),jt(this,_t,Hi).call(this)).then(te(this,Hn)).catch(te(this,Kn))},Hn=new WeakMap,Kn=new WeakMap,Hi=function(){var n;let e={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...te(this,Nr)?{"Last-Event-ID":te(this,Nr)}:void 0},cache:"no-store",signal:(n=te(this,Nt))==null?void 0:n.signal};return"window"in globalThis&&(e.credentials=this.withCredentials?"include":"same-origin"),e},Qn=new WeakMap,Xn=new WeakMap,Ur=function(n,e){var t;te(this,ot)!==this.CLOSED&&me(this,ot,this.CLOSED);let r=new Jr("error",{code:e,message:n});(t=te(this,wr))==null||t.call(this,r),this.dispatchEvent(r)},Jn=function(n,e){var t;if(te(this,ot)===this.CLOSED)return;me(this,ot,this.CONNECTING);let r=new Jr("error",{code:e,message:n});(t=te(this,wr))==null||t.call(this,r),this.dispatchEvent(r),me(this,br,setTimeout(te(this,Yn),te(this,$r)))},Yn=new WeakMap,Yt.CONNECTING=0,Yt.OPEN=1,Yt.CLOSED=2;function Aa(){let n="document"in globalThis?globalThis.document:void 0;return n&&typeof n=="object"&&"baseURI"in n&&typeof n.baseURI=="string"?n.baseURI:void 0}function Oa(n){return n.replaceAll(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}function Fr(n){let e={};for(let t of Object.keys(n)){let r=Oa(t),i=n[t];e[r]=i}return e}import No,{AxiosError as xl}from"axios";var V={};Ta(V,{BRAND:()=>eo,DIRTY:()=>er,EMPTY_PATH:()=>Ia,INVALID:()=>z,NEVER:()=>$o,OK:()=>st,ParseStatus:()=>et,Schema:()=>Y,ZodAny:()=>Vt,ZodArray:()=>dt,ZodBigInt:()=>Tt,ZodBoolean:()=>tr,ZodBranded:()=>Vr,ZodCatch:()=>dr,ZodDate:()=>qt,ZodDefault:()=>lr,ZodDiscriminatedUnion:()=>Sr,ZodEffects:()=>mt,ZodEnum:()=>Mt,ZodError:()=>it,ZodFirstPartyTypeKind:()=>W,ZodFunction:()=>Lt,ZodIntersection:()=>sr,ZodIssueCode:()=>E,ZodLazy:()=>or,ZodLiteral:()=>cr,ZodMap:()=>Ar,ZodNaN:()=>Or,ZodNativeEnum:()=>ur,ZodNever:()=>yt,ZodNull:()=>nr,ZodNullable:()=>St,ZodNumber:()=>Ct,ZodObject:()=>pe,ZodOptional:()=>ht,ZodParsedType:()=>B,ZodPipeline:()=>hr,ZodPromise:()=>Zt,ZodReadonly:()=>pr,ZodRecord:()=>ar,ZodSchema:()=>Y,ZodSet:()=>Rt,ZodString:()=>lt,ZodSymbol:()=>Tr,ZodTransformer:()=>mt,ZodTuple:()=>ft,ZodType:()=>Y,ZodUndefined:()=>rr,ZodUnion:()=>ir,ZodUnknown:()=>Bt,ZodVoid:()=>Mr,addIssueToContext:()=>I,any:()=>uo,array:()=>fo,bigint:()=>io,boolean:()=>as,coerce:()=>Uo,custom:()=>ns,date:()=>so,datetimeRegex:()=>ts,defaultErrorMap:()=>It,discriminatedUnion:()=>yo,effect:()=>xo,enum:()=>Ao,function:()=>To,getErrorMap:()=>vr,getParsedType:()=>kt,instanceof:()=>ro,intersection:()=>bo,isAborted:()=>en,isAsync:()=>kr,isDirty:()=>tn,isValid:()=>Ft,late:()=>to,lazy:()=>Mo,literal:()=>So,makeIssue:()=>Lr,map:()=>ko,nan:()=>no,nativeEnum:()=>Oo,never:()=>ho,null:()=>co,nullable:()=>Io,number:()=>ss,object:()=>mo,objectUtil:()=>ti,oboolean:()=>Do,onumber:()=>Ro,optional:()=>jo,ostring:()=>qo,pipeline:()=>Bo,preprocess:()=>Po,promise:()=>Eo,quotelessJson:()=>Ea,record:()=>vo,set:()=>Co,setErrorMap:()=>ja,strictObject:()=>go,string:()=>is,symbol:()=>ao,transformer:()=>xo,tuple:()=>wo,undefined:()=>oo,union:()=>_o,unknown:()=>lo,util:()=>re,void:()=>po});var re;(function(n){n.assertEqual=i=>{};function e(i){}n.assertIs=e;function t(i){throw new Error}n.assertNever=t,n.arrayToEnum=i=>{let s={};for(let a of i)s[a]=a;return s},n.getValidEnumValues=i=>{let s=n.objectKeys(i).filter(o=>typeof i[i[o]]!="number"),a={};for(let o of s)a[o]=i[o];return n.objectValues(a)},n.objectValues=i=>n.objectKeys(i).map(function(s){return i[s]}),n.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{let s=[];for(let a in i)Object.prototype.hasOwnProperty.call(i,a)&&s.push(a);return s},n.find=(i,s)=>{for(let a of i)if(s(a))return a},n.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&Number.isFinite(i)&&Math.floor(i)===i;function r(i,s=" | "){return i.map(a=>typeof a=="string"?`'${a}'`:a).join(s)}n.joinValues=r,n.jsonStringifyReplacer=(i,s)=>typeof s=="bigint"?s.toString():s})(re||(re={}));var ti;(function(n){n.mergeShapes=(e,t)=>({...e,...t})})(ti||(ti={}));var B=re.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),kt=n=>{switch(typeof n){case"undefined":return B.undefined;case"string":return B.string;case"number":return Number.isNaN(n)?B.nan:B.number;case"boolean":return B.boolean;case"function":return B.function;case"bigint":return B.bigint;case"symbol":return B.symbol;case"object":return Array.isArray(n)?B.array:n===null?B.null:n.then&&typeof n.then=="function"&&n.catch&&typeof n.catch=="function"?B.promise:typeof Map<"u"&&n instanceof Map?B.map:typeof Set<"u"&&n instanceof Set?B.set:typeof Date<"u"&&n instanceof Date?B.date:B.object;default:return B.unknown}};var E=re.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Ea=n=>JSON.stringify(n,null,2).replace(/"([^"]+)":/g,"$1:"),it=class extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){let t=e||function(s){return s.message},r={_errors:[]},i=s=>{for(let a of s.issues)if(a.code==="invalid_union")a.unionErrors.map(i);else if(a.code==="invalid_return_type")i(a.returnTypeError);else if(a.code==="invalid_arguments")i(a.argumentsError);else if(a.path.length===0)r._errors.push(t(a));else{let o=r,u=0;for(;u<a.path.length;){let l=a.path[u];u===a.path.length-1?(o[l]=o[l]||{_errors:[]},o[l]._errors.push(t(a))):o[l]=o[l]||{_errors:[]},o=o[l],u++}}};return i(this),r}static assert(e){if(!(e instanceof it))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,re.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){let t={},r=[];for(let i of this.issues)if(i.path.length>0){let s=i.path[0];t[s]=t[s]||[],t[s].push(e(i))}else r.push(e(i));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}};it.create=n=>new it(n);var xa=(n,e)=>{let t;switch(n.code){case E.invalid_type:n.received===B.undefined?t="Required":t=`Expected ${n.expected}, received ${n.received}`;break;case E.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(n.expected,re.jsonStringifyReplacer)}`;break;case E.unrecognized_keys:t=`Unrecognized key(s) in object: ${re.joinValues(n.keys,", ")}`;break;case E.invalid_union:t="Invalid input";break;case E.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${re.joinValues(n.options)}`;break;case E.invalid_enum_value:t=`Invalid enum value. Expected ${re.joinValues(n.options)}, received '${n.received}'`;break;case E.invalid_arguments:t="Invalid function arguments";break;case E.invalid_return_type:t="Invalid function return type";break;case E.invalid_date:t="Invalid date";break;case E.invalid_string:typeof n.validation=="object"?"includes"in n.validation?(t=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${n.validation.position}`)):"startsWith"in n.validation?t=`Invalid input: must start with "${n.validation.startsWith}"`:"endsWith"in n.validation?t=`Invalid input: must end with "${n.validation.endsWith}"`:re.assertNever(n.validation):n.validation!=="regex"?t=`Invalid ${n.validation}`:t="Invalid";break;case E.too_small:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="bigint"?t=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`:t="Invalid input";break;case E.too_big:n.type==="array"?t=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`:n.type==="string"?t=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`:n.type==="number"?t=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="bigint"?t=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`:n.type==="date"?t=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`:t="Invalid input";break;case E.custom:t="Invalid input";break;case E.invalid_intersection_types:t="Intersection results could not be merged";break;case E.not_multiple_of:t=`Number must be a multiple of ${n.multipleOf}`;break;case E.not_finite:t="Number must be finite";break;default:t=e.defaultError,re.assertNever(n)}return{message:t}},It=xa;var Qi=It;function ja(n){Qi=n}function vr(){return Qi}var Lr=n=>{let{data:e,path:t,errorMaps:r,issueData:i}=n,s=[...t,...i.path||[]],a={...i,path:s};if(i.message!==void 0)return{...i,path:s,message:i.message};let o="",u=r.filter(l=>!!l).slice().reverse();for(let l of u)o=l(a,{data:e,defaultError:o}).message;return{...i,path:s,message:o}},Ia=[];function I(n,e){let t=vr(),r=Lr({issueData:e,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,t,t===It?void 0:It].filter(i=>!!i)});n.common.issues.push(r)}var et=class{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){let r=[];for(let i of t){if(i.status==="aborted")return z;i.status==="dirty"&&e.dirty(),r.push(i.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){let r=[];for(let i of t){let s=await i.key,a=await i.value;r.push({key:s,value:a})}return et.mergeObjectSync(e,r)}static mergeObjectSync(e,t){let r={};for(let i of t){let{key:s,value:a}=i;if(s.status==="aborted"||a.status==="aborted")return z;s.status==="dirty"&&e.dirty(),a.status==="dirty"&&e.dirty(),s.value!=="__proto__"&&(typeof a.value<"u"||i.alwaysSet)&&(r[s.value]=a.value)}return{status:e.value,value:r}}},z=Object.freeze({status:"aborted"}),er=n=>({status:"dirty",value:n}),st=n=>({status:"valid",value:n}),en=n=>n.status==="aborted",tn=n=>n.status==="dirty",Ft=n=>n.status==="valid",kr=n=>typeof Promise<"u"&&n instanceof Promise;var D;(function(n){n.errToObj=e=>typeof e=="string"?{message:e}:e||{},n.toString=e=>typeof e=="string"?e:e?.message})(D||(D={}));var pt=class{constructor(e,t,r,i){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=i}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Xi=(n,e)=>{if(Ft(e))return{success:!0,data:e.value};if(!n.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new it(n.common.issues);return this._error=t,this._error}}};function J(n){if(!n)return{};let{errorMap:e,invalid_type_error:t,required_error:r,description:i}=n;if(e&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:i}:{errorMap:(a,o)=>{let{message:u}=n;return a.code==="invalid_enum_value"?{message:u??o.defaultError}:typeof o.data>"u"?{message:u??r??o.defaultError}:a.code!=="invalid_type"?{message:o.defaultError}:{message:u??t??o.defaultError}},description:i}}var Y=class{get description(){return this._def.description}_getType(e){return kt(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:kt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new et,ctx:{common:e.parent.common,data:e.data,parsedType:kt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(kr(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:kt(e)},i=this._parseSync({data:e,path:r.path,parent:r});return Xi(r,i)}"~validate"(e){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:kt(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:t});return Ft(r)?{value:r.value}:{issues:t.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(r=>Ft(r)?{value:r.value}:{issues:t.common.issues})}async parseAsync(e,t){let r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:kt(e)},i=this._parse({data:e,path:r.path,parent:r}),s=await(kr(i)?i:Promise.resolve(i));return Xi(r,s)}refine(e,t){let r=i=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(i):t;return this._refinement((i,s)=>{let a=e(i),o=()=>s.addIssue({code:E.custom,...r(i)});return typeof Promise<"u"&&a instanceof Promise?a.then(u=>u?!0:(o(),!1)):a?!0:(o(),!1)})}refinement(e,t){return this._refinement((r,i)=>e(r)?!0:(i.addIssue(typeof t=="function"?t(r,i):t),!1))}_refinement(e){return new mt({schema:this,typeName:W.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return ht.create(this,this._def)}nullable(){return St.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return dt.create(this)}promise(){return Zt.create(this,this._def)}or(e){return ir.create([this,e],this._def)}and(e){return sr.create(this,e,this._def)}transform(e){return new mt({...J(this._def),schema:this,typeName:W.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let t=typeof e=="function"?e:()=>e;return new lr({...J(this._def),innerType:this,defaultValue:t,typeName:W.ZodDefault})}brand(){return new Vr({typeName:W.ZodBranded,type:this,...J(this._def)})}catch(e){let t=typeof e=="function"?e:()=>e;return new dr({...J(this._def),innerType:this,catchValue:t,typeName:W.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return hr.create(this,e)}readonly(){return pr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Pa=/^c[^\s-]{8,}$/i,Ba=/^[0-9a-z]+$/,qa=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Ra=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Da=/^[a-z0-9_-]{21}$/i,Ua=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,$a=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Na=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Fa="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",ri,La=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Va=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Za=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,za=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ga=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Wa=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Yi="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Ha=new RegExp(`^${Yi}$`);function es(n){let e="[0-5]\\d";n.precision?e=`${e}\\.\\d{${n.precision}}`:n.precision==null&&(e=`${e}(\\.\\d+)?`);let t=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Ka(n){return new RegExp(`^${es(n)}$`)}function ts(n){let e=`${Yi}T${es(n)}`,t=[];return t.push(n.local?"Z?":"Z"),n.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Qa(n,e){return!!((e==="v4"||!e)&&La.test(n)||(e==="v6"||!e)&&Za.test(n))}function Xa(n,e){if(!Ua.test(n))return!1;try{let[t]=n.split(".");if(!t)return!1;let r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),i=JSON.parse(atob(r));return!(typeof i!="object"||i===null||"typ"in i&&i?.typ!=="JWT"||!i.alg||e&&i.alg!==e)}catch{return!1}}function Ja(n,e){return!!((e==="v4"||!e)&&Va.test(n)||(e==="v6"||!e)&&za.test(n))}var lt=class extends Y{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==B.string){let s=this._getOrReturnCtx(e);return I(s,{code:E.invalid_type,expected:B.string,received:s.parsedType}),z}let r=new et,i;for(let s of this._def.checks)if(s.kind==="min")e.data.length<s.value&&(i=this._getOrReturnCtx(e,i),I(i,{code:E.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="max")e.data.length>s.value&&(i=this._getOrReturnCtx(e,i),I(i,{code:E.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="length"){let a=e.data.length>s.value,o=e.data.length<s.value;(a||o)&&(i=this._getOrReturnCtx(e,i),a?I(i,{code:E.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}):o&&I(i,{code:E.too_small,minimum:s.value,type:"string",inclusive:!0,exact:!0,message:s.message}),r.dirty())}else if(s.kind==="email")Na.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"email",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="emoji")ri||(ri=new RegExp(Fa,"u")),ri.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"emoji",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="uuid")Ra.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"uuid",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="nanoid")Da.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"nanoid",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="cuid")Pa.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"cuid",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="cuid2")Ba.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"cuid2",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="ulid")qa.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"ulid",code:E.invalid_string,message:s.message}),r.dirty());else if(s.kind==="url")try{new URL(e.data)}catch{i=this._getOrReturnCtx(e,i),I(i,{validation:"url",code:E.invalid_string,message:s.message}),r.dirty()}else s.kind==="regex"?(s.regex.lastIndex=0,s.regex.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"regex",code:E.invalid_string,message:s.message}),r.dirty())):s.kind==="trim"?e.data=e.data.trim():s.kind==="includes"?e.data.includes(s.value,s.position)||(i=this._getOrReturnCtx(e,i),I(i,{code:E.invalid_string,validation:{includes:s.value,position:s.position},message:s.message}),r.dirty()):s.kind==="toLowerCase"?e.data=e.data.toLowerCase():s.kind==="toUpperCase"?e.data=e.data.toUpperCase():s.kind==="startsWith"?e.data.startsWith(s.value)||(i=this._getOrReturnCtx(e,i),I(i,{code:E.invalid_string,validation:{startsWith:s.value},message:s.message}),r.dirty()):s.kind==="endsWith"?e.data.endsWith(s.value)||(i=this._getOrReturnCtx(e,i),I(i,{code:E.invalid_string,validation:{endsWith:s.value},message:s.message}),r.dirty()):s.kind==="datetime"?ts(s).test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{code:E.invalid_string,validation:"datetime",message:s.message}),r.dirty()):s.kind==="date"?Ha.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{code:E.invalid_string,validation:"date",message:s.message}),r.dirty()):s.kind==="time"?Ka(s).test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{code:E.invalid_string,validation:"time",message:s.message}),r.dirty()):s.kind==="duration"?$a.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"duration",code:E.invalid_string,message:s.message}),r.dirty()):s.kind==="ip"?Qa(e.data,s.version)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"ip",code:E.invalid_string,message:s.message}),r.dirty()):s.kind==="jwt"?Xa(e.data,s.alg)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"jwt",code:E.invalid_string,message:s.message}),r.dirty()):s.kind==="cidr"?Ja(e.data,s.version)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"cidr",code:E.invalid_string,message:s.message}),r.dirty()):s.kind==="base64"?Ga.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"base64",code:E.invalid_string,message:s.message}),r.dirty()):s.kind==="base64url"?Wa.test(e.data)||(i=this._getOrReturnCtx(e,i),I(i,{validation:"base64url",code:E.invalid_string,message:s.message}),r.dirty()):re.assertNever(s);return{status:r.value,value:e.data}}_regex(e,t,r){return this.refinement(i=>e.test(i),{validation:t,code:E.invalid_string,...D.errToObj(r)})}_addCheck(e){return new lt({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...D.errToObj(e)})}url(e){return this._addCheck({kind:"url",...D.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...D.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...D.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...D.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...D.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...D.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...D.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...D.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...D.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...D.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...D.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...D.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...D.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...D.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...D.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...D.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...D.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...D.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...D.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...D.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...D.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...D.errToObj(t)})}nonempty(e){return this.min(1,D.errToObj(e))}trim(){return new lt({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new lt({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new lt({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};lt.create=n=>new lt({checks:[],typeName:W.ZodString,coerce:n?.coerce??!1,...J(n)});function Ya(n,e){let t=(n.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,i=t>r?t:r,s=Number.parseInt(n.toFixed(i).replace(".","")),a=Number.parseInt(e.toFixed(i).replace(".",""));return s%a/10**i}var Ct=class extends Y{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==B.number){let s=this._getOrReturnCtx(e);return I(s,{code:E.invalid_type,expected:B.number,received:s.parsedType}),z}let r,i=new et;for(let s of this._def.checks)s.kind==="int"?re.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),I(r,{code:E.invalid_type,expected:"integer",received:"float",message:s.message}),i.dirty()):s.kind==="min"?(s.inclusive?e.data<s.value:e.data<=s.value)&&(r=this._getOrReturnCtx(e,r),I(r,{code:E.too_small,minimum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),i.dirty()):s.kind==="max"?(s.inclusive?e.data>s.value:e.data>=s.value)&&(r=this._getOrReturnCtx(e,r),I(r,{code:E.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),i.dirty()):s.kind==="multipleOf"?Ya(e.data,s.value)!==0&&(r=this._getOrReturnCtx(e,r),I(r,{code:E.not_multiple_of,multipleOf:s.value,message:s.message}),i.dirty()):s.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),I(r,{code:E.not_finite,message:s.message}),i.dirty()):re.assertNever(s);return{status:i.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,D.toString(t))}gt(e,t){return this.setLimit("min",e,!1,D.toString(t))}lte(e,t){return this.setLimit("max",e,!0,D.toString(t))}lt(e,t){return this.setLimit("max",e,!1,D.toString(t))}setLimit(e,t,r,i){return new Ct({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:D.toString(i)}]})}_addCheck(e){return new Ct({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:D.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:D.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:D.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:D.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:D.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:D.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:D.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:D.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:D.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&re.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}};Ct.create=n=>new Ct({checks:[],typeName:W.ZodNumber,coerce:n?.coerce||!1,...J(n)});var Tt=class extends Y{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==B.bigint)return this._getInvalidInput(e);let r,i=new et;for(let s of this._def.checks)s.kind==="min"?(s.inclusive?e.data<s.value:e.data<=s.value)&&(r=this._getOrReturnCtx(e,r),I(r,{code:E.too_small,type:"bigint",minimum:s.value,inclusive:s.inclusive,message:s.message}),i.dirty()):s.kind==="max"?(s.inclusive?e.data>s.value:e.data>=s.value)&&(r=this._getOrReturnCtx(e,r),I(r,{code:E.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),i.dirty()):s.kind==="multipleOf"?e.data%s.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),I(r,{code:E.not_multiple_of,multipleOf:s.value,message:s.message}),i.dirty()):re.assertNever(s);return{status:i.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return I(t,{code:E.invalid_type,expected:B.bigint,received:t.parsedType}),z}gte(e,t){return this.setLimit("min",e,!0,D.toString(t))}gt(e,t){return this.setLimit("min",e,!1,D.toString(t))}lte(e,t){return this.setLimit("max",e,!0,D.toString(t))}lt(e,t){return this.setLimit("max",e,!1,D.toString(t))}setLimit(e,t,r,i){return new Tt({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:D.toString(i)}]})}_addCheck(e){return new Tt({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:D.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:D.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:D.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:D.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:D.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}};Tt.create=n=>new Tt({checks:[],typeName:W.ZodBigInt,coerce:n?.coerce??!1,...J(n)});var tr=class extends Y{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==B.boolean){let r=this._getOrReturnCtx(e);return I(r,{code:E.invalid_type,expected:B.boolean,received:r.parsedType}),z}return st(e.data)}};tr.create=n=>new tr({typeName:W.ZodBoolean,coerce:n?.coerce||!1,...J(n)});var qt=class extends Y{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==B.date){let s=this._getOrReturnCtx(e);return I(s,{code:E.invalid_type,expected:B.date,received:s.parsedType}),z}if(Number.isNaN(e.data.getTime())){let s=this._getOrReturnCtx(e);return I(s,{code:E.invalid_date}),z}let r=new et,i;for(let s of this._def.checks)s.kind==="min"?e.data.getTime()<s.value&&(i=this._getOrReturnCtx(e,i),I(i,{code:E.too_small,message:s.message,inclusive:!0,exact:!1,minimum:s.value,type:"date"}),r.dirty()):s.kind==="max"?e.data.getTime()>s.value&&(i=this._getOrReturnCtx(e,i),I(i,{code:E.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),r.dirty()):re.assertNever(s);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new qt({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:D.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:D.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}};qt.create=n=>new qt({checks:[],coerce:n?.coerce||!1,typeName:W.ZodDate,...J(n)});var Tr=class extends Y{_parse(e){if(this._getType(e)!==B.symbol){let r=this._getOrReturnCtx(e);return I(r,{code:E.invalid_type,expected:B.symbol,received:r.parsedType}),z}return st(e.data)}};Tr.create=n=>new Tr({typeName:W.ZodSymbol,...J(n)});var rr=class extends Y{_parse(e){if(this._getType(e)!==B.undefined){let r=this._getOrReturnCtx(e);return I(r,{code:E.invalid_type,expected:B.undefined,received:r.parsedType}),z}return st(e.data)}};rr.create=n=>new rr({typeName:W.ZodUndefined,...J(n)});var nr=class extends Y{_parse(e){if(this._getType(e)!==B.null){let r=this._getOrReturnCtx(e);return I(r,{code:E.invalid_type,expected:B.null,received:r.parsedType}),z}return st(e.data)}};nr.create=n=>new nr({typeName:W.ZodNull,...J(n)});var Vt=class extends Y{constructor(){super(...arguments),this._any=!0}_parse(e){return st(e.data)}};Vt.create=n=>new Vt({typeName:W.ZodAny,...J(n)});var Bt=class extends Y{constructor(){super(...arguments),this._unknown=!0}_parse(e){return st(e.data)}};Bt.create=n=>new Bt({typeName:W.ZodUnknown,...J(n)});var yt=class extends Y{_parse(e){let t=this._getOrReturnCtx(e);return I(t,{code:E.invalid_type,expected:B.never,received:t.parsedType}),z}};yt.create=n=>new yt({typeName:W.ZodNever,...J(n)});var Mr=class extends Y{_parse(e){if(this._getType(e)!==B.undefined){let r=this._getOrReturnCtx(e);return I(r,{code:E.invalid_type,expected:B.void,received:r.parsedType}),z}return st(e.data)}};Mr.create=n=>new Mr({typeName:W.ZodVoid,...J(n)});var dt=class extends Y{_parse(e){let{ctx:t,status:r}=this._processInputParams(e),i=this._def;if(t.parsedType!==B.array)return I(t,{code:E.invalid_type,expected:B.array,received:t.parsedType}),z;if(i.exactLength!==null){let a=t.data.length>i.exactLength.value,o=t.data.length<i.exactLength.value;(a||o)&&(I(t,{code:a?E.too_big:E.too_small,minimum:o?i.exactLength.value:void 0,maximum:a?i.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:i.exactLength.message}),r.dirty())}if(i.minLength!==null&&t.data.length<i.minLength.value&&(I(t,{code:E.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,exact:!1,message:i.minLength.message}),r.dirty()),i.maxLength!==null&&t.data.length>i.maxLength.value&&(I(t,{code:E.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((a,o)=>i.type._parseAsync(new pt(t,a,t.path,o)))).then(a=>et.mergeArray(r,a));let s=[...t.data].map((a,o)=>i.type._parseSync(new pt(t,a,t.path,o)));return et.mergeArray(r,s)}get element(){return this._def.type}min(e,t){return new dt({...this._def,minLength:{value:e,message:D.toString(t)}})}max(e,t){return new dt({...this._def,maxLength:{value:e,message:D.toString(t)}})}length(e,t){return new dt({...this._def,exactLength:{value:e,message:D.toString(t)}})}nonempty(e){return this.min(1,e)}};dt.create=(n,e)=>new dt({type:n,minLength:null,maxLength:null,exactLength:null,typeName:W.ZodArray,...J(e)});function Cr(n){if(n instanceof pe){let e={};for(let t in n.shape){let r=n.shape[t];e[t]=ht.create(Cr(r))}return new pe({...n._def,shape:()=>e})}else return n instanceof dt?new dt({...n._def,type:Cr(n.element)}):n instanceof ht?ht.create(Cr(n.unwrap())):n instanceof St?St.create(Cr(n.unwrap())):n instanceof ft?ft.create(n.items.map(e=>Cr(e))):n}var pe=class extends Y{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=re.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==B.object){let l=this._getOrReturnCtx(e);return I(l,{code:E.invalid_type,expected:B.object,received:l.parsedType}),z}let{status:r,ctx:i}=this._processInputParams(e),{shape:s,keys:a}=this._getCached(),o=[];if(!(this._def.catchall instanceof yt&&this._def.unknownKeys==="strip"))for(let l in i.data)a.includes(l)||o.push(l);let u=[];for(let l of a){let f=s[l],p=i.data[l];u.push({key:{status:"valid",value:l},value:f._parse(new pt(i,p,i.path,l)),alwaysSet:l in i.data})}if(this._def.catchall instanceof yt){let l=this._def.unknownKeys;if(l==="passthrough")for(let f of o)u.push({key:{status:"valid",value:f},value:{status:"valid",value:i.data[f]}});else if(l==="strict")o.length>0&&(I(i,{code:E.unrecognized_keys,keys:o}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let l=this._def.catchall;for(let f of o){let p=i.data[f];u.push({key:{status:"valid",value:f},value:l._parse(new pt(i,p,i.path,f)),alwaysSet:f in i.data})}}return i.common.async?Promise.resolve().then(async()=>{let l=[];for(let f of u){let p=await f.key,g=await f.value;l.push({key:p,value:g,alwaysSet:f.alwaysSet})}return l}).then(l=>et.mergeObjectSync(r,l)):et.mergeObjectSync(r,u)}get shape(){return this._def.shape()}strict(e){return D.errToObj,new pe({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,r)=>{let i=this._def.errorMap?.(t,r).message??r.defaultError;return t.code==="unrecognized_keys"?{message:D.errToObj(e).message??i}:{message:i}}}:{}})}strip(){return new pe({...this._def,unknownKeys:"strip"})}passthrough(){return new pe({...this._def,unknownKeys:"passthrough"})}extend(e){return new pe({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new pe({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:W.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new pe({...this._def,catchall:e})}pick(e){let t={};for(let r of re.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new pe({...this._def,shape:()=>t})}omit(e){let t={};for(let r of re.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new pe({...this._def,shape:()=>t})}deepPartial(){return Cr(this)}partial(e){let t={};for(let r of re.objectKeys(this.shape)){let i=this.shape[r];e&&!e[r]?t[r]=i:t[r]=i.optional()}return new pe({...this._def,shape:()=>t})}required(e){let t={};for(let r of re.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let s=this.shape[r];for(;s instanceof ht;)s=s._def.innerType;t[r]=s}return new pe({...this._def,shape:()=>t})}keyof(){return rs(re.objectKeys(this.shape))}};pe.create=(n,e)=>new pe({shape:()=>n,unknownKeys:"strip",catchall:yt.create(),typeName:W.ZodObject,...J(e)});pe.strictCreate=(n,e)=>new pe({shape:()=>n,unknownKeys:"strict",catchall:yt.create(),typeName:W.ZodObject,...J(e)});pe.lazycreate=(n,e)=>new pe({shape:n,unknownKeys:"strip",catchall:yt.create(),typeName:W.ZodObject,...J(e)});var ir=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),r=this._def.options;function i(s){for(let o of s)if(o.result.status==="valid")return o.result;for(let o of s)if(o.result.status==="dirty")return t.common.issues.push(...o.ctx.common.issues),o.result;let a=s.map(o=>new it(o.ctx.common.issues));return I(t,{code:E.invalid_union,unionErrors:a}),z}if(t.common.async)return Promise.all(r.map(async s=>{let a={...t,common:{...t.common,issues:[]},parent:null};return{result:await s._parseAsync({data:t.data,path:t.path,parent:a}),ctx:a}})).then(i);{let s,a=[];for(let u of r){let l={...t,common:{...t.common,issues:[]},parent:null},f=u._parseSync({data:t.data,path:t.path,parent:l});if(f.status==="valid")return f;f.status==="dirty"&&!s&&(s={result:f,ctx:l}),l.common.issues.length&&a.push(l.common.issues)}if(s)return t.common.issues.push(...s.ctx.common.issues),s.result;let o=a.map(u=>new it(u));return I(t,{code:E.invalid_union,unionErrors:o}),z}}get options(){return this._def.options}};ir.create=(n,e)=>new ir({options:n,typeName:W.ZodUnion,...J(e)});var Pt=n=>n instanceof or?Pt(n.schema):n instanceof mt?Pt(n.innerType()):n instanceof cr?[n.value]:n instanceof Mt?n.options:n instanceof ur?re.objectValues(n.enum):n instanceof lr?Pt(n._def.innerType):n instanceof rr?[void 0]:n instanceof nr?[null]:n instanceof ht?[void 0,...Pt(n.unwrap())]:n instanceof St?[null,...Pt(n.unwrap())]:n instanceof Vr||n instanceof pr?Pt(n.unwrap()):n instanceof dr?Pt(n._def.innerType):[],Sr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==B.object)return I(t,{code:E.invalid_type,expected:B.object,received:t.parsedType}),z;let r=this.discriminator,i=t.data[r],s=this.optionsMap.get(i);return s?t.common.async?s._parseAsync({data:t.data,path:t.path,parent:t}):s._parseSync({data:t.data,path:t.path,parent:t}):(I(t,{code:E.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),z)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,r){let i=new Map;for(let s of t){let a=Pt(s.shape[e]);if(!a.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let o of a){if(i.has(o))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(o)}`);i.set(o,s)}}return new Sr({typeName:W.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:i,...J(r)})}};function ni(n,e){let t=kt(n),r=kt(e);if(n===e)return{valid:!0,data:n};if(t===B.object&&r===B.object){let i=re.objectKeys(e),s=re.objectKeys(n).filter(o=>i.indexOf(o)!==-1),a={...n,...e};for(let o of s){let u=ni(n[o],e[o]);if(!u.valid)return{valid:!1};a[o]=u.data}return{valid:!0,data:a}}else if(t===B.array&&r===B.array){if(n.length!==e.length)return{valid:!1};let i=[];for(let s=0;s<n.length;s++){let a=n[s],o=e[s],u=ni(a,o);if(!u.valid)return{valid:!1};i.push(u.data)}return{valid:!0,data:i}}else return t===B.date&&r===B.date&&+n==+e?{valid:!0,data:n}:{valid:!1}}var sr=class extends Y{_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=(s,a)=>{if(en(s)||en(a))return z;let o=ni(s.value,a.value);return o.valid?((tn(s)||tn(a))&&t.dirty(),{status:t.value,value:o.data}):(I(r,{code:E.invalid_intersection_types}),z)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([s,a])=>i(s,a)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};sr.create=(n,e,t)=>new sr({left:n,right:e,typeName:W.ZodIntersection,...J(t)});var ft=class extends Y{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==B.array)return I(r,{code:E.invalid_type,expected:B.array,received:r.parsedType}),z;if(r.data.length<this._def.items.length)return I(r,{code:E.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),z;!this._def.rest&&r.data.length>this._def.items.length&&(I(r,{code:E.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let s=[...r.data].map((a,o)=>{let u=this._def.items[o]||this._def.rest;return u?u._parse(new pt(r,a,r.path,o)):null}).filter(a=>!!a);return r.common.async?Promise.all(s).then(a=>et.mergeArray(t,a)):et.mergeArray(t,s)}get items(){return this._def.items}rest(e){return new ft({...this._def,rest:e})}};ft.create=(n,e)=>{if(!Array.isArray(n))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ft({items:n,typeName:W.ZodTuple,rest:null,...J(e)})};var ar=class extends Y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==B.object)return I(r,{code:E.invalid_type,expected:B.object,received:r.parsedType}),z;let i=[],s=this._def.keyType,a=this._def.valueType;for(let o in r.data)i.push({key:s._parse(new pt(r,o,r.path,o)),value:a._parse(new pt(r,r.data[o],r.path,o)),alwaysSet:o in r.data});return r.common.async?et.mergeObjectAsync(t,i):et.mergeObjectSync(t,i)}get element(){return this._def.valueType}static create(e,t,r){return t instanceof Y?new ar({keyType:e,valueType:t,typeName:W.ZodRecord,...J(r)}):new ar({keyType:lt.create(),valueType:e,typeName:W.ZodRecord,...J(t)})}},Ar=class extends Y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==B.map)return I(r,{code:E.invalid_type,expected:B.map,received:r.parsedType}),z;let i=this._def.keyType,s=this._def.valueType,a=[...r.data.entries()].map(([o,u],l)=>({key:i._parse(new pt(r,o,r.path,[l,"key"])),value:s._parse(new pt(r,u,r.path,[l,"value"]))}));if(r.common.async){let o=new Map;return Promise.resolve().then(async()=>{for(let u of a){let l=await u.key,f=await u.value;if(l.status==="aborted"||f.status==="aborted")return z;(l.status==="dirty"||f.status==="dirty")&&t.dirty(),o.set(l.value,f.value)}return{status:t.value,value:o}})}else{let o=new Map;for(let u of a){let l=u.key,f=u.value;if(l.status==="aborted"||f.status==="aborted")return z;(l.status==="dirty"||f.status==="dirty")&&t.dirty(),o.set(l.value,f.value)}return{status:t.value,value:o}}}};Ar.create=(n,e,t)=>new Ar({valueType:e,keyType:n,typeName:W.ZodMap,...J(t)});var Rt=class extends Y{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==B.set)return I(r,{code:E.invalid_type,expected:B.set,received:r.parsedType}),z;let i=this._def;i.minSize!==null&&r.data.size<i.minSize.value&&(I(r,{code:E.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,exact:!1,message:i.minSize.message}),t.dirty()),i.maxSize!==null&&r.data.size>i.maxSize.value&&(I(r,{code:E.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),t.dirty());let s=this._def.valueType;function a(u){let l=new Set;for(let f of u){if(f.status==="aborted")return z;f.status==="dirty"&&t.dirty(),l.add(f.value)}return{status:t.value,value:l}}let o=[...r.data.values()].map((u,l)=>s._parse(new pt(r,u,r.path,l)));return r.common.async?Promise.all(o).then(u=>a(u)):a(o)}min(e,t){return new Rt({...this._def,minSize:{value:e,message:D.toString(t)}})}max(e,t){return new Rt({...this._def,maxSize:{value:e,message:D.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};Rt.create=(n,e)=>new Rt({valueType:n,minSize:null,maxSize:null,typeName:W.ZodSet,...J(e)});var Lt=class extends Y{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==B.function)return I(t,{code:E.invalid_type,expected:B.function,received:t.parsedType}),z;function r(o,u){return Lr({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,vr(),It].filter(l=>!!l),issueData:{code:E.invalid_arguments,argumentsError:u}})}function i(o,u){return Lr({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,vr(),It].filter(l=>!!l),issueData:{code:E.invalid_return_type,returnTypeError:u}})}let s={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof Zt){let o=this;return st(async function(...u){let l=new it([]),f=await o._def.args.parseAsync(u,s).catch(v=>{throw l.addIssue(r(u,v)),l}),p=await Reflect.apply(a,this,f);return await o._def.returns._def.type.parseAsync(p,s).catch(v=>{throw l.addIssue(i(p,v)),l})})}else{let o=this;return st(function(...u){let l=o._def.args.safeParse(u,s);if(!l.success)throw new it([r(u,l.error)]);let f=Reflect.apply(a,this,l.data),p=o._def.returns.safeParse(f,s);if(!p.success)throw new it([i(f,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new Lt({...this._def,args:ft.create(e).rest(Bt.create())})}returns(e){return new Lt({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,r){return new Lt({args:e||ft.create([]).rest(Bt.create()),returns:t||Bt.create(),typeName:W.ZodFunction,...J(r)})}},or=class extends Y{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};or.create=(n,e)=>new or({getter:n,typeName:W.ZodLazy,...J(e)});var cr=class extends Y{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return I(t,{received:t.data,code:E.invalid_literal,expected:this._def.value}),z}return{status:"valid",value:e.data}}get value(){return this._def.value}};cr.create=(n,e)=>new cr({value:n,typeName:W.ZodLiteral,...J(e)});function rs(n,e){return new Mt({values:n,typeName:W.ZodEnum,...J(e)})}var Mt=class extends Y{_parse(e){if(typeof e.data!="string"){let t=this._getOrReturnCtx(e),r=this._def.values;return I(t,{expected:re.joinValues(r),received:t.parsedType,code:E.invalid_type}),z}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),r=this._def.values;return I(t,{received:t.data,code:E.invalid_enum_value,options:r}),z}return st(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return Mt.create(e,{...this._def,...t})}exclude(e,t=this._def){return Mt.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}};Mt.create=rs;var ur=class extends Y{_parse(e){let t=re.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==B.string&&r.parsedType!==B.number){let i=re.objectValues(t);return I(r,{expected:re.joinValues(i),received:r.parsedType,code:E.invalid_type}),z}if(this._cache||(this._cache=new Set(re.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let i=re.objectValues(t);return I(r,{received:r.data,code:E.invalid_enum_value,options:i}),z}return st(e.data)}get enum(){return this._def.values}};ur.create=(n,e)=>new ur({values:n,typeName:W.ZodNativeEnum,...J(e)});var Zt=class extends Y{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==B.promise&&t.common.async===!1)return I(t,{code:E.invalid_type,expected:B.promise,received:t.parsedType}),z;let r=t.parsedType===B.promise?t.data:Promise.resolve(t.data);return st(r.then(i=>this._def.type.parseAsync(i,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Zt.create=(n,e)=>new Zt({type:n,typeName:W.ZodPromise,...J(e)});var mt=class extends Y{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===W.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:r}=this._processInputParams(e),i=this._def.effect||null,s={addIssue:a=>{I(r,a),a.fatal?t.abort():t.dirty()},get path(){return r.path}};if(s.addIssue=s.addIssue.bind(s),i.type==="preprocess"){let a=i.transform(r.data,s);if(r.common.async)return Promise.resolve(a).then(async o=>{if(t.value==="aborted")return z;let u=await this._def.schema._parseAsync({data:o,path:r.path,parent:r});return u.status==="aborted"?z:u.status==="dirty"?er(u.value):t.value==="dirty"?er(u.value):u});{if(t.value==="aborted")return z;let o=this._def.schema._parseSync({data:a,path:r.path,parent:r});return o.status==="aborted"?z:o.status==="dirty"?er(o.value):t.value==="dirty"?er(o.value):o}}if(i.type==="refinement"){let a=o=>{let u=i.refinement(o,s);if(r.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?z:(o.status==="dirty"&&t.dirty(),a(o.value),{status:t.value,value:o.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>o.status==="aborted"?z:(o.status==="dirty"&&t.dirty(),a(o.value).then(()=>({status:t.value,value:o.value}))))}if(i.type==="transform")if(r.common.async===!1){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Ft(a))return z;let o=i.transform(a.value,s);if(o instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:o}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>Ft(a)?Promise.resolve(i.transform(a.value,s)).then(o=>({status:t.value,value:o})):z);re.assertNever(i)}};mt.create=(n,e,t)=>new mt({schema:n,typeName:W.ZodEffects,effect:e,...J(t)});mt.createWithPreprocess=(n,e,t)=>new mt({schema:e,effect:{type:"preprocess",transform:n},typeName:W.ZodEffects,...J(t)});var ht=class extends Y{_parse(e){return this._getType(e)===B.undefined?st(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ht.create=(n,e)=>new ht({innerType:n,typeName:W.ZodOptional,...J(e)});var St=class extends Y{_parse(e){return this._getType(e)===B.null?st(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};St.create=(n,e)=>new St({innerType:n,typeName:W.ZodNullable,...J(e)});var lr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return t.parsedType===B.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};lr.create=(n,e)=>new lr({innerType:n,typeName:W.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...J(e)});var dr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return kr(i)?i.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new it(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new it(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};dr.create=(n,e)=>new dr({innerType:n,typeName:W.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...J(e)});var Or=class extends Y{_parse(e){if(this._getType(e)!==B.nan){let r=this._getOrReturnCtx(e);return I(r,{code:E.invalid_type,expected:B.nan,received:r.parsedType}),z}return{status:"valid",value:e.data}}};Or.create=n=>new Or({typeName:W.ZodNaN,...J(n)});var eo=Symbol("zod_brand"),Vr=class extends Y{_parse(e){let{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}},hr=class extends Y{_parse(e){let{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let s=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?z:s.status==="dirty"?(t.dirty(),er(s.value)):this._def.out._parseAsync({data:s.value,path:r.path,parent:r})})();{let i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?z:i.status==="dirty"?(t.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(e,t){return new hr({in:e,out:t,typeName:W.ZodPipeline})}},pr=class extends Y{_parse(e){let t=this._def.innerType._parse(e),r=i=>(Ft(i)&&(i.value=Object.freeze(i.value)),i);return kr(t)?t.then(i=>r(i)):r(t)}unwrap(){return this._def.innerType}};pr.create=(n,e)=>new pr({innerType:n,typeName:W.ZodReadonly,...J(e)});function Ji(n,e){let t=typeof n=="function"?n(e):typeof n=="string"?{message:n}:n;return typeof t=="string"?{message:t}:t}function ns(n,e={},t){return n?Vt.create().superRefine((r,i)=>{let s=n(r);if(s instanceof Promise)return s.then(a=>{if(!a){let o=Ji(e,r),u=o.fatal??t??!0;i.addIssue({code:"custom",...o,fatal:u})}});if(!s){let a=Ji(e,r),o=a.fatal??t??!0;i.addIssue({code:"custom",...a,fatal:o})}}):Vt.create()}var to={object:pe.lazycreate},W;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(W||(W={}));var ro=(n,e={message:`Input not instance of ${n.name}`})=>ns(t=>t instanceof n,e),is=lt.create,ss=Ct.create,no=Or.create,io=Tt.create,as=tr.create,so=qt.create,ao=Tr.create,oo=rr.create,co=nr.create,uo=Vt.create,lo=Bt.create,ho=yt.create,po=Mr.create,fo=dt.create,mo=pe.create,go=pe.strictCreate,_o=ir.create,yo=Sr.create,bo=sr.create,wo=ft.create,vo=ar.create,ko=Ar.create,Co=Rt.create,To=Lt.create,Mo=or.create,So=cr.create,Ao=Mt.create,Oo=ur.create,Eo=Zt.create,xo=mt.create,jo=ht.create,Io=St.create,Po=mt.createWithPreprocess,Bo=hr.create,qo=()=>is().optional(),Ro=()=>ss().optional(),Do=()=>as().optional(),Uo={string:n=>lt.create({...n,coerce:!0}),number:n=>Ct.create({...n,coerce:!0}),boolean:n=>tr.create({...n,coerce:!0}),bigint:n=>Tt.create({...n,coerce:!0}),date:n=>qt.create({...n,coerce:!0})};var $o=z;function Fo(n,e){let t={...n};for(let r of e)delete t[r];return t}var Lo=/:([a-zA-Z_][a-zA-Z0-9_]*)/g;function Vo(n){let e=n.url,t=n.params;return t&&(e=e.replace(Lo,(r,i)=>i in t?`${t[i]}`:r)),e}function os(n,e,t){return n.find(r=>r.method===e&&r.path===t)}function Zo(n){let e=new FormData;for(let t in n)e.append(t,n[t]);return{data:e}}var rn=class extends Error{constructor(n,e,t,r){super(n),this.config=e,this.data=t,this.cause=r}},zo={name:"form-data",request:async(n,e)=>{if(typeof e.data!="object"||Array.isArray(e.data))throw new rn("Zodios: multipart/form-data body must be an object",e);let t=Zo(e.data);return{...e,data:t.data,headers:{...e.headers,...t.headers}}}};function Go(){return zo}var Wo={name:"form-url",request:async(n,e)=>{if(typeof e.data!="object"||Array.isArray(e.data))throw new rn("Zodios: application/x-www-form-urlencoded body must be an object",e);return{...e,data:new URLSearchParams(e.data).toString(),headers:{...e.headers,"Content-Type":"application/x-www-form-urlencoded"}}}};function Ho(){return Wo}function cs(n,e){return{request:async(t,r)=>({...r,headers:{...r.headers,[n]:e}})}}function us(n){return[!0,"response","all"].includes(n)}function ls(n){return[!0,"request","all"].includes(n)}function Ko({validate:n,transform:e,sendDefaults:t}){return{name:"zod-validation",request:ls(n)?async(r,i)=>{let s=os(r,i.method,i.url);if(!s)throw new Error(`No endpoint found for ${i.method} ${i.url}`);let{parameters:a}=s;if(!a)return i;let o={...i,queries:{...i.queries},headers:{...i.headers},params:{...i.params}},u={Query:p=>{var g;return(g=o.queries)==null?void 0:g[p]},Body:p=>o.data,Header:p=>{var g;return(g=o.headers)==null?void 0:g[p]},Path:p=>{var g;return(g=o.params)==null?void 0:g[p]}},l={Query:(p,g)=>o.queries[p]=g,Body:(p,g)=>o.data=g,Header:(p,g)=>o.headers[p]=g,Path:(p,g)=>o.params[p]=g},f=ls(e);for(let p of a){let{name:g,schema:v,type:C}=p,S=u[C](g);if(t||S!==void 0){let j=await v.safeParseAsync(S);if(!j.success)throw new rn(`Zodios: Invalid ${C} parameter '${g}'`,i,S,j.error);f&&l[C](g,j.data)}}return o}:void 0,response:us(n)?async(r,i,s)=>{var a,o,u,l;let f=os(r,i.method,i.url);if(!f)throw new Error(`No endpoint found for ${i.method} ${i.url}`);if((o=(a=s.headers)==null?void 0:a["content-type"])!=null&&o.includes("application/json")||(l=(u=s.headers)==null?void 0:u["content-type"])!=null&&l.includes("application/vnd.api+json")){let p=await f.response.safeParseAsync(s.data);if(!p.success)throw new rn(`Zodios: Invalid response from endpoint '${f.method} ${f.path}'
6
+ status: ${s.status} ${s.statusText}
7
+ cause:
8
+ ${p.error.message}
9
+ received:
10
+ ${JSON.stringify(s.data,null,2)}`,i,s.data,p.error);us(e)&&(s.data=p.data)}return s}:void 0}}var ds=class{constructor(n,e){this.plugins=[],this.key=`${n}-${e}`}indexOf(n){return this.plugins.findIndex(e=>e?.name===n)}use(n){if(n.name){let e=this.indexOf(n.name);if(e!==-1)return this.plugins[e]=n,{key:this.key,value:e}}return this.plugins.push(n),{key:this.key,value:this.plugins.length-1}}eject(n){if(typeof n=="string"){let e=this.indexOf(n);if(e===-1)throw new Error(`Plugin with name '${n}' not found`);this.plugins[e]=void 0}else{if(n.key!==this.key)throw new Error(`Plugin with key '${n.key}' is not registered for endpoint '${this.key}'`);this.plugins[n.value]=void 0}}async interceptRequest(n,e){let t=e;for(let r of this.plugins)r!=null&&r.request&&(t=await r.request(n,t));return t}async interceptResponse(n,e,t){let r=t;for(let i=this.plugins.length-1;i>=0;i--){let s=this.plugins[i];s&&(r=r.then(s!=null&&s.response?a=>s.response(n,e,a):void 0,s!=null&&s.error?a=>s.error(n,e,a):void 0))}return r}count(){return this.plugins.reduce((n,e)=>e?n+1:n,0)}};function hs(n){let e=new Set;for(let r of n){let i=`${r.method} ${r.path}`;if(e.has(i))throw new Error(`Zodios: Duplicate path '${i}'`);e.add(i)}let t=new Set;for(let r of n)if(r.alias){if(t.has(r.alias))throw new Error(`Zodios: Duplicate alias '${r.alias}'`);t.add(r.alias)}for(let r of n)if(r.parameters&&r.parameters.filter(i=>i.type==="Body").length>1)throw new Error(`Zodios: Multiple body parameters in endpoint '${r.path}'`)}function ps(n){return hs(n),n}var Qo=class{constructor(n,e,t){this.endpointPlugins=new Map;let r;if(!n)throw Array.isArray(e)?new Error("Zodios: missing base url"):new Error("Zodios: missing api description");let i;if(typeof n=="string"&&Array.isArray(e))i=n,this.api=e,r=t||{};else if(Array.isArray(n)&&!Array.isArray(e))this.api=n,r=e||{};else throw new Error("Zodios: api must be an array");hs(this.api),this.options={validate:!0,transform:!0,sendDefaults:!1,...r},this.options.axiosInstance?this.axiosInstance=this.options.axiosInstance:this.axiosInstance=No.create({...this.options.axiosConfig}),i&&(this.axiosInstance.defaults.baseURL=i),this.injectAliasEndpoints(),this.initPlugins(),[!0,"all","request","response"].includes(this.options.validate)&&this.use(Ko(this.options))}initPlugins(){this.endpointPlugins.set("any-any",new ds("any","any")),this.api.forEach(n=>{let e=new ds(n.method,n.path);switch(n.requestFormat){case"binary":e.use(cs("Content-Type","application/octet-stream"));break;case"form-data":e.use(Go());break;case"form-url":e.use(Ho());break;case"text":e.use(cs("Content-Type","text/plain"));break}this.endpointPlugins.set(`${n.method}-${n.path}`,e)})}getAnyEndpointPlugins(){return this.endpointPlugins.get("any-any")}findAliasEndpointPlugins(n){let e=this.api.find(t=>t.alias===n);if(e)return this.endpointPlugins.get(`${e.method}-${e.path}`)}findEnpointPlugins(n,e){return this.endpointPlugins.get(`${n}-${e}`)}get baseURL(){return this.axiosInstance.defaults.baseURL}get axios(){return this.axiosInstance}use(...n){if(typeof n[0]=="object")return this.getAnyEndpointPlugins().use(n[0]);if(typeof n[0]=="string"&&typeof n[1]=="object"){let e=this.findAliasEndpointPlugins(n[0]);if(!e)throw new Error(`Zodios: no alias '${n[0]}' found to register plugin`);return e.use(n[1])}else if(typeof n[0]=="string"&&typeof n[1]=="string"&&typeof n[2]=="object"){let e=this.findEnpointPlugins(n[0],n[1]);if(!e)throw new Error(`Zodios: no endpoint '${n[0]} ${n[1]}' found to register plugin`);return e.use(n[2])}throw new Error("Zodios: invalid plugin registration")}eject(n){var e;if(typeof n=="string"){this.getAnyEndpointPlugins().eject(n);return}(e=this.endpointPlugins.get(n.key))==null||e.eject(n)}injectAliasEndpoints(){this.api.forEach(n=>{n.alias&&(["post","put","patch","delete"].includes(n.method)?this[n.alias]=(e,t)=>this.request({...t,method:n.method,url:n.path,data:e}):this[n.alias]=e=>this.request({...e,method:n.method,url:n.path}))})}async request(n){let e=n,t=this.getAnyEndpointPlugins(),r=this.findEnpointPlugins(e.method,e.url);e=await t.interceptRequest(this.api,e),r&&(e=await r.interceptRequest(this.api,e));let i=this.axiosInstance.request({...Fo(e,["params","queries"]),url:Vo(e),params:e.queries});return r&&(i=r.interceptResponse(this.api,e,i)),i=t.interceptResponse(this.api,e,i),(await i).data}async get(n,...[e]){return this.request({...e,method:"get",url:n})}async post(n,e,...[t]){return this.request({...t,method:"post",url:n,data:e})}async put(n,e,...[t]){return this.request({...t,method:"put",url:n,data:e})}async patch(n,e,...[t]){return this.request({...t,method:"patch",url:n,data:e})}async delete(n,e,...[t]){return this.request({...t,method:"delete",url:n,data:e})}},fs=Qo;var ms=V.enum(["crypto","fx","equity","metal","rates","crypto_redemption_rate","commodities","crypto_index","crypto_nav","eco","kalshi"]),gs=ms.nullish(),si=V.string(),_s=V.object({attributes:V.record(V.string()),id:si}).passthrough(),nn=V.string(),ys=V.enum(["hex","base64"]),ai=V.object({data:V.array(V.string()),encoding:ys}).passthrough(),ii=V.object({conf:V.string(),expo:V.number().int(),price:V.string(),publish_time:V.number().int()}).passthrough(),bs=V.object({prev_publish_time:V.number().int().nullable(),proof_available_time:V.number().int().nullable(),slot:V.number().int().gte(0).nullable()}).partial().passthrough(),ws=V.object({ema_price:ii,id:si,metadata:bs,price:ii}).passthrough(),sn=V.object({binary:ai,parsed:V.array(ws).nullish()}).passthrough(),vs=V.object({cap:V.number().int().gte(0),publisher:V.string()}).passthrough(),ks=V.object({publisher_stake_caps:V.array(vs)}).passthrough(),Cs=V.object({binary:ai,parsed:V.array(ks).nullish()}).passthrough(),Zr={AssetType:ms,asset_type:gs,RpcPriceIdentifier:si,PriceFeedMetadata:_s,PriceIdInput:nn,EncodingType:ys,BinaryUpdate:ai,RpcPrice:ii,RpcPriceFeedMetadataV2:bs,ParsedPriceUpdate:ws,PriceUpdate:sn,ParsedPublisherStakeCap:vs,ParsedPublisherStakeCapsUpdate:ks,LatestPublisherStakeCapsUpdateDataResponse:Cs},Xo=ps([{method:"get",path:"/v2/price_feeds",alias:"price_feeds_metadata",description:`Get the set of price feeds.
11
+
12
+ This endpoint fetches all price feeds from the Pyth network. It can be filtered by asset type
13
+ and query string.`,requestFormat:"json",parameters:[{name:"query",type:"Query",schema:V.string().nullish()},{name:"asset_type",type:"Query",schema:gs}],response:V.array(_s)},{method:"get",path:"/v2/updates/price/:publish_time",alias:"timestamp_price_updates",description:`Get the latest price updates by price feed id.
14
+
15
+ Given a collection of price feed ids, retrieve the latest Pyth price for each price feed.`,requestFormat:"json",parameters:[{name:"publish_time",type:"Path",schema:V.number().int()},{name:"ids[]",type:"Query",schema:V.array(nn)},{name:"encoding",type:"Query",schema:V.enum(["hex","base64"]).optional()},{name:"parsed",type:"Query",schema:V.boolean().optional()},{name:"ignore_invalid_price_ids",type:"Query",schema:V.boolean().optional()}],response:sn,errors:[{status:404,description:"Price ids not found",schema:V.void()}]},{method:"get",path:"/v2/updates/price/latest",alias:"latest_price_updates",description:`Get the latest price updates by price feed id.
16
+
17
+ Given a collection of price feed ids, retrieve the latest Pyth price for each price feed.`,requestFormat:"json",parameters:[{name:"ids[]",type:"Query",schema:V.array(nn)},{name:"encoding",type:"Query",schema:V.enum(["hex","base64"]).optional()},{name:"parsed",type:"Query",schema:V.boolean().optional()},{name:"ignore_invalid_price_ids",type:"Query",schema:V.boolean().optional()}],response:sn,errors:[{status:404,description:"Price ids not found",schema:V.void()}]},{method:"get",path:"/v2/updates/price/stream",alias:"price_stream_sse_handler",description:`SSE route handler for streaming price updates.
18
+
19
+ The connection will automatically close after 24 hours to prevent resource leaks.
20
+ Clients should implement reconnection logic to maintain continuous price updates.`,requestFormat:"json",parameters:[{name:"ids[]",type:"Query",schema:V.array(nn)},{name:"encoding",type:"Query",schema:V.enum(["hex","base64"]).optional()},{name:"parsed",type:"Query",schema:V.boolean().optional()},{name:"allow_unordered",type:"Query",schema:V.boolean().optional()},{name:"benchmarks_only",type:"Query",schema:V.boolean().optional()},{name:"ignore_invalid_price_ids",type:"Query",schema:V.boolean().optional()}],response:sn,errors:[{status:404,description:"Price ids not found",schema:V.void()}]},{method:"get",path:"/v2/updates/publisher_stake_caps/latest",alias:"latest_publisher_stake_caps",description:"Get the most recent publisher stake caps update data.",requestFormat:"json",parameters:[{name:"encoding",type:"Query",schema:V.enum(["hex","base64"]).optional()},{name:"parsed",type:"Query",schema:V.boolean().optional()}],response:Cs}]),Dl=new fs(Xo);var Jo=5e3,Yo=3,an=class{baseURL;timeout;httpRetries;headers;accessToken;constructor(e,t){this.baseURL=e,this.timeout=t?.timeout??Jo,this.httpRetries=t?.httpRetries??Yo,this.headers=t?.headers??{},this.accessToken=t?.accessToken}async httpRequest(e,t,r,i=this.httpRetries,s=100+Math.floor(Math.random()*100)){try{let a={};this.accessToken!==void 0&&(a.Authorization=`Bearer ${this.accessToken}`);let o=await fetch(e,{...r,signal:AbortSignal.any([...r?.signal?[r.signal]:[],AbortSignal.timeout(this.timeout)]),headers:{...a,...this.headers,...r?.headers}});if(!o.ok){let l=await o.text();throw new Error(`HTTP error! status: ${o.status.toString()}${l?`, body: ${l}`:""}`)}let u=await o.json();return t.parse(u)}catch(a){if(i>0&&!(a instanceof Error&&a.name==="AbortError"))return await new Promise(o=>setTimeout(o,s)),this.httpRequest(e,t,r,i-1,s*2);throw a}}async getPriceFeeds({fetchOptions:e,...t}={}){let r=this.buildURL("price_feeds");if(t){let i=Fr(t);this.appendUrlSearchParams(r,i)}return await this.httpRequest(r.toString(),Zr.PriceFeedMetadata.array(),e)}async getLatestPublisherCaps({fetchOptions:e,...t}={}){let r=this.buildURL("updates/publisher_stake_caps/latest");return t&&this.appendUrlSearchParams(r,t),await this.httpRequest(r.toString(),Zr.LatestPublisherStakeCapsUpdateDataResponse,e)}async getLatestPriceUpdates(e,t,r){let i=this.buildURL("updates/price/latest");for(let s of e)i.searchParams.append("ids[]",s);if(t){let s=Fr(t);this.appendUrlSearchParams(i,s)}return this.httpRequest(i.toString(),Zr.PriceUpdate,r)}async getPriceUpdatesAtTimestamp(e,t,r,i){let s=this.buildURL(`updates/price/${e.toString()}`);for(let a of t)s.searchParams.append("ids[]",a);if(r){let a=Fr(r);this.appendUrlSearchParams(s,a)}return this.httpRequest(s.toString(),Zr.PriceUpdate,i)}async getPriceUpdatesStream(e,t){let r=this.buildURL("updates/price/stream");for(let s of e)r.searchParams.append("ids[]",s);if(t){let s=Fr(t);this.appendUrlSearchParams(r,s)}let i={};return this.accessToken!==void 0&&(i.Authorization=`Bearer ${this.accessToken}`),new Yt(r.toString(),{fetch:(s,a)=>fetch(s,{...a,headers:{...a?.headers,...i,...this.headers}})})}appendUrlSearchParams(e,t){for(let[r,i]of Object.entries(t))i!==void 0&&e.searchParams.append(r,String(i))}buildURL(e){return new URL(`./v2/${e}`,`${this.baseURL}${this.baseURL.endsWith("/")?"":"/"}`)}};import{bcs as on}from"@mysten/sui/bcs";import{SUI_CLOCK_OBJECT_ID as ci}from"@mysten/sui/utils";var ec=Object.create,qs=Object.defineProperty,tc=Object.getOwnPropertyDescriptor,rc=Object.getOwnPropertyNames,nc=Object.getPrototypeOf,ic=Object.prototype.hasOwnProperty,sc=(n=>typeof Xt<"u"?Xt:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof Xt<"u"?Xt:e)[t]}):n)(function(n){if(typeof Xt<"u")return Xt.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')}),ac=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),oc=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of rc(e))!ic.call(n,i)&&i!==t&&qs(n,i,{get:()=>e[i],enumerable:!(r=tc(e,i))||r.enumerable});return n},Gr=(n,e,t)=>(t=n!=null?ec(nc(n)):{},oc(e||!n||!n.__esModule?qs(t,"default",{value:n,enumerable:!0}):t,n)),Wr=ac((n,e)=>{"use strict";(function(t,r){"use strict";function i(c,h){if(!c)throw new Error(h||"Assertion failed")}function s(c,h){c.super_=h;var m=function(){};m.prototype=h.prototype,c.prototype=new m,c.prototype.constructor=c}function a(c,h,m){if(a.isBN(c))return c;this.negative=0,this.words=null,this.length=0,this.red=null,c!==null&&((h==="le"||h==="be")&&(m=h,h=10),this._init(c||0,h||10,m||"be"))}typeof t=="object"?t.exports=a:r.BN=a,a.BN=a,a.wordSize=26;var o;try{typeof window<"u"&&typeof window.Buffer<"u"?o=window.Buffer:o=sc("buffer").Buffer}catch{}a.isBN=function(c){return c instanceof a?!0:c!==null&&typeof c=="object"&&c.constructor.wordSize===a.wordSize&&Array.isArray(c.words)},a.max=function(c,h){return c.cmp(h)>0?c:h},a.min=function(c,h){return c.cmp(h)<0?c:h},a.prototype._init=function(c,h,m){if(typeof c=="number")return this._initNumber(c,h,m);if(typeof c=="object")return this._initArray(c,h,m);h==="hex"&&(h=16),i(h===(h|0)&&h>=2&&h<=36),c=c.toString().replace(/\s+/g,"");var _=0;c[0]==="-"&&(_++,this.negative=1),_<c.length&&(h===16?this._parseHex(c,_,m):(this._parseBase(c,h,_),m==="le"&&this._initArray(this.toArray(),h,m)))},a.prototype._initNumber=function(c,h,m){c<0&&(this.negative=1,c=-c),c<67108864?(this.words=[c&67108863],this.length=1):c<4503599627370496?(this.words=[c&67108863,c/67108864&67108863],this.length=2):(i(c<9007199254740992),this.words=[c&67108863,c/67108864&67108863,1],this.length=3),m==="le"&&this._initArray(this.toArray(),h,m)},a.prototype._initArray=function(c,h,m){if(i(typeof c.length=="number"),c.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(c.length/3),this.words=new Array(this.length);for(var _=0;_<this.length;_++)this.words[_]=0;var b,k,M=0;if(m==="be")for(_=c.length-1,b=0;_>=0;_-=3)k=c[_]|c[_-1]<<8|c[_-2]<<16,this.words[b]|=k<<M&67108863,this.words[b+1]=k>>>26-M&67108863,M+=24,M>=26&&(M-=26,b++);else if(m==="le")for(_=0,b=0;_<c.length;_+=3)k=c[_]|c[_+1]<<8|c[_+2]<<16,this.words[b]|=k<<M&67108863,this.words[b+1]=k>>>26-M&67108863,M+=24,M>=26&&(M-=26,b++);return this._strip()};function u(c,h){var m=c.charCodeAt(h);if(m>=48&&m<=57)return m-48;if(m>=65&&m<=70)return m-55;if(m>=97&&m<=102)return m-87;i(!1,"Invalid character in "+c)}function l(c,h,m){var _=u(c,m);return m-1>=h&&(_|=u(c,m-1)<<4),_}a.prototype._parseHex=function(c,h,m){this.length=Math.ceil((c.length-h)/6),this.words=new Array(this.length);for(var _=0;_<this.length;_++)this.words[_]=0;var b=0,k=0,M;if(m==="be")for(_=c.length-1;_>=h;_-=2)M=l(c,h,_)<<b,this.words[k]|=M&67108863,b>=18?(b-=18,k+=1,this.words[k]|=M>>>26):b+=8;else{var y=c.length-h;for(_=y%2===0?h+1:h;_<c.length;_+=2)M=l(c,h,_)<<b,this.words[k]|=M&67108863,b>=18?(b-=18,k+=1,this.words[k]|=M>>>26):b+=8}this._strip()};function f(c,h,m,_){for(var b=0,k=0,M=Math.min(c.length,m),y=h;y<M;y++){var d=c.charCodeAt(y)-48;b*=_,d>=49?k=d-49+10:d>=17?k=d-17+10:k=d,i(d>=0&&k<_,"Invalid character"),b+=k}return b}a.prototype._parseBase=function(c,h,m){this.words=[0],this.length=1;for(var _=0,b=1;b<=67108863;b*=h)_++;_--,b=b/h|0;for(var k=c.length-m,M=k%_,y=Math.min(k,k-M)+m,d=0,w=m;w<y;w+=_)d=f(c,w,w+_,h),this.imuln(b),this.words[0]+d<67108864?this.words[0]+=d:this._iaddn(d);if(M!==0){var $=1;for(d=f(c,w,c.length,h),w=0;w<M;w++)$*=h;this.imuln($),this.words[0]+d<67108864?this.words[0]+=d:this._iaddn(d)}this._strip()},a.prototype.copy=function(c){c.words=new Array(this.length);for(var h=0;h<this.length;h++)c.words[h]=this.words[h];c.length=this.length,c.negative=this.negative,c.red=this.red};function p(c,h){c.words=h.words,c.length=h.length,c.negative=h.negative,c.red=h.red}if(a.prototype._move=function(c){p(c,this)},a.prototype.clone=function(){var c=new a(null);return this.copy(c),c},a.prototype._expand=function(c){for(;this.length<c;)this.words[this.length++]=0;return this},a.prototype._strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},a.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{a.prototype[Symbol.for("nodejs.util.inspect.custom")]=g}catch{a.prototype.inspect=g}else a.prototype.inspect=g;function g(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"}var v=["","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"],C=[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],S=[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];a.prototype.toString=function(c,h){c=c||10,h=h|0||1;var m;if(c===16||c==="hex"){m="";for(var _=0,b=0,k=0;k<this.length;k++){var M=this.words[k],y=((M<<_|b)&16777215).toString(16);b=M>>>24-_&16777215,_+=2,_>=26&&(_-=26,k--),b!==0||k!==this.length-1?m=v[6-y.length]+y+m:m=y+m}for(b!==0&&(m=b.toString(16)+m);m.length%h!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}if(c===(c|0)&&c>=2&&c<=36){var d=C[c],w=S[c];m="";var $=this.clone();for($.negative=0;!$.isZero();){var N=$.modrn(w).toString(c);$=$.idivn(w),$.isZero()?m=N+m:m=v[d-N.length]+N+m}for(this.isZero()&&(m="0"+m);m.length%h!==0;)m="0"+m;return this.negative!==0&&(m="-"+m),m}i(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var c=this.words[0];return this.length===2?c+=this.words[1]*67108864:this.length===3&&this.words[2]===1?c+=4503599627370496+this.words[1]*67108864:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-c:c},a.prototype.toJSON=function(){return this.toString(16,2)},o&&(a.prototype.toBuffer=function(c,h){return this.toArrayLike(o,c,h)}),a.prototype.toArray=function(c,h){return this.toArrayLike(Array,c,h)};var j=function(c,h){return c.allocUnsafe?c.allocUnsafe(h):new c(h)};a.prototype.toArrayLike=function(c,h,m){this._strip();var _=this.byteLength(),b=m||Math.max(1,_);i(_<=b,"byte array longer than desired length"),i(b>0,"Requested array length <= 0");var k=j(c,b),M=h==="le"?"LE":"BE";return this["_toArrayLike"+M](k,_),k},a.prototype._toArrayLikeLE=function(c,h){for(var m=0,_=0,b=0,k=0;b<this.length;b++){var M=this.words[b]<<k|_;c[m++]=M&255,m<c.length&&(c[m++]=M>>8&255),m<c.length&&(c[m++]=M>>16&255),k===6?(m<c.length&&(c[m++]=M>>24&255),_=0,k=0):(_=M>>>24,k+=2)}if(m<c.length)for(c[m++]=_;m<c.length;)c[m++]=0},a.prototype._toArrayLikeBE=function(c,h){for(var m=c.length-1,_=0,b=0,k=0;b<this.length;b++){var M=this.words[b]<<k|_;c[m--]=M&255,m>=0&&(c[m--]=M>>8&255),m>=0&&(c[m--]=M>>16&255),k===6?(m>=0&&(c[m--]=M>>24&255),_=0,k=0):(_=M>>>24,k+=2)}if(m>=0)for(c[m--]=_;m>=0;)c[m--]=0},Math.clz32?a.prototype._countBits=function(c){return 32-Math.clz32(c)}:a.prototype._countBits=function(c){var h=c,m=0;return h>=4096&&(m+=13,h>>>=13),h>=64&&(m+=7,h>>>=7),h>=8&&(m+=4,h>>>=4),h>=2&&(m+=2,h>>>=2),m+h},a.prototype._zeroBits=function(c){if(c===0)return 26;var h=c,m=0;return!(h&8191)&&(m+=13,h>>>=13),!(h&127)&&(m+=7,h>>>=7),!(h&15)&&(m+=4,h>>>=4),!(h&3)&&(m+=2,h>>>=2),!(h&1)&&m++,m},a.prototype.bitLength=function(){var c=this.words[this.length-1],h=this._countBits(c);return(this.length-1)*26+h};function x(c){for(var h=new Array(c.bitLength()),m=0;m<h.length;m++){var _=m/26|0,b=m%26;h[m]=c.words[_]>>>b&1}return h}a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var c=0,h=0;h<this.length;h++){var m=this._zeroBits(this.words[h]);if(c+=m,m!==26)break}return c},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(c){return this.negative!==0?this.abs().inotn(c).iaddn(1):this.clone()},a.prototype.fromTwos=function(c){return this.testn(c-1)?this.notn(c).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return this.negative!==0},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(c){for(;this.length<c.length;)this.words[this.length++]=0;for(var h=0;h<c.length;h++)this.words[h]=this.words[h]|c.words[h];return this._strip()},a.prototype.ior=function(c){return i((this.negative|c.negative)===0),this.iuor(c)},a.prototype.or=function(c){return this.length>c.length?this.clone().ior(c):c.clone().ior(this)},a.prototype.uor=function(c){return this.length>c.length?this.clone().iuor(c):c.clone().iuor(this)},a.prototype.iuand=function(c){var h;this.length>c.length?h=c:h=this;for(var m=0;m<h.length;m++)this.words[m]=this.words[m]&c.words[m];return this.length=h.length,this._strip()},a.prototype.iand=function(c){return i((this.negative|c.negative)===0),this.iuand(c)},a.prototype.and=function(c){return this.length>c.length?this.clone().iand(c):c.clone().iand(this)},a.prototype.uand=function(c){return this.length>c.length?this.clone().iuand(c):c.clone().iuand(this)},a.prototype.iuxor=function(c){var h,m;this.length>c.length?(h=this,m=c):(h=c,m=this);for(var _=0;_<m.length;_++)this.words[_]=h.words[_]^m.words[_];if(this!==h)for(;_<h.length;_++)this.words[_]=h.words[_];return this.length=h.length,this._strip()},a.prototype.ixor=function(c){return i((this.negative|c.negative)===0),this.iuxor(c)},a.prototype.xor=function(c){return this.length>c.length?this.clone().ixor(c):c.clone().ixor(this)},a.prototype.uxor=function(c){return this.length>c.length?this.clone().iuxor(c):c.clone().iuxor(this)},a.prototype.inotn=function(c){i(typeof c=="number"&&c>=0);var h=Math.ceil(c/26)|0,m=c%26;this._expand(h),m>0&&h--;for(var _=0;_<h;_++)this.words[_]=~this.words[_]&67108863;return m>0&&(this.words[_]=~this.words[_]&67108863>>26-m),this._strip()},a.prototype.notn=function(c){return this.clone().inotn(c)},a.prototype.setn=function(c,h){i(typeof c=="number"&&c>=0);var m=c/26|0,_=c%26;return this._expand(m+1),h?this.words[m]=this.words[m]|1<<_:this.words[m]=this.words[m]&~(1<<_),this._strip()},a.prototype.iadd=function(c){var h;if(this.negative!==0&&c.negative===0)return this.negative=0,h=this.isub(c),this.negative^=1,this._normSign();if(this.negative===0&&c.negative!==0)return c.negative=0,h=this.isub(c),c.negative=1,h._normSign();var m,_;this.length>c.length?(m=this,_=c):(m=c,_=this);for(var b=0,k=0;k<_.length;k++)h=(m.words[k]|0)+(_.words[k]|0)+b,this.words[k]=h&67108863,b=h>>>26;for(;b!==0&&k<m.length;k++)h=(m.words[k]|0)+b,this.words[k]=h&67108863,b=h>>>26;if(this.length=m.length,b!==0)this.words[this.length]=b,this.length++;else if(m!==this)for(;k<m.length;k++)this.words[k]=m.words[k];return this},a.prototype.add=function(c){var h;return c.negative!==0&&this.negative===0?(c.negative=0,h=this.sub(c),c.negative^=1,h):c.negative===0&&this.negative!==0?(this.negative=0,h=c.sub(this),this.negative=1,h):this.length>c.length?this.clone().iadd(c):c.clone().iadd(this)},a.prototype.isub=function(c){if(c.negative!==0){c.negative=0;var h=this.iadd(c);return c.negative=1,h._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(c),this.negative=1,this._normSign();var m=this.cmp(c);if(m===0)return this.negative=0,this.length=1,this.words[0]=0,this;var _,b;m>0?(_=this,b=c):(_=c,b=this);for(var k=0,M=0;M<b.length;M++)h=(_.words[M]|0)-(b.words[M]|0)+k,k=h>>26,this.words[M]=h&67108863;for(;k!==0&&M<_.length;M++)h=(_.words[M]|0)+k,k=h>>26,this.words[M]=h&67108863;if(k===0&&M<_.length&&_!==this)for(;M<_.length;M++)this.words[M]=_.words[M];return this.length=Math.max(this.length,M),_!==this&&(this.negative=1),this._strip()},a.prototype.sub=function(c){return this.clone().isub(c)};function q(c,h,m){m.negative=h.negative^c.negative;var _=c.length+h.length|0;m.length=_,_=_-1|0;var b=c.words[0]|0,k=h.words[0]|0,M=b*k,y=M&67108863,d=M/67108864|0;m.words[0]=y;for(var w=1;w<_;w++){for(var $=d>>>26,N=d&67108863,Z=Math.min(w,h.length-1),X=Math.max(0,w-c.length+1);X<=Z;X++){var ee=w-X|0;b=c.words[ee]|0,k=h.words[X]|0,M=b*k+N,$+=M/67108864|0,N=M&67108863}m.words[w]=N|0,d=$|0}return d!==0?m.words[w]=d|0:m.length--,m._strip()}var A=function(c,h,m){var _=c.words,b=h.words,k=m.words,M=0,y,d,w,$=_[0]|0,N=$&8191,Z=$>>>13,X=_[1]|0,ee=X&8191,de=X>>>13,$t=_[2]|0,he=$t&8191,fe=$t>>>13,Ai=_[3]|0,_e=Ai&8191,ye=Ai>>>13,Oi=_[4]|0,be=Oi&8191,we=Oi>>>13,Ei=_[5]|0,ve=Ei&8191,ke=Ei>>>13,xi=_[6]|0,Ce=xi&8191,Te=xi>>>13,ji=_[7]|0,Me=ji&8191,Se=ji>>>13,Ii=_[8]|0,Ae=Ii&8191,Oe=Ii>>>13,Pi=_[9]|0,Ee=Pi&8191,xe=Pi>>>13,Bi=b[0]|0,je=Bi&8191,Ie=Bi>>>13,qi=b[1]|0,Pe=qi&8191,Be=qi>>>13,Ri=b[2]|0,qe=Ri&8191,Re=Ri>>>13,Di=b[3]|0,De=Di&8191,Ue=Di>>>13,Ui=b[4]|0,$e=Ui&8191,Ne=Ui>>>13,$i=b[5]|0,Fe=$i&8191,Le=$i>>>13,Ni=b[6]|0,Ve=Ni&8191,Ze=Ni>>>13,Fi=b[7]|0,ze=Fi&8191,Ge=Fi>>>13,Li=b[8]|0,We=Li&8191,He=Li>>>13,Vi=b[9]|0,Ke=Vi&8191,Qe=Vi>>>13;m.negative=c.negative^h.negative,m.length=19,y=Math.imul(N,je),d=Math.imul(N,Ie),d=d+Math.imul(Z,je)|0,w=Math.imul(Z,Ie);var Sn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Sn>>>26)|0,Sn&=67108863,y=Math.imul(ee,je),d=Math.imul(ee,Ie),d=d+Math.imul(de,je)|0,w=Math.imul(de,Ie),y=y+Math.imul(N,Pe)|0,d=d+Math.imul(N,Be)|0,d=d+Math.imul(Z,Pe)|0,w=w+Math.imul(Z,Be)|0;var An=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(An>>>26)|0,An&=67108863,y=Math.imul(he,je),d=Math.imul(he,Ie),d=d+Math.imul(fe,je)|0,w=Math.imul(fe,Ie),y=y+Math.imul(ee,Pe)|0,d=d+Math.imul(ee,Be)|0,d=d+Math.imul(de,Pe)|0,w=w+Math.imul(de,Be)|0,y=y+Math.imul(N,qe)|0,d=d+Math.imul(N,Re)|0,d=d+Math.imul(Z,qe)|0,w=w+Math.imul(Z,Re)|0;var On=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(On>>>26)|0,On&=67108863,y=Math.imul(_e,je),d=Math.imul(_e,Ie),d=d+Math.imul(ye,je)|0,w=Math.imul(ye,Ie),y=y+Math.imul(he,Pe)|0,d=d+Math.imul(he,Be)|0,d=d+Math.imul(fe,Pe)|0,w=w+Math.imul(fe,Be)|0,y=y+Math.imul(ee,qe)|0,d=d+Math.imul(ee,Re)|0,d=d+Math.imul(de,qe)|0,w=w+Math.imul(de,Re)|0,y=y+Math.imul(N,De)|0,d=d+Math.imul(N,Ue)|0,d=d+Math.imul(Z,De)|0,w=w+Math.imul(Z,Ue)|0;var En=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(En>>>26)|0,En&=67108863,y=Math.imul(be,je),d=Math.imul(be,Ie),d=d+Math.imul(we,je)|0,w=Math.imul(we,Ie),y=y+Math.imul(_e,Pe)|0,d=d+Math.imul(_e,Be)|0,d=d+Math.imul(ye,Pe)|0,w=w+Math.imul(ye,Be)|0,y=y+Math.imul(he,qe)|0,d=d+Math.imul(he,Re)|0,d=d+Math.imul(fe,qe)|0,w=w+Math.imul(fe,Re)|0,y=y+Math.imul(ee,De)|0,d=d+Math.imul(ee,Ue)|0,d=d+Math.imul(de,De)|0,w=w+Math.imul(de,Ue)|0,y=y+Math.imul(N,$e)|0,d=d+Math.imul(N,Ne)|0,d=d+Math.imul(Z,$e)|0,w=w+Math.imul(Z,Ne)|0;var xn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(xn>>>26)|0,xn&=67108863,y=Math.imul(ve,je),d=Math.imul(ve,Ie),d=d+Math.imul(ke,je)|0,w=Math.imul(ke,Ie),y=y+Math.imul(be,Pe)|0,d=d+Math.imul(be,Be)|0,d=d+Math.imul(we,Pe)|0,w=w+Math.imul(we,Be)|0,y=y+Math.imul(_e,qe)|0,d=d+Math.imul(_e,Re)|0,d=d+Math.imul(ye,qe)|0,w=w+Math.imul(ye,Re)|0,y=y+Math.imul(he,De)|0,d=d+Math.imul(he,Ue)|0,d=d+Math.imul(fe,De)|0,w=w+Math.imul(fe,Ue)|0,y=y+Math.imul(ee,$e)|0,d=d+Math.imul(ee,Ne)|0,d=d+Math.imul(de,$e)|0,w=w+Math.imul(de,Ne)|0,y=y+Math.imul(N,Fe)|0,d=d+Math.imul(N,Le)|0,d=d+Math.imul(Z,Fe)|0,w=w+Math.imul(Z,Le)|0;var jn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(jn>>>26)|0,jn&=67108863,y=Math.imul(Ce,je),d=Math.imul(Ce,Ie),d=d+Math.imul(Te,je)|0,w=Math.imul(Te,Ie),y=y+Math.imul(ve,Pe)|0,d=d+Math.imul(ve,Be)|0,d=d+Math.imul(ke,Pe)|0,w=w+Math.imul(ke,Be)|0,y=y+Math.imul(be,qe)|0,d=d+Math.imul(be,Re)|0,d=d+Math.imul(we,qe)|0,w=w+Math.imul(we,Re)|0,y=y+Math.imul(_e,De)|0,d=d+Math.imul(_e,Ue)|0,d=d+Math.imul(ye,De)|0,w=w+Math.imul(ye,Ue)|0,y=y+Math.imul(he,$e)|0,d=d+Math.imul(he,Ne)|0,d=d+Math.imul(fe,$e)|0,w=w+Math.imul(fe,Ne)|0,y=y+Math.imul(ee,Fe)|0,d=d+Math.imul(ee,Le)|0,d=d+Math.imul(de,Fe)|0,w=w+Math.imul(de,Le)|0,y=y+Math.imul(N,Ve)|0,d=d+Math.imul(N,Ze)|0,d=d+Math.imul(Z,Ve)|0,w=w+Math.imul(Z,Ze)|0;var In=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(In>>>26)|0,In&=67108863,y=Math.imul(Me,je),d=Math.imul(Me,Ie),d=d+Math.imul(Se,je)|0,w=Math.imul(Se,Ie),y=y+Math.imul(Ce,Pe)|0,d=d+Math.imul(Ce,Be)|0,d=d+Math.imul(Te,Pe)|0,w=w+Math.imul(Te,Be)|0,y=y+Math.imul(ve,qe)|0,d=d+Math.imul(ve,Re)|0,d=d+Math.imul(ke,qe)|0,w=w+Math.imul(ke,Re)|0,y=y+Math.imul(be,De)|0,d=d+Math.imul(be,Ue)|0,d=d+Math.imul(we,De)|0,w=w+Math.imul(we,Ue)|0,y=y+Math.imul(_e,$e)|0,d=d+Math.imul(_e,Ne)|0,d=d+Math.imul(ye,$e)|0,w=w+Math.imul(ye,Ne)|0,y=y+Math.imul(he,Fe)|0,d=d+Math.imul(he,Le)|0,d=d+Math.imul(fe,Fe)|0,w=w+Math.imul(fe,Le)|0,y=y+Math.imul(ee,Ve)|0,d=d+Math.imul(ee,Ze)|0,d=d+Math.imul(de,Ve)|0,w=w+Math.imul(de,Ze)|0,y=y+Math.imul(N,ze)|0,d=d+Math.imul(N,Ge)|0,d=d+Math.imul(Z,ze)|0,w=w+Math.imul(Z,Ge)|0;var Pn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Pn>>>26)|0,Pn&=67108863,y=Math.imul(Ae,je),d=Math.imul(Ae,Ie),d=d+Math.imul(Oe,je)|0,w=Math.imul(Oe,Ie),y=y+Math.imul(Me,Pe)|0,d=d+Math.imul(Me,Be)|0,d=d+Math.imul(Se,Pe)|0,w=w+Math.imul(Se,Be)|0,y=y+Math.imul(Ce,qe)|0,d=d+Math.imul(Ce,Re)|0,d=d+Math.imul(Te,qe)|0,w=w+Math.imul(Te,Re)|0,y=y+Math.imul(ve,De)|0,d=d+Math.imul(ve,Ue)|0,d=d+Math.imul(ke,De)|0,w=w+Math.imul(ke,Ue)|0,y=y+Math.imul(be,$e)|0,d=d+Math.imul(be,Ne)|0,d=d+Math.imul(we,$e)|0,w=w+Math.imul(we,Ne)|0,y=y+Math.imul(_e,Fe)|0,d=d+Math.imul(_e,Le)|0,d=d+Math.imul(ye,Fe)|0,w=w+Math.imul(ye,Le)|0,y=y+Math.imul(he,Ve)|0,d=d+Math.imul(he,Ze)|0,d=d+Math.imul(fe,Ve)|0,w=w+Math.imul(fe,Ze)|0,y=y+Math.imul(ee,ze)|0,d=d+Math.imul(ee,Ge)|0,d=d+Math.imul(de,ze)|0,w=w+Math.imul(de,Ge)|0,y=y+Math.imul(N,We)|0,d=d+Math.imul(N,He)|0,d=d+Math.imul(Z,We)|0,w=w+Math.imul(Z,He)|0;var Bn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Bn>>>26)|0,Bn&=67108863,y=Math.imul(Ee,je),d=Math.imul(Ee,Ie),d=d+Math.imul(xe,je)|0,w=Math.imul(xe,Ie),y=y+Math.imul(Ae,Pe)|0,d=d+Math.imul(Ae,Be)|0,d=d+Math.imul(Oe,Pe)|0,w=w+Math.imul(Oe,Be)|0,y=y+Math.imul(Me,qe)|0,d=d+Math.imul(Me,Re)|0,d=d+Math.imul(Se,qe)|0,w=w+Math.imul(Se,Re)|0,y=y+Math.imul(Ce,De)|0,d=d+Math.imul(Ce,Ue)|0,d=d+Math.imul(Te,De)|0,w=w+Math.imul(Te,Ue)|0,y=y+Math.imul(ve,$e)|0,d=d+Math.imul(ve,Ne)|0,d=d+Math.imul(ke,$e)|0,w=w+Math.imul(ke,Ne)|0,y=y+Math.imul(be,Fe)|0,d=d+Math.imul(be,Le)|0,d=d+Math.imul(we,Fe)|0,w=w+Math.imul(we,Le)|0,y=y+Math.imul(_e,Ve)|0,d=d+Math.imul(_e,Ze)|0,d=d+Math.imul(ye,Ve)|0,w=w+Math.imul(ye,Ze)|0,y=y+Math.imul(he,ze)|0,d=d+Math.imul(he,Ge)|0,d=d+Math.imul(fe,ze)|0,w=w+Math.imul(fe,Ge)|0,y=y+Math.imul(ee,We)|0,d=d+Math.imul(ee,He)|0,d=d+Math.imul(de,We)|0,w=w+Math.imul(de,He)|0,y=y+Math.imul(N,Ke)|0,d=d+Math.imul(N,Qe)|0,d=d+Math.imul(Z,Ke)|0,w=w+Math.imul(Z,Qe)|0;var qn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(qn>>>26)|0,qn&=67108863,y=Math.imul(Ee,Pe),d=Math.imul(Ee,Be),d=d+Math.imul(xe,Pe)|0,w=Math.imul(xe,Be),y=y+Math.imul(Ae,qe)|0,d=d+Math.imul(Ae,Re)|0,d=d+Math.imul(Oe,qe)|0,w=w+Math.imul(Oe,Re)|0,y=y+Math.imul(Me,De)|0,d=d+Math.imul(Me,Ue)|0,d=d+Math.imul(Se,De)|0,w=w+Math.imul(Se,Ue)|0,y=y+Math.imul(Ce,$e)|0,d=d+Math.imul(Ce,Ne)|0,d=d+Math.imul(Te,$e)|0,w=w+Math.imul(Te,Ne)|0,y=y+Math.imul(ve,Fe)|0,d=d+Math.imul(ve,Le)|0,d=d+Math.imul(ke,Fe)|0,w=w+Math.imul(ke,Le)|0,y=y+Math.imul(be,Ve)|0,d=d+Math.imul(be,Ze)|0,d=d+Math.imul(we,Ve)|0,w=w+Math.imul(we,Ze)|0,y=y+Math.imul(_e,ze)|0,d=d+Math.imul(_e,Ge)|0,d=d+Math.imul(ye,ze)|0,w=w+Math.imul(ye,Ge)|0,y=y+Math.imul(he,We)|0,d=d+Math.imul(he,He)|0,d=d+Math.imul(fe,We)|0,w=w+Math.imul(fe,He)|0,y=y+Math.imul(ee,Ke)|0,d=d+Math.imul(ee,Qe)|0,d=d+Math.imul(de,Ke)|0,w=w+Math.imul(de,Qe)|0;var Rn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Rn>>>26)|0,Rn&=67108863,y=Math.imul(Ee,qe),d=Math.imul(Ee,Re),d=d+Math.imul(xe,qe)|0,w=Math.imul(xe,Re),y=y+Math.imul(Ae,De)|0,d=d+Math.imul(Ae,Ue)|0,d=d+Math.imul(Oe,De)|0,w=w+Math.imul(Oe,Ue)|0,y=y+Math.imul(Me,$e)|0,d=d+Math.imul(Me,Ne)|0,d=d+Math.imul(Se,$e)|0,w=w+Math.imul(Se,Ne)|0,y=y+Math.imul(Ce,Fe)|0,d=d+Math.imul(Ce,Le)|0,d=d+Math.imul(Te,Fe)|0,w=w+Math.imul(Te,Le)|0,y=y+Math.imul(ve,Ve)|0,d=d+Math.imul(ve,Ze)|0,d=d+Math.imul(ke,Ve)|0,w=w+Math.imul(ke,Ze)|0,y=y+Math.imul(be,ze)|0,d=d+Math.imul(be,Ge)|0,d=d+Math.imul(we,ze)|0,w=w+Math.imul(we,Ge)|0,y=y+Math.imul(_e,We)|0,d=d+Math.imul(_e,He)|0,d=d+Math.imul(ye,We)|0,w=w+Math.imul(ye,He)|0,y=y+Math.imul(he,Ke)|0,d=d+Math.imul(he,Qe)|0,d=d+Math.imul(fe,Ke)|0,w=w+Math.imul(fe,Qe)|0;var Dn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Dn>>>26)|0,Dn&=67108863,y=Math.imul(Ee,De),d=Math.imul(Ee,Ue),d=d+Math.imul(xe,De)|0,w=Math.imul(xe,Ue),y=y+Math.imul(Ae,$e)|0,d=d+Math.imul(Ae,Ne)|0,d=d+Math.imul(Oe,$e)|0,w=w+Math.imul(Oe,Ne)|0,y=y+Math.imul(Me,Fe)|0,d=d+Math.imul(Me,Le)|0,d=d+Math.imul(Se,Fe)|0,w=w+Math.imul(Se,Le)|0,y=y+Math.imul(Ce,Ve)|0,d=d+Math.imul(Ce,Ze)|0,d=d+Math.imul(Te,Ve)|0,w=w+Math.imul(Te,Ze)|0,y=y+Math.imul(ve,ze)|0,d=d+Math.imul(ve,Ge)|0,d=d+Math.imul(ke,ze)|0,w=w+Math.imul(ke,Ge)|0,y=y+Math.imul(be,We)|0,d=d+Math.imul(be,He)|0,d=d+Math.imul(we,We)|0,w=w+Math.imul(we,He)|0,y=y+Math.imul(_e,Ke)|0,d=d+Math.imul(_e,Qe)|0,d=d+Math.imul(ye,Ke)|0,w=w+Math.imul(ye,Qe)|0;var Un=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Un>>>26)|0,Un&=67108863,y=Math.imul(Ee,$e),d=Math.imul(Ee,Ne),d=d+Math.imul(xe,$e)|0,w=Math.imul(xe,Ne),y=y+Math.imul(Ae,Fe)|0,d=d+Math.imul(Ae,Le)|0,d=d+Math.imul(Oe,Fe)|0,w=w+Math.imul(Oe,Le)|0,y=y+Math.imul(Me,Ve)|0,d=d+Math.imul(Me,Ze)|0,d=d+Math.imul(Se,Ve)|0,w=w+Math.imul(Se,Ze)|0,y=y+Math.imul(Ce,ze)|0,d=d+Math.imul(Ce,Ge)|0,d=d+Math.imul(Te,ze)|0,w=w+Math.imul(Te,Ge)|0,y=y+Math.imul(ve,We)|0,d=d+Math.imul(ve,He)|0,d=d+Math.imul(ke,We)|0,w=w+Math.imul(ke,He)|0,y=y+Math.imul(be,Ke)|0,d=d+Math.imul(be,Qe)|0,d=d+Math.imul(we,Ke)|0,w=w+Math.imul(we,Qe)|0;var $n=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+($n>>>26)|0,$n&=67108863,y=Math.imul(Ee,Fe),d=Math.imul(Ee,Le),d=d+Math.imul(xe,Fe)|0,w=Math.imul(xe,Le),y=y+Math.imul(Ae,Ve)|0,d=d+Math.imul(Ae,Ze)|0,d=d+Math.imul(Oe,Ve)|0,w=w+Math.imul(Oe,Ze)|0,y=y+Math.imul(Me,ze)|0,d=d+Math.imul(Me,Ge)|0,d=d+Math.imul(Se,ze)|0,w=w+Math.imul(Se,Ge)|0,y=y+Math.imul(Ce,We)|0,d=d+Math.imul(Ce,He)|0,d=d+Math.imul(Te,We)|0,w=w+Math.imul(Te,He)|0,y=y+Math.imul(ve,Ke)|0,d=d+Math.imul(ve,Qe)|0,d=d+Math.imul(ke,Ke)|0,w=w+Math.imul(ke,Qe)|0;var Nn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Nn>>>26)|0,Nn&=67108863,y=Math.imul(Ee,Ve),d=Math.imul(Ee,Ze),d=d+Math.imul(xe,Ve)|0,w=Math.imul(xe,Ze),y=y+Math.imul(Ae,ze)|0,d=d+Math.imul(Ae,Ge)|0,d=d+Math.imul(Oe,ze)|0,w=w+Math.imul(Oe,Ge)|0,y=y+Math.imul(Me,We)|0,d=d+Math.imul(Me,He)|0,d=d+Math.imul(Se,We)|0,w=w+Math.imul(Se,He)|0,y=y+Math.imul(Ce,Ke)|0,d=d+Math.imul(Ce,Qe)|0,d=d+Math.imul(Te,Ke)|0,w=w+Math.imul(Te,Qe)|0;var Fn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Fn>>>26)|0,Fn&=67108863,y=Math.imul(Ee,ze),d=Math.imul(Ee,Ge),d=d+Math.imul(xe,ze)|0,w=Math.imul(xe,Ge),y=y+Math.imul(Ae,We)|0,d=d+Math.imul(Ae,He)|0,d=d+Math.imul(Oe,We)|0,w=w+Math.imul(Oe,He)|0,y=y+Math.imul(Me,Ke)|0,d=d+Math.imul(Me,Qe)|0,d=d+Math.imul(Se,Ke)|0,w=w+Math.imul(Se,Qe)|0;var Ln=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Ln>>>26)|0,Ln&=67108863,y=Math.imul(Ee,We),d=Math.imul(Ee,He),d=d+Math.imul(xe,We)|0,w=Math.imul(xe,He),y=y+Math.imul(Ae,Ke)|0,d=d+Math.imul(Ae,Qe)|0,d=d+Math.imul(Oe,Ke)|0,w=w+Math.imul(Oe,Qe)|0;var Vn=(M+y|0)+((d&8191)<<13)|0;M=(w+(d>>>13)|0)+(Vn>>>26)|0,Vn&=67108863,y=Math.imul(Ee,Ke),d=Math.imul(Ee,Qe),d=d+Math.imul(xe,Ke)|0,w=Math.imul(xe,Qe);var Zn=(M+y|0)+((d&8191)<<13)|0;return M=(w+(d>>>13)|0)+(Zn>>>26)|0,Zn&=67108863,k[0]=Sn,k[1]=An,k[2]=On,k[3]=En,k[4]=xn,k[5]=jn,k[6]=In,k[7]=Pn,k[8]=Bn,k[9]=qn,k[10]=Rn,k[11]=Dn,k[12]=Un,k[13]=$n,k[14]=Nn,k[15]=Fn,k[16]=Ln,k[17]=Vn,k[18]=Zn,M!==0&&(k[19]=M,m.length++),m};Math.imul||(A=q);function U(c,h,m){m.negative=h.negative^c.negative,m.length=c.length+h.length;for(var _=0,b=0,k=0;k<m.length-1;k++){var M=b;b=0;for(var y=_&67108863,d=Math.min(k,h.length-1),w=Math.max(0,k-c.length+1);w<=d;w++){var $=k-w,N=c.words[$]|0,Z=h.words[w]|0,X=N*Z,ee=X&67108863;M=M+(X/67108864|0)|0,ee=ee+y|0,y=ee&67108863,M=M+(ee>>>26)|0,b+=M>>>26,M&=67108863}m.words[k]=y,_=M,M=b}return _!==0?m.words[k]=_:m.length--,m._strip()}function Q(c,h,m){return U(c,h,m)}a.prototype.mulTo=function(c,h){var m,_=this.length+c.length;return this.length===10&&c.length===10?m=A(this,c,h):_<63?m=q(this,c,h):_<1024?m=U(this,c,h):m=Q(this,c,h),m};function R(c,h){this.x=c,this.y=h}R.prototype.makeRBT=function(c){for(var h=new Array(c),m=a.prototype._countBits(c)-1,_=0;_<c;_++)h[_]=this.revBin(_,m,c);return h},R.prototype.revBin=function(c,h,m){if(c===0||c===m-1)return c;for(var _=0,b=0;b<h;b++)_|=(c&1)<<h-b-1,c>>=1;return _},R.prototype.permute=function(c,h,m,_,b,k){for(var M=0;M<k;M++)_[M]=h[c[M]],b[M]=m[c[M]]},R.prototype.transform=function(c,h,m,_,b,k){this.permute(k,c,h,m,_,b);for(var M=1;M<b;M<<=1)for(var y=M<<1,d=Math.cos(2*Math.PI/y),w=Math.sin(2*Math.PI/y),$=0;$<b;$+=y)for(var N=d,Z=w,X=0;X<M;X++){var ee=m[$+X],de=_[$+X],$t=m[$+X+M],he=_[$+X+M],fe=N*$t-Z*he;he=N*he+Z*$t,$t=fe,m[$+X]=ee+$t,_[$+X]=de+he,m[$+X+M]=ee-$t,_[$+X+M]=de-he,X!==y&&(fe=d*N-w*Z,Z=d*Z+w*N,N=fe)}},R.prototype.guessLen13b=function(c,h){var m=Math.max(h,c)|1,_=m&1,b=0;for(m=m/2|0;m;m=m>>>1)b++;return 1<<b+1+_},R.prototype.conjugate=function(c,h,m){if(!(m<=1))for(var _=0;_<m/2;_++){var b=c[_];c[_]=c[m-_-1],c[m-_-1]=b,b=h[_],h[_]=-h[m-_-1],h[m-_-1]=-b}},R.prototype.normalize13b=function(c,h){for(var m=0,_=0;_<h/2;_++){var b=Math.round(c[2*_+1]/h)*8192+Math.round(c[2*_]/h)+m;c[_]=b&67108863,b<67108864?m=0:m=b/67108864|0}return c},R.prototype.convert13b=function(c,h,m,_){for(var b=0,k=0;k<h;k++)b=b+(c[k]|0),m[2*k]=b&8191,b=b>>>13,m[2*k+1]=b&8191,b=b>>>13;for(k=2*h;k<_;++k)m[k]=0;i(b===0),i((b&-8192)===0)},R.prototype.stub=function(c){for(var h=new Array(c),m=0;m<c;m++)h[m]=0;return h},R.prototype.mulp=function(c,h,m){var _=2*this.guessLen13b(c.length,h.length),b=this.makeRBT(_),k=this.stub(_),M=new Array(_),y=new Array(_),d=new Array(_),w=new Array(_),$=new Array(_),N=new Array(_),Z=m.words;Z.length=_,this.convert13b(c.words,c.length,M,_),this.convert13b(h.words,h.length,w,_),this.transform(M,k,y,d,_,b),this.transform(w,k,$,N,_,b);for(var X=0;X<_;X++){var ee=y[X]*$[X]-d[X]*N[X];d[X]=y[X]*N[X]+d[X]*$[X],y[X]=ee}return this.conjugate(y,d,_),this.transform(y,d,Z,k,_,b),this.conjugate(Z,k,_),this.normalize13b(Z,_),m.negative=c.negative^h.negative,m.length=c.length+h.length,m._strip()},a.prototype.mul=function(c){var h=new a(null);return h.words=new Array(this.length+c.length),this.mulTo(c,h)},a.prototype.mulf=function(c){var h=new a(null);return h.words=new Array(this.length+c.length),Q(this,c,h)},a.prototype.imul=function(c){return this.clone().mulTo(c,this)},a.prototype.imuln=function(c){var h=c<0;h&&(c=-c),i(typeof c=="number"),i(c<67108864);for(var m=0,_=0;_<this.length;_++){var b=(this.words[_]|0)*c,k=(b&67108863)+(m&67108863);m>>=26,m+=b/67108864|0,m+=k>>>26,this.words[_]=k&67108863}return m!==0&&(this.words[_]=m,this.length++),this.length=c===0?1:this.length,h?this.ineg():this},a.prototype.muln=function(c){return this.clone().imuln(c)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(c){var h=x(c);if(h.length===0)return new a(1);for(var m=this,_=0;_<h.length&&h[_]===0;_++,m=m.sqr());if(++_<h.length)for(var b=m.sqr();_<h.length;_++,b=b.sqr())h[_]!==0&&(m=m.mul(b));return m},a.prototype.iushln=function(c){i(typeof c=="number"&&c>=0);var h=c%26,m=(c-h)/26,_=67108863>>>26-h<<26-h,b;if(h!==0){var k=0;for(b=0;b<this.length;b++){var M=this.words[b]&_,y=(this.words[b]|0)-M<<h;this.words[b]=y|k,k=M>>>26-h}k&&(this.words[b]=k,this.length++)}if(m!==0){for(b=this.length-1;b>=0;b--)this.words[b+m]=this.words[b];for(b=0;b<m;b++)this.words[b]=0;this.length+=m}return this._strip()},a.prototype.ishln=function(c){return i(this.negative===0),this.iushln(c)},a.prototype.iushrn=function(c,h,m){i(typeof c=="number"&&c>=0);var _;h?_=(h-h%26)/26:_=0;var b=c%26,k=Math.min((c-b)/26,this.length),M=67108863^67108863>>>b<<b,y=m;if(_-=k,_=Math.max(0,_),y){for(var d=0;d<k;d++)y.words[d]=this.words[d];y.length=k}if(k!==0)if(this.length>k)for(this.length-=k,d=0;d<this.length;d++)this.words[d]=this.words[d+k];else this.words[0]=0,this.length=1;var w=0;for(d=this.length-1;d>=0&&(w!==0||d>=_);d--){var $=this.words[d]|0;this.words[d]=w<<26-b|$>>>b,w=$&M}return y&&w!==0&&(y.words[y.length++]=w),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},a.prototype.ishrn=function(c,h,m){return i(this.negative===0),this.iushrn(c,h,m)},a.prototype.shln=function(c){return this.clone().ishln(c)},a.prototype.ushln=function(c){return this.clone().iushln(c)},a.prototype.shrn=function(c){return this.clone().ishrn(c)},a.prototype.ushrn=function(c){return this.clone().iushrn(c)},a.prototype.testn=function(c){i(typeof c=="number"&&c>=0);var h=c%26,m=(c-h)/26,_=1<<h;if(this.length<=m)return!1;var b=this.words[m];return!!(b&_)},a.prototype.imaskn=function(c){i(typeof c=="number"&&c>=0);var h=c%26,m=(c-h)/26;if(i(this.negative===0,"imaskn works only with positive numbers"),this.length<=m)return this;if(h!==0&&m++,this.length=Math.min(m,this.length),h!==0){var _=67108863^67108863>>>h<<h;this.words[this.length-1]&=_}return this.length===0&&(this.words[0]=0,this.length=1),this._strip()},a.prototype.maskn=function(c){return this.clone().imaskn(c)},a.prototype.iaddn=function(c){return i(typeof c=="number"),i(c<67108864),c<0?this.isubn(-c):this.negative!==0?this.length===1&&(this.words[0]|0)<=c?(this.words[0]=c-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(c),this.negative=1,this):this._iaddn(c)},a.prototype._iaddn=function(c){this.words[0]+=c;for(var h=0;h<this.length&&this.words[h]>=67108864;h++)this.words[h]-=67108864,h===this.length-1?this.words[h+1]=1:this.words[h+1]++;return this.length=Math.max(this.length,h+1),this},a.prototype.isubn=function(c){if(i(typeof c=="number"),i(c<67108864),c<0)return this.iaddn(-c);if(this.negative!==0)return this.negative=0,this.iaddn(c),this.negative=1,this;if(this.words[0]-=c,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var h=0;h<this.length&&this.words[h]<0;h++)this.words[h]+=67108864,this.words[h+1]-=1;return this._strip()},a.prototype.addn=function(c){return this.clone().iaddn(c)},a.prototype.subn=function(c){return this.clone().isubn(c)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(c,h,m){var _=c.length+m,b;this._expand(_);var k,M=0;for(b=0;b<c.length;b++){k=(this.words[b+m]|0)+M;var y=(c.words[b]|0)*h;k-=y&67108863,M=(k>>26)-(y/67108864|0),this.words[b+m]=k&67108863}for(;b<this.length-m;b++)k=(this.words[b+m]|0)+M,M=k>>26,this.words[b+m]=k&67108863;if(M===0)return this._strip();for(i(M===-1),M=0,b=0;b<this.length;b++)k=-(this.words[b]|0)+M,M=k>>26,this.words[b]=k&67108863;return this.negative=1,this._strip()},a.prototype._wordDiv=function(c,h){var m=this.length-c.length,_=this.clone(),b=c,k=b.words[b.length-1]|0,M=this._countBits(k);m=26-M,m!==0&&(b=b.ushln(m),_.iushln(m),k=b.words[b.length-1]|0);var y=_.length-b.length,d;if(h!=="mod"){d=new a(null),d.length=y+1,d.words=new Array(d.length);for(var w=0;w<d.length;w++)d.words[w]=0}var $=_.clone()._ishlnsubmul(b,1,y);$.negative===0&&(_=$,d&&(d.words[y]=1));for(var N=y-1;N>=0;N--){var Z=(_.words[b.length+N]|0)*67108864+(_.words[b.length+N-1]|0);for(Z=Math.min(Z/k|0,67108863),_._ishlnsubmul(b,Z,N);_.negative!==0;)Z--,_.negative=0,_._ishlnsubmul(b,1,N),_.isZero()||(_.negative^=1);d&&(d.words[N]=Z)}return d&&d._strip(),_._strip(),h!=="div"&&m!==0&&_.iushrn(m),{div:d||null,mod:_}},a.prototype.divmod=function(c,h,m){if(i(!c.isZero()),this.isZero())return{div:new a(0),mod:new a(0)};var _,b,k;return this.negative!==0&&c.negative===0?(k=this.neg().divmod(c,h),h!=="mod"&&(_=k.div.neg()),h!=="div"&&(b=k.mod.neg(),m&&b.negative!==0&&b.iadd(c)),{div:_,mod:b}):this.negative===0&&c.negative!==0?(k=this.divmod(c.neg(),h),h!=="mod"&&(_=k.div.neg()),{div:_,mod:k.mod}):this.negative&c.negative?(k=this.neg().divmod(c.neg(),h),h!=="div"&&(b=k.mod.neg(),m&&b.negative!==0&&b.isub(c)),{div:k.div,mod:b}):c.length>this.length||this.cmp(c)<0?{div:new a(0),mod:this}:c.length===1?h==="div"?{div:this.divn(c.words[0]),mod:null}:h==="mod"?{div:null,mod:new a(this.modrn(c.words[0]))}:{div:this.divn(c.words[0]),mod:new a(this.modrn(c.words[0]))}:this._wordDiv(c,h)},a.prototype.div=function(c){return this.divmod(c,"div",!1).div},a.prototype.mod=function(c){return this.divmod(c,"mod",!1).mod},a.prototype.umod=function(c){return this.divmod(c,"mod",!0).mod},a.prototype.divRound=function(c){var h=this.divmod(c);if(h.mod.isZero())return h.div;var m=h.div.negative!==0?h.mod.isub(c):h.mod,_=c.ushrn(1),b=c.andln(1),k=m.cmp(_);return k<0||b===1&&k===0?h.div:h.div.negative!==0?h.div.isubn(1):h.div.iaddn(1)},a.prototype.modrn=function(c){var h=c<0;h&&(c=-c),i(c<=67108863);for(var m=(1<<26)%c,_=0,b=this.length-1;b>=0;b--)_=(m*_+(this.words[b]|0))%c;return h?-_:_},a.prototype.modn=function(c){return this.modrn(c)},a.prototype.idivn=function(c){var h=c<0;h&&(c=-c),i(c<=67108863);for(var m=0,_=this.length-1;_>=0;_--){var b=(this.words[_]|0)+m*67108864;this.words[_]=b/c|0,m=b%c}return this._strip(),h?this.ineg():this},a.prototype.divn=function(c){return this.clone().idivn(c)},a.prototype.egcd=function(c){i(c.negative===0),i(!c.isZero());var h=this,m=c.clone();h.negative!==0?h=h.umod(c):h=h.clone();for(var _=new a(1),b=new a(0),k=new a(0),M=new a(1),y=0;h.isEven()&&m.isEven();)h.iushrn(1),m.iushrn(1),++y;for(var d=m.clone(),w=h.clone();!h.isZero();){for(var $=0,N=1;!(h.words[0]&N)&&$<26;++$,N<<=1);if($>0)for(h.iushrn($);$-- >0;)(_.isOdd()||b.isOdd())&&(_.iadd(d),b.isub(w)),_.iushrn(1),b.iushrn(1);for(var Z=0,X=1;!(m.words[0]&X)&&Z<26;++Z,X<<=1);if(Z>0)for(m.iushrn(Z);Z-- >0;)(k.isOdd()||M.isOdd())&&(k.iadd(d),M.isub(w)),k.iushrn(1),M.iushrn(1);h.cmp(m)>=0?(h.isub(m),_.isub(k),b.isub(M)):(m.isub(h),k.isub(_),M.isub(b))}return{a:k,b:M,gcd:m.iushln(y)}},a.prototype._invmp=function(c){i(c.negative===0),i(!c.isZero());var h=this,m=c.clone();h.negative!==0?h=h.umod(c):h=h.clone();for(var _=new a(1),b=new a(0),k=m.clone();h.cmpn(1)>0&&m.cmpn(1)>0;){for(var M=0,y=1;!(h.words[0]&y)&&M<26;++M,y<<=1);if(M>0)for(h.iushrn(M);M-- >0;)_.isOdd()&&_.iadd(k),_.iushrn(1);for(var d=0,w=1;!(m.words[0]&w)&&d<26;++d,w<<=1);if(d>0)for(m.iushrn(d);d-- >0;)b.isOdd()&&b.iadd(k),b.iushrn(1);h.cmp(m)>=0?(h.isub(m),_.isub(b)):(m.isub(h),b.isub(_))}var $;return h.cmpn(1)===0?$=_:$=b,$.cmpn(0)<0&&$.iadd(c),$},a.prototype.gcd=function(c){if(this.isZero())return c.abs();if(c.isZero())return this.abs();var h=this.clone(),m=c.clone();h.negative=0,m.negative=0;for(var _=0;h.isEven()&&m.isEven();_++)h.iushrn(1),m.iushrn(1);do{for(;h.isEven();)h.iushrn(1);for(;m.isEven();)m.iushrn(1);var b=h.cmp(m);if(b<0){var k=h;h=m,m=k}else if(b===0||m.cmpn(1)===0)break;h.isub(m)}while(!0);return m.iushln(_)},a.prototype.invm=function(c){return this.egcd(c).a.umod(c)},a.prototype.isEven=function(){return(this.words[0]&1)===0},a.prototype.isOdd=function(){return(this.words[0]&1)===1},a.prototype.andln=function(c){return this.words[0]&c},a.prototype.bincn=function(c){i(typeof c=="number");var h=c%26,m=(c-h)/26,_=1<<h;if(this.length<=m)return this._expand(m+1),this.words[m]|=_,this;for(var b=_,k=m;b!==0&&k<this.length;k++){var M=this.words[k]|0;M+=b,b=M>>>26,M&=67108863,this.words[k]=M}return b!==0&&(this.words[k]=b,this.length++),this},a.prototype.isZero=function(){return this.length===1&&this.words[0]===0},a.prototype.cmpn=function(c){var h=c<0;if(this.negative!==0&&!h)return-1;if(this.negative===0&&h)return 1;this._strip();var m;if(this.length>1)m=1;else{h&&(c=-c),i(c<=67108863,"Number is too big");var _=this.words[0]|0;m=_===c?0:_<c?-1:1}return this.negative!==0?-m|0:m},a.prototype.cmp=function(c){if(this.negative!==0&&c.negative===0)return-1;if(this.negative===0&&c.negative!==0)return 1;var h=this.ucmp(c);return this.negative!==0?-h|0:h},a.prototype.ucmp=function(c){if(this.length>c.length)return 1;if(this.length<c.length)return-1;for(var h=0,m=this.length-1;m>=0;m--){var _=this.words[m]|0,b=c.words[m]|0;if(_!==b){_<b?h=-1:_>b&&(h=1);break}}return h},a.prototype.gtn=function(c){return this.cmpn(c)===1},a.prototype.gt=function(c){return this.cmp(c)===1},a.prototype.gten=function(c){return this.cmpn(c)>=0},a.prototype.gte=function(c){return this.cmp(c)>=0},a.prototype.ltn=function(c){return this.cmpn(c)===-1},a.prototype.lt=function(c){return this.cmp(c)===-1},a.prototype.lten=function(c){return this.cmpn(c)<=0},a.prototype.lte=function(c){return this.cmp(c)<=0},a.prototype.eqn=function(c){return this.cmpn(c)===0},a.prototype.eq=function(c){return this.cmp(c)===0},a.red=function(c){return new le(c)},a.prototype.toRed=function(c){return i(!this.red,"Already a number in reduction context"),i(this.negative===0,"red works only with positives"),c.convertTo(this)._forceRed(c)},a.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(c){return this.red=c,this},a.prototype.forceRed=function(c){return i(!this.red,"Already a number in reduction context"),this._forceRed(c)},a.prototype.redAdd=function(c){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,c)},a.prototype.redIAdd=function(c){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,c)},a.prototype.redSub=function(c){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,c)},a.prototype.redISub=function(c){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,c)},a.prototype.redShl=function(c){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,c)},a.prototype.redMul=function(c){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,c),this.red.mul(this,c)},a.prototype.redIMul=function(c){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,c),this.red.imul(this,c)},a.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(c){return i(this.red&&!c.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,c)};var ne={k256:null,p224:null,p192:null,p25519:null};function ie(c,h){this.name=c,this.p=new a(h,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}ie.prototype._tmp=function(){var c=new a(null);return c.words=new Array(Math.ceil(this.n/13)),c},ie.prototype.ireduce=function(c){var h=c,m;do this.split(h,this.tmp),h=this.imulK(h),h=h.iadd(this.tmp),m=h.bitLength();while(m>this.n);var _=m<this.n?-1:h.ucmp(this.p);return _===0?(h.words[0]=0,h.length=1):_>0?h.isub(this.p):h.strip!==void 0?h.strip():h._strip(),h},ie.prototype.split=function(c,h){c.iushrn(this.n,0,h)},ie.prototype.imulK=function(c){return c.imul(this.k)};function ue(){ie.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(ue,ie),ue.prototype.split=function(c,h){for(var m=4194303,_=Math.min(c.length,9),b=0;b<_;b++)h.words[b]=c.words[b];if(h.length=_,c.length<=9){c.words[0]=0,c.length=1;return}var k=c.words[9];for(h.words[h.length++]=k&m,b=10;b<c.length;b++){var M=c.words[b]|0;c.words[b-10]=(M&m)<<4|k>>>22,k=M}k>>>=22,c.words[b-10]=k,k===0&&c.length>10?c.length-=10:c.length-=9},ue.prototype.imulK=function(c){c.words[c.length]=0,c.words[c.length+1]=0,c.length+=2;for(var h=0,m=0;m<c.length;m++){var _=c.words[m]|0;h+=_*977,c.words[m]=h&67108863,h=_*64+(h/67108864|0)}return c.words[c.length-1]===0&&(c.length--,c.words[c.length-1]===0&&c.length--),c};function oe(){ie.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}s(oe,ie);function Je(){ie.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}s(Je,ie);function ut(){ie.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}s(ut,ie),ut.prototype.imulK=function(c){for(var h=0,m=0;m<c.length;m++){var _=(c.words[m]|0)*19+h,b=_&67108863;_>>>=26,c.words[m]=b,h=_}return h!==0&&(c.words[c.length++]=h),c},a._prime=function(c){if(ne[c])return ne[c];var h;if(c==="k256")h=new ue;else if(c==="p224")h=new oe;else if(c==="p192")h=new Je;else if(c==="p25519")h=new ut;else throw new Error("Unknown prime "+c);return ne[c]=h,h};function le(c){if(typeof c=="string"){var h=a._prime(c);this.m=h.p,this.prime=h}else i(c.gtn(1),"modulus must be greater than 1"),this.m=c,this.prime=null}le.prototype._verify1=function(c){i(c.negative===0,"red works only with positives"),i(c.red,"red works only with red numbers")},le.prototype._verify2=function(c,h){i((c.negative|h.negative)===0,"red works only with positives"),i(c.red&&c.red===h.red,"red works only with red numbers")},le.prototype.imod=function(c){return this.prime?this.prime.ireduce(c)._forceRed(this):(p(c,c.umod(this.m)._forceRed(this)),c)},le.prototype.neg=function(c){return c.isZero()?c.clone():this.m.sub(c)._forceRed(this)},le.prototype.add=function(c,h){this._verify2(c,h);var m=c.add(h);return m.cmp(this.m)>=0&&m.isub(this.m),m._forceRed(this)},le.prototype.iadd=function(c,h){this._verify2(c,h);var m=c.iadd(h);return m.cmp(this.m)>=0&&m.isub(this.m),m},le.prototype.sub=function(c,h){this._verify2(c,h);var m=c.sub(h);return m.cmpn(0)<0&&m.iadd(this.m),m._forceRed(this)},le.prototype.isub=function(c,h){this._verify2(c,h);var m=c.isub(h);return m.cmpn(0)<0&&m.iadd(this.m),m},le.prototype.shl=function(c,h){return this._verify1(c),this.imod(c.ushln(h))},le.prototype.imul=function(c,h){return this._verify2(c,h),this.imod(c.imul(h))},le.prototype.mul=function(c,h){return this._verify2(c,h),this.imod(c.mul(h))},le.prototype.isqr=function(c){return this.imul(c,c.clone())},le.prototype.sqr=function(c){return this.mul(c,c)},le.prototype.sqrt=function(c){if(c.isZero())return c.clone();var h=this.m.andln(3);if(i(h%2===1),h===3){var m=this.m.add(new a(1)).iushrn(2);return this.pow(c,m)}for(var _=this.m.subn(1),b=0;!_.isZero()&&_.andln(1)===0;)b++,_.iushrn(1);i(!_.isZero());var k=new a(1).toRed(this),M=k.redNeg(),y=this.m.subn(1).iushrn(1),d=this.m.bitLength();for(d=new a(2*d*d).toRed(this);this.pow(d,y).cmp(M)!==0;)d.redIAdd(M);for(var w=this.pow(d,_),$=this.pow(c,_.addn(1).iushrn(1)),N=this.pow(c,_),Z=b;N.cmp(k)!==0;){for(var X=N,ee=0;X.cmp(k)!==0;ee++)X=X.redSqr();i(ee<Z);var de=this.pow(w,new a(1).iushln(Z-ee-1));$=$.redMul(de),w=de.redSqr(),N=N.redMul(w),Z=ee}return $},le.prototype.invm=function(c){var h=c._invmp(this.m);return h.negative!==0?(h.negative=0,this.imod(h).redNeg()):this.imod(h)},le.prototype.pow=function(c,h){if(h.isZero())return new a(1).toRed(this);if(h.cmpn(1)===0)return c.clone();var m=4,_=new Array(1<<m);_[0]=new a(1).toRed(this),_[1]=c;for(var b=2;b<_.length;b++)_[b]=this.mul(_[b-1],c);var k=_[0],M=0,y=0,d=h.bitLength()%26;for(d===0&&(d=26),b=h.length-1;b>=0;b--){for(var w=h.words[b],$=d-1;$>=0;$--){var N=w>>$&1;if(k!==_[0]&&(k=this.sqr(k)),N===0&&M===0){y=0;continue}M<<=1,M|=N,y++,!(y!==m&&(b!==0||$!==0))&&(k=this.mul(k,_[M]),y=0,M=0)}d=26}return k},le.prototype.convertTo=function(c){var h=c.umod(this.m);return h===c?h.clone():h},le.prototype.convertFrom=function(c){var h=c.clone();return h.red=null,h},a.mont=function(c){return new gt(c)};function gt(c){le.call(this,c),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new a(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)}s(gt,le),gt.prototype.convertTo=function(c){return this.imod(c.ushln(this.shift))},gt.prototype.convertFrom=function(c){var h=this.imod(c.mul(this.rinv));return h.red=null,h},gt.prototype.imul=function(c,h){if(c.isZero()||h.isZero())return c.words[0]=0,c.length=1,c;var m=c.imul(h),_=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),b=m.isub(_).iushrn(this.shift),k=b;return b.cmp(this.m)>=0?k=b.isub(this.m):b.cmpn(0)<0&&(k=b.iadd(this.m)),k._forceRed(this)},gt.prototype.mul=function(c,h){if(c.isZero()||h.isZero())return new a(0)._forceRed(this);var m=c.mul(h),_=m.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),b=m.isub(_).iushrn(this.shift),k=b;return b.cmp(this.m)>=0?k=b.isub(this.m):b.cmpn(0)<0&&(k=b.iadd(this.m)),k._forceRed(this)},gt.prototype.invm=function(c){var h=this.imod(c._invmp(this.m).mul(this.r2));return h._forceRed(this)}})(typeof e>"u"||e,n)}),cc={REQUEST_PARAMS:"requestParams",METHOD_NAME:"methodName"},uc=class Rs extends Error{constructor(e,t,r){super(e),this.code=t,this.details=r,this.name=this.constructor.name}static{this.DETAILS_KEYS=cc}toJSON(){return{name:this.name,message:this.message,code:this.code,details:this.details}}toString(){return JSON.stringify(this.toJSON())}static isErrorCode(e,t){return e instanceof Rs&&e.code===t}},lc=class extends uc{constructor(n,e,t){super(n,e||"UnknownError",t)}static isCommonErrorCode(n,e){return this.isErrorCode(n,e)}},Ts=(n,e,t)=>{throw new lc(e,n,t)};function Ms(n){return Date.parse(new Date().toString())+n}var dc=class{constructor(n,e=0){this.overdue_time=e,this.value=n}isValid(){return this.value===null?!1:this.overdue_time===0?!0:!(Date.parse(new Date().toString())>this.overdue_time)}},Er=9e15,Kt=1e9,ui="0123456789abcdef",dn="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",hn="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",li={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Er,maxE:Er,crypto:!1},Us,Dt,K=!0,mn="[DecimalError] ",Ht=mn+"Invalid argument: ",$s=mn+"Precision limit exceeded",Ns=mn+"crypto unavailable",Fs="[object Decimal]",at=Math.floor,tt=Math.pow,hc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,pc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,fc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ls=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,bt=1e7,G=7,mc=9007199254740991,gc=dn.length-1,di=hn.length-1,O={toStringTag:Fs};O.absoluteValue=O.abs=function(){var n=new this.constructor(this);return n.s<0&&(n.s=1),F(n)};O.ceil=function(){return F(new this.constructor(this),this.e+1,2)};O.clampedTo=O.clamp=function(n,e){var t,r=this,i=r.constructor;if(n=new i(n),e=new i(e),!n.s||!e.s)return new i(NaN);if(n.gt(e))throw Error(Ht+e);return t=r.cmp(n),t<0?n:r.cmp(e)>0?e:new i(r)};O.comparedTo=O.cmp=function(n){var e,t,r,i,s=this,a=s.d,o=(n=new s.constructor(n)).d,u=s.s,l=n.s;if(!a||!o)return!u||!l?NaN:u!==l?u:a===o?0:!a^u<0?1:-1;if(!a[0]||!o[0])return a[0]?u:o[0]?-l:0;if(u!==l)return u;if(s.e!==n.e)return s.e>n.e^u<0?1:-1;for(r=a.length,i=o.length,e=0,t=r<i?r:i;e<t;++e)if(a[e]!==o[e])return a[e]>o[e]^u<0?1:-1;return r===i?0:r>i^u<0?1:-1};O.cosine=O.cos=function(){var n,e,t=this,r=t.constructor;return t.d?t.d[0]?(n=r.precision,e=r.rounding,r.precision=n+Math.max(t.e,t.sd())+G,r.rounding=1,t=_c(r,Ws(r,t)),r.precision=n,r.rounding=e,F(Dt==2||Dt==3?t.neg():t,n,e,!0)):new r(1):new r(NaN)};O.cubeRoot=O.cbrt=function(){var n,e,t,r,i,s,a,o,u,l,f=this,p=f.constructor;if(!f.isFinite()||f.isZero())return new p(f);for(K=!1,s=f.s*tt(f.s*f,1/3),!s||Math.abs(s)==1/0?(t=nt(f.d),n=f.e,(s=(n-t.length+1)%3)&&(t+=s==1||s==-2?"0":"00"),s=tt(t,1/3),n=at((n+1)/3)-(n%3==(n<0?-1:2)),s==1/0?t="5e"+n:(t=s.toExponential(),t=t.slice(0,t.indexOf("e")+1)+n),r=new p(t),r.s=f.s):r=new p(s.toString()),a=(n=p.precision)+3;;)if(o=r,u=o.times(o).times(o),l=u.plus(f),r=ce(l.plus(f).times(o),l.plus(u),a+2,1),nt(o.d).slice(0,a)===(t=nt(r.d)).slice(0,a))if(t=t.slice(a-3,a+1),t=="9999"||!i&&t=="4999"){if(!i&&(F(o,n+1,0),o.times(o).times(o).eq(f))){r=o;break}a+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(F(r,n+1,1),e=!r.times(r).times(r).eq(f));break}return K=!0,F(r,n,p.rounding,e)};O.decimalPlaces=O.dp=function(){var n,e=this.d,t=NaN;if(e){if(n=e.length-1,t=(n-at(this.e/G))*G,n=e[n],n)for(;n%10==0;n/=10)t--;t<0&&(t=0)}return t};O.dividedBy=O.div=function(n){return ce(this,new this.constructor(n))};O.dividedToIntegerBy=O.divToInt=function(n){var e=this,t=e.constructor;return F(ce(e,new t(n),0,1,1),t.precision,t.rounding)};O.equals=O.eq=function(n){return this.cmp(n)===0};O.floor=function(){return F(new this.constructor(this),this.e+1,3)};O.greaterThan=O.gt=function(n){return this.cmp(n)>0};O.greaterThanOrEqualTo=O.gte=function(n){var e=this.cmp(n);return e==1||e===0};O.hyperbolicCosine=O.cosh=function(){var n,e,t,r,i,s=this,a=s.constructor,o=new a(1);if(!s.isFinite())return new a(s.s?1/0:NaN);if(s.isZero())return o;t=a.precision,r=a.rounding,a.precision=t+Math.max(s.e,s.sd())+4,a.rounding=1,i=s.d.length,i<32?(n=Math.ceil(i/3),e=(1/_n(4,n)).toString()):(n=16,e="2.3283064365386962890625e-10"),s=jr(a,1,s.times(e),new a(1),!0);for(var u,l=n,f=new a(8);l--;)u=s.times(s),s=o.minus(u.times(f.minus(u.times(f))));return F(s,a.precision=t,a.rounding=r,!0)};O.hyperbolicSine=O.sinh=function(){var n,e,t,r,i=this,s=i.constructor;if(!i.isFinite()||i.isZero())return new s(i);if(e=s.precision,t=s.rounding,s.precision=e+Math.max(i.e,i.sd())+4,s.rounding=1,r=i.d.length,r<3)i=jr(s,2,i,i,!0);else{n=1.4*Math.sqrt(r),n=n>16?16:n|0,i=i.times(1/_n(5,n)),i=jr(s,2,i,i,!0);for(var a,o=new s(5),u=new s(16),l=new s(20);n--;)a=i.times(i),i=i.times(o.plus(a.times(u.times(a).plus(l))))}return s.precision=e,s.rounding=t,F(i,e,t,!0)};O.hyperbolicTangent=O.tanh=function(){var n,e,t=this,r=t.constructor;return t.isFinite()?t.isZero()?new r(t):(n=r.precision,e=r.rounding,r.precision=n+7,r.rounding=1,ce(t.sinh(),t.cosh(),r.precision=n,r.rounding=e)):new r(t.s)};O.inverseCosine=O.acos=function(){var n=this,e=n.constructor,t=n.abs().cmp(1),r=e.precision,i=e.rounding;return t!==-1?t===0?n.isNeg()?At(e,r,i):new e(0):new e(NaN):n.isZero()?At(e,r+4,i).times(.5):(e.precision=r+6,e.rounding=1,n=new e(1).minus(n).div(n.plus(1)).sqrt().atan(),e.precision=r,e.rounding=i,n.times(2))};O.inverseHyperbolicCosine=O.acosh=function(){var n,e,t=this,r=t.constructor;return t.lte(1)?new r(t.eq(1)?0:NaN):t.isFinite()?(n=r.precision,e=r.rounding,r.precision=n+Math.max(Math.abs(t.e),t.sd())+4,r.rounding=1,K=!1,t=t.times(t).minus(1).sqrt().plus(t),K=!0,r.precision=n,r.rounding=e,t.ln()):new r(t)};O.inverseHyperbolicSine=O.asinh=function(){var n,e,t=this,r=t.constructor;return!t.isFinite()||t.isZero()?new r(t):(n=r.precision,e=r.rounding,r.precision=n+2*Math.max(Math.abs(t.e),t.sd())+6,r.rounding=1,K=!1,t=t.times(t).plus(1).sqrt().plus(t),K=!0,r.precision=n,r.rounding=e,t.ln())};O.inverseHyperbolicTangent=O.atanh=function(){var n,e,t,r,i=this,s=i.constructor;return i.isFinite()?i.e>=0?new s(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(n=s.precision,e=s.rounding,r=i.sd(),Math.max(r,n)<2*-i.e-1?F(new s(i),n,e,!0):(s.precision=t=r-i.e,i=ce(i.plus(1),new s(1).minus(i),t+n,1),s.precision=n+4,s.rounding=1,i=i.ln(),s.precision=n,s.rounding=e,i.times(.5))):new s(NaN)};O.inverseSine=O.asin=function(){var n,e,t,r,i=this,s=i.constructor;return i.isZero()?new s(i):(e=i.abs().cmp(1),t=s.precision,r=s.rounding,e!==-1?e===0?(n=At(s,t+4,r).times(.5),n.s=i.s,n):new s(NaN):(s.precision=t+6,s.rounding=1,i=i.div(new s(1).minus(i.times(i)).sqrt().plus(1)).atan(),s.precision=t,s.rounding=r,i.times(2)))};O.inverseTangent=O.atan=function(){var n,e,t,r,i,s,a,o,u,l=this,f=l.constructor,p=f.precision,g=f.rounding;if(l.isFinite()){if(l.isZero())return new f(l);if(l.abs().eq(1)&&p+4<=di)return a=At(f,p+4,g).times(.25),a.s=l.s,a}else{if(!l.s)return new f(NaN);if(p+4<=di)return a=At(f,p+4,g).times(.5),a.s=l.s,a}for(f.precision=o=p+10,f.rounding=1,t=Math.min(28,o/G+2|0),n=t;n;--n)l=l.div(l.times(l).plus(1).sqrt().plus(1));for(K=!1,e=Math.ceil(o/G),r=1,u=l.times(l),a=new f(l),i=l;n!==-1;)if(i=i.times(u),s=a.minus(i.div(r+=2)),i=i.times(u),a=s.plus(i.div(r+=2)),a.d[e]!==void 0)for(n=e;a.d[n]===s.d[n]&&n--;);return t&&(a=a.times(2<<t-1)),K=!0,F(a,f.precision=p,f.rounding=g,!0)};O.isFinite=function(){return!!this.d};O.isInteger=O.isInt=function(){return!!this.d&&at(this.e/G)>this.d.length-2};O.isNaN=function(){return!this.s};O.isNegative=O.isNeg=function(){return this.s<0};O.isPositive=O.isPos=function(){return this.s>0};O.isZero=function(){return!!this.d&&this.d[0]===0};O.lessThan=O.lt=function(n){return this.cmp(n)<0};O.lessThanOrEqualTo=O.lte=function(n){return this.cmp(n)<1};O.logarithm=O.log=function(n){var e,t,r,i,s,a,o,u,l=this,f=l.constructor,p=f.precision,g=f.rounding,v=5;if(n==null)n=new f(10),e=!0;else{if(n=new f(n),t=n.d,n.s<0||!t||!t[0]||n.eq(1))return new f(NaN);e=n.eq(10)}if(t=l.d,l.s<0||!t||!t[0]||l.eq(1))return new f(t&&!t[0]?-1/0:l.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)s=!0;else{for(i=t[0];i%10===0;)i/=10;s=i!==1}if(K=!1,o=p+v,a=Wt(l,o),r=e?pn(f,o+10):Wt(n,o),u=ce(a,r,o,1),zr(u.d,i=p,g))do if(o+=10,a=Wt(l,o),r=e?pn(f,o+10):Wt(n,o),u=ce(a,r,o,1),!s){+nt(u.d).slice(i+1,i+15)+1==1e14&&(u=F(u,p+1,0));break}while(zr(u.d,i+=10,g));return K=!0,F(u,p,g)};O.minus=O.sub=function(n){var e,t,r,i,s,a,o,u,l,f,p,g,v=this,C=v.constructor;if(n=new C(n),!v.d||!n.d)return!v.s||!n.s?n=new C(NaN):v.d?n.s=-n.s:n=new C(n.d||v.s!==n.s?v:NaN),n;if(v.s!=n.s)return n.s=-n.s,v.plus(n);if(l=v.d,g=n.d,o=C.precision,u=C.rounding,!l[0]||!g[0]){if(g[0])n.s=-n.s;else if(l[0])n=new C(v);else return new C(u===3?-0:0);return K?F(n,o,u):n}if(t=at(n.e/G),f=at(v.e/G),l=l.slice(),s=f-t,s){for(p=s<0,p?(e=l,s=-s,a=g.length):(e=g,t=f,a=l.length),r=Math.max(Math.ceil(o/G),a)+2,s>r&&(s=r,e.length=1),e.reverse(),r=s;r--;)e.push(0);e.reverse()}else{for(r=l.length,a=g.length,p=r<a,p&&(a=r),r=0;r<a;r++)if(l[r]!=g[r]){p=l[r]<g[r];break}s=0}for(p&&(e=l,l=g,g=e,n.s=-n.s),a=l.length,r=g.length-a;r>0;--r)l[a++]=0;for(r=g.length;r>s;){if(l[--r]<g[r]){for(i=r;i&&l[--i]===0;)l[i]=bt-1;--l[i],l[r]+=bt}l[r]-=g[r]}for(;l[--a]===0;)l.pop();for(;l[0]===0;l.shift())--t;return l[0]?(n.d=l,n.e=gn(l,t),K?F(n,o,u):n):new C(u===3?-0:0)};O.modulo=O.mod=function(n){var e,t=this,r=t.constructor;return n=new r(n),!t.d||!n.s||n.d&&!n.d[0]?new r(NaN):!n.d||t.d&&!t.d[0]?F(new r(t),r.precision,r.rounding):(K=!1,r.modulo==9?(e=ce(t,n.abs(),0,3,1),e.s*=n.s):e=ce(t,n,0,r.modulo,1),e=e.times(n),K=!0,t.minus(e))};O.naturalExponential=O.exp=function(){return hi(this)};O.naturalLogarithm=O.ln=function(){return Wt(this)};O.negated=O.neg=function(){var n=new this.constructor(this);return n.s=-n.s,F(n)};O.plus=O.add=function(n){var e,t,r,i,s,a,o,u,l,f,p=this,g=p.constructor;if(n=new g(n),!p.d||!n.d)return!p.s||!n.s?n=new g(NaN):p.d||(n=new g(n.d||p.s===n.s?p:NaN)),n;if(p.s!=n.s)return n.s=-n.s,p.minus(n);if(l=p.d,f=n.d,o=g.precision,u=g.rounding,!l[0]||!f[0])return f[0]||(n=new g(p)),K?F(n,o,u):n;if(s=at(p.e/G),r=at(n.e/G),l=l.slice(),i=s-r,i){for(i<0?(t=l,i=-i,a=f.length):(t=f,r=s,a=l.length),s=Math.ceil(o/G),a=s>a?s+1:a+1,i>a&&(i=a,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(a=l.length,i=f.length,a-i<0&&(i=a,t=f,f=l,l=t),e=0;i;)e=(l[--i]=l[i]+f[i]+e)/bt|0,l[i]%=bt;for(e&&(l.unshift(e),++r),a=l.length;l[--a]==0;)l.pop();return n.d=l,n.e=gn(l,r),K?F(n,o,u):n};O.precision=O.sd=function(n){var e,t=this;if(n!==void 0&&n!==!!n&&n!==1&&n!==0)throw Error(Ht+n);return t.d?(e=Vs(t.d),n&&t.e+1>e&&(e=t.e+1)):e=NaN,e};O.round=function(){var n=this,e=n.constructor;return F(new e(n),n.e+1,e.rounding)};O.sine=O.sin=function(){var n,e,t=this,r=t.constructor;return t.isFinite()?t.isZero()?new r(t):(n=r.precision,e=r.rounding,r.precision=n+Math.max(t.e,t.sd())+G,r.rounding=1,t=bc(r,Ws(r,t)),r.precision=n,r.rounding=e,F(Dt>2?t.neg():t,n,e,!0)):new r(NaN)};O.squareRoot=O.sqrt=function(){var n,e,t,r,i,s,a=this,o=a.d,u=a.e,l=a.s,f=a.constructor;if(l!==1||!o||!o[0])return new f(!l||l<0&&(!o||o[0])?NaN:o?a:1/0);for(K=!1,l=Math.sqrt(+a),l==0||l==1/0?(e=nt(o),(e.length+u)%2==0&&(e+="0"),l=Math.sqrt(e),u=at((u+1)/2)-(u<0||u%2),l==1/0?e="5e"+u:(e=l.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),r=new f(e)):r=new f(l.toString()),t=(u=f.precision)+3;;)if(s=r,r=s.plus(ce(a,s,t+2,1)).times(.5),nt(s.d).slice(0,t)===(e=nt(r.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&(F(s,u+1,0),s.times(s).eq(a))){r=s;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(F(r,u+1,1),n=!r.times(r).eq(a));break}return K=!0,F(r,u,f.rounding,n)};O.tangent=O.tan=function(){var n,e,t=this,r=t.constructor;return t.isFinite()?t.isZero()?new r(t):(n=r.precision,e=r.rounding,r.precision=n+10,r.rounding=1,t=t.sin(),t.s=1,t=ce(t,new r(1).minus(t.times(t)).sqrt(),n+10,0),r.precision=n,r.rounding=e,F(Dt==2||Dt==4?t.neg():t,n,e,!0)):new r(NaN)};O.times=O.mul=function(n){var e,t,r,i,s,a,o,u,l,f=this,p=f.constructor,g=f.d,v=(n=new p(n)).d;if(n.s*=f.s,!g||!g[0]||!v||!v[0])return new p(!n.s||g&&!g[0]&&!v||v&&!v[0]&&!g?NaN:!g||!v?n.s/0:n.s*0);for(t=at(f.e/G)+at(n.e/G),u=g.length,l=v.length,u<l&&(s=g,g=v,v=s,a=u,u=l,l=a),s=[],a=u+l,r=a;r--;)s.push(0);for(r=l;--r>=0;){for(e=0,i=u+r;i>r;)o=s[i]+v[r]*g[i-r-1]+e,s[i--]=o%bt|0,e=o/bt|0;s[i]=(s[i]+e)%bt|0}for(;!s[--a];)s.pop();return e?++t:s.shift(),n.d=s,n.e=gn(s,t),K?F(n,p.precision,p.rounding):n};O.toBinary=function(n,e){return pi(this,2,n,e)};O.toDecimalPlaces=O.toDP=function(n,e){var t=this,r=t.constructor;return t=new r(t),n===void 0?t:(ct(n,0,Kt),e===void 0?e=r.rounding:ct(e,0,8),F(t,n+t.e+1,e))};O.toExponential=function(n,e){var t,r=this,i=r.constructor;return n===void 0?t=Ot(r,!0):(ct(n,0,Kt),e===void 0?e=i.rounding:ct(e,0,8),r=F(new i(r),n+1,e),t=Ot(r,!0,n+1)),r.isNeg()&&!r.isZero()?"-"+t:t};O.toFixed=function(n,e){var t,r,i=this,s=i.constructor;return n===void 0?t=Ot(i):(ct(n,0,Kt),e===void 0?e=s.rounding:ct(e,0,8),r=F(new s(i),n+i.e+1,e),t=Ot(r,!1,n+r.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};O.toFraction=function(n){var e,t,r,i,s,a,o,u,l,f,p,g,v=this,C=v.d,S=v.constructor;if(!C)return new S(v);if(l=t=new S(1),r=u=new S(0),e=new S(r),s=e.e=Vs(C)-v.e-1,a=s%G,e.d[0]=tt(10,a<0?G+a:a),n==null)n=s>0?e:l;else{if(o=new S(n),!o.isInt()||o.lt(l))throw Error(Ht+o);n=o.gt(e)?s>0?e:l:o}for(K=!1,o=new S(nt(C)),f=S.precision,S.precision=s=C.length*G*2;p=ce(o,e,0,1,1),i=t.plus(p.times(r)),i.cmp(n)!=1;)t=r,r=i,i=l,l=u.plus(p.times(i)),u=i,i=e,e=o.minus(p.times(i)),o=i;return i=ce(n.minus(t),r,0,1,1),u=u.plus(i.times(l)),t=t.plus(i.times(r)),u.s=l.s=v.s,g=ce(l,r,s,1).minus(v).abs().cmp(ce(u,t,s,1).minus(v).abs())<1?[l,r]:[u,t],S.precision=f,K=!0,g};O.toHexadecimal=O.toHex=function(n,e){return pi(this,16,n,e)};O.toNearest=function(n,e){var t=this,r=t.constructor;if(t=new r(t),n==null){if(!t.d)return t;n=new r(1),e=r.rounding}else{if(n=new r(n),e===void 0?e=r.rounding:ct(e,0,8),!t.d)return n.s?t:n;if(!n.d)return n.s&&(n.s=t.s),n}return n.d[0]?(K=!1,t=ce(t,n,0,e,1).times(n),K=!0,F(t)):(n.s=t.s,t=n),t};O.toNumber=function(){return+this};O.toOctal=function(n,e){return pi(this,8,n,e)};O.toPower=O.pow=function(n){var e,t,r,i,s,a,o=this,u=o.constructor,l=+(n=new u(n));if(!o.d||!n.d||!o.d[0]||!n.d[0])return new u(tt(+o,l));if(o=new u(o),o.eq(1))return o;if(r=u.precision,s=u.rounding,n.eq(1))return F(o,r,s);if(e=at(n.e/G),e>=n.d.length-1&&(t=l<0?-l:l)<=mc)return i=Zs(u,o,t,r),n.s<0?new u(1).div(i):F(i,r,s);if(a=o.s,a<0){if(e<n.d.length-1)return new u(NaN);if(!(n.d[e]&1)&&(a=1),o.e==0&&o.d[0]==1&&o.d.length==1)return o.s=a,o}return t=tt(+o,l),e=t==0||!isFinite(t)?at(l*(Math.log("0."+nt(o.d))/Math.LN10+o.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?a/0:0):(K=!1,u.rounding=o.s=1,t=Math.min(12,(e+"").length),i=hi(n.times(Wt(o,r+t)),r),i.d&&(i=F(i,r+5,1),zr(i.d,r,s)&&(e=r+10,i=F(hi(n.times(Wt(o,e+t)),e),e+5,1),+nt(i.d).slice(r+1,r+15)+1==1e14&&(i=F(i,r+1,0)))),i.s=a,K=!0,u.rounding=s,F(i,r,s))};O.toPrecision=function(n,e){var t,r=this,i=r.constructor;return n===void 0?t=Ot(r,r.e<=i.toExpNeg||r.e>=i.toExpPos):(ct(n,1,Kt),e===void 0?e=i.rounding:ct(e,0,8),r=F(new i(r),n,e),t=Ot(r,n<=r.e||r.e<=i.toExpNeg,n)),r.isNeg()&&!r.isZero()?"-"+t:t};O.toSignificantDigits=O.toSD=function(n,e){var t=this,r=t.constructor;return n===void 0?(n=r.precision,e=r.rounding):(ct(n,1,Kt),e===void 0?e=r.rounding:ct(e,0,8)),F(new r(t),n,e)};O.toString=function(){var n=this,e=n.constructor,t=Ot(n,n.e<=e.toExpNeg||n.e>=e.toExpPos);return n.isNeg()&&!n.isZero()?"-"+t:t};O.truncated=O.trunc=function(){return F(new this.constructor(this),this.e+1,1)};O.valueOf=O.toJSON=function(){var n=this,e=n.constructor,t=Ot(n,n.e<=e.toExpNeg||n.e>=e.toExpPos);return n.isNeg()?"-"+t:t};function nt(n){var e,t,r,i=n.length-1,s="",a=n[0];if(i>0){for(s+=a,e=1;e<i;e++)r=n[e]+"",t=G-r.length,t&&(s+=Gt(t)),s+=r;a=n[e],r=a+"",t=G-r.length,t&&(s+=Gt(t))}else if(a===0)return"0";for(;a%10===0;)a/=10;return s+a}function ct(n,e,t){if(n!==~~n||n<e||n>t)throw Error(Ht+n)}function zr(n,e,t,r){var i,s,a,o;for(s=n[0];s>=10;s/=10)--e;return--e<0?(e+=G,i=0):(i=Math.ceil((e+1)/G),e%=G),s=tt(10,G-e),o=n[i]%s|0,r==null?e<3?(e==0?o=o/100|0:e==1&&(o=o/10|0),a=t<4&&o==99999||t>3&&o==49999||o==5e4||o==0):a=(t<4&&o+1==s||t>3&&o+1==s/2)&&(n[i+1]/s/100|0)==tt(10,e-2)-1||(o==s/2||o==0)&&(n[i+1]/s/100|0)==0:e<4?(e==0?o=o/1e3|0:e==1?o=o/100|0:e==2&&(o=o/10|0),a=(r||t<4)&&o==9999||!r&&t>3&&o==4999):a=((r||t<4)&&o+1==s||!r&&t>3&&o+1==s/2)&&(n[i+1]/s/1e3|0)==tt(10,e-3)-1,a}function cn(n,e,t){for(var r,i=[0],s,a=0,o=n.length;a<o;){for(s=i.length;s--;)i[s]*=e;for(i[0]+=ui.indexOf(n.charAt(a++)),r=0;r<i.length;r++)i[r]>t-1&&(i[r+1]===void 0&&(i[r+1]=0),i[r+1]+=i[r]/t|0,i[r]%=t)}return i.reverse()}function _c(n,e){var t,r,i;if(e.isZero())return e;r=e.d.length,r<32?(t=Math.ceil(r/3),i=(1/_n(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),n.precision+=t,e=jr(n,1,e.times(i),new n(1));for(var s=t;s--;){var a=e.times(e);e=a.times(a).minus(a).times(8).plus(1)}return n.precision-=t,e}var ce=function(){function n(r,i,s){var a,o=0,u=r.length;for(r=r.slice();u--;)a=r[u]*i+o,r[u]=a%s|0,o=a/s|0;return o&&r.unshift(o),r}function e(r,i,s,a){var o,u;if(s!=a)u=s>a?1:-1;else for(o=u=0;o<s;o++)if(r[o]!=i[o]){u=r[o]>i[o]?1:-1;break}return u}function t(r,i,s,a){for(var o=0;s--;)r[s]-=o,o=r[s]<i[s]?1:0,r[s]=o*a+r[s]-i[s];for(;!r[0]&&r.length>1;)r.shift()}return function(r,i,s,a,o,u){var l,f,p,g,v,C,S,j,x,q,A,U,Q,R,ne,ie,ue,oe,Je,ut,le=r.constructor,gt=r.s==i.s?1:-1,c=r.d,h=i.d;if(!c||!c[0]||!h||!h[0])return new le(!r.s||!i.s||(c?h&&c[0]==h[0]:!h)?NaN:c&&c[0]==0||!h?gt*0:gt/0);for(u?(v=1,f=r.e-i.e):(u=bt,v=G,f=at(r.e/v)-at(i.e/v)),Je=h.length,ue=c.length,x=new le(gt),q=x.d=[],p=0;h[p]==(c[p]||0);p++);if(h[p]>(c[p]||0)&&f--,s==null?(R=s=le.precision,a=le.rounding):o?R=s+(r.e-i.e)+1:R=s,R<0)q.push(1),C=!0;else{if(R=R/v+2|0,p=0,Je==1){for(g=0,h=h[0],R++;(p<ue||g)&&R--;p++)ne=g*u+(c[p]||0),q[p]=ne/h|0,g=ne%h|0;C=g||p<ue}else{for(g=u/(h[0]+1)|0,g>1&&(h=n(h,g,u),c=n(c,g,u),Je=h.length,ue=c.length),ie=Je,A=c.slice(0,Je),U=A.length;U<Je;)A[U++]=0;ut=h.slice(),ut.unshift(0),oe=h[0],h[1]>=u/2&&++oe;do g=0,l=e(h,A,Je,U),l<0?(Q=A[0],Je!=U&&(Q=Q*u+(A[1]||0)),g=Q/oe|0,g>1?(g>=u&&(g=u-1),S=n(h,g,u),j=S.length,U=A.length,l=e(S,A,j,U),l==1&&(g--,t(S,Je<j?ut:h,j,u))):(g==0&&(l=g=1),S=h.slice()),j=S.length,j<U&&S.unshift(0),t(A,S,U,u),l==-1&&(U=A.length,l=e(h,A,Je,U),l<1&&(g++,t(A,Je<U?ut:h,U,u))),U=A.length):l===0&&(g++,A=[0]),q[p++]=g,l&&A[0]?A[U++]=c[ie]||0:(A=[c[ie]],U=1);while((ie++<ue||A[0]!==void 0)&&R--);C=A[0]!==void 0}q[0]||q.shift()}if(v==1)x.e=f,Us=C;else{for(p=1,g=q[0];g>=10;g/=10)p++;x.e=p+f*v-1,F(x,o?s+x.e+1:s,a,C)}return x}}();function F(n,e,t,r){var i,s,a,o,u,l,f,p,g,v=n.constructor;e:if(e!=null){if(p=n.d,!p)return n;for(i=1,o=p[0];o>=10;o/=10)i++;if(s=e-i,s<0)s+=G,a=e,f=p[g=0],u=f/tt(10,i-a-1)%10|0;else if(g=Math.ceil((s+1)/G),o=p.length,g>=o)if(r){for(;o++<=g;)p.push(0);f=u=0,i=1,s%=G,a=s-G+1}else break e;else{for(f=o=p[g],i=1;o>=10;o/=10)i++;s%=G,a=s-G+i,u=a<0?0:f/tt(10,i-a-1)%10|0}if(r=r||e<0||p[g+1]!==void 0||(a<0?f:f%tt(10,i-a-1)),l=t<4?(u||r)&&(t==0||t==(n.s<0?3:2)):u>5||u==5&&(t==4||r||t==6&&(s>0?a>0?f/tt(10,i-a):0:p[g-1])%10&1||t==(n.s<0?8:7)),e<1||!p[0])return p.length=0,l?(e-=n.e+1,p[0]=tt(10,(G-e%G)%G),n.e=-e||0):p[0]=n.e=0,n;if(s==0?(p.length=g,o=1,g--):(p.length=g+1,o=tt(10,G-s),p[g]=a>0?(f/tt(10,i-a)%tt(10,a)|0)*o:0),l)for(;;)if(g==0){for(s=1,a=p[0];a>=10;a/=10)s++;for(a=p[0]+=o,o=1;a>=10;a/=10)o++;s!=o&&(n.e++,p[0]==bt&&(p[0]=1));break}else{if(p[g]+=o,p[g]!=bt)break;p[g--]=0,o=1}for(s=p.length;p[--s]===0;)p.pop()}return K&&(n.e>v.maxE?(n.d=null,n.e=NaN):n.e<v.minE&&(n.e=0,n.d=[0])),n}function Ot(n,e,t){if(!n.isFinite())return Gs(n);var r,i=n.e,s=nt(n.d),a=s.length;return e?(t&&(r=t-a)>0?s=s.charAt(0)+"."+s.slice(1)+Gt(r):a>1&&(s=s.charAt(0)+"."+s.slice(1)),s=s+(n.e<0?"e":"e+")+n.e):i<0?(s="0."+Gt(-i-1)+s,t&&(r=t-a)>0&&(s+=Gt(r))):i>=a?(s+=Gt(i+1-a),t&&(r=t-i-1)>0&&(s=s+"."+Gt(r))):((r=i+1)<a&&(s=s.slice(0,r)+"."+s.slice(r)),t&&(r=t-a)>0&&(i+1===a&&(s+="."),s+=Gt(r))),s}function gn(n,e){var t=n[0];for(e*=G;t>=10;t/=10)e++;return e}function pn(n,e,t){if(e>gc)throw K=!0,t&&(n.precision=t),Error($s);return F(new n(dn),e,1,!0)}function At(n,e,t){if(e>di)throw Error($s);return F(new n(hn),e,t,!0)}function Vs(n){var e=n.length-1,t=e*G+1;if(e=n[e],e){for(;e%10==0;e/=10)t--;for(e=n[0];e>=10;e/=10)t++}return t}function Gt(n){for(var e="";n--;)e+="0";return e}function Zs(n,e,t,r){var i,s=new n(1),a=Math.ceil(r/G+4);for(K=!1;;){if(t%2&&(s=s.times(e),Es(s.d,a)&&(i=!0)),t=at(t/2),t===0){t=s.d.length-1,i&&s.d[t]===0&&++s.d[t];break}e=e.times(e),Es(e.d,a)}return K=!0,s}function Os(n){return n.d[n.d.length-1]&1}function zs(n,e,t){for(var r,i,s=new n(e[0]),a=0;++a<e.length;){if(i=new n(e[a]),!i.s){s=i;break}r=s.cmp(i),(r===t||r===0&&s.s===t)&&(s=i)}return s}function hi(n,e){var t,r,i,s,a,o,u,l=0,f=0,p=0,g=n.constructor,v=g.rounding,C=g.precision;if(!n.d||!n.d[0]||n.e>17)return new g(n.d?n.d[0]?n.s<0?0:1/0:1:n.s?n.s<0?0:n:NaN);for(e==null?(K=!1,u=C):u=e,o=new g(.03125);n.e>-2;)n=n.times(o),p+=5;for(r=Math.log(tt(2,p))/Math.LN10*2+5|0,u+=r,t=s=a=new g(1),g.precision=u;;){if(s=F(s.times(n),u,1),t=t.times(++f),o=a.plus(ce(s,t,u,1)),nt(o.d).slice(0,u)===nt(a.d).slice(0,u)){for(i=p;i--;)a=F(a.times(a),u,1);if(e==null)if(l<3&&zr(a.d,u-r,v,l))g.precision=u+=10,t=s=o=new g(1),f=0,l++;else return F(a,g.precision=C,v,K=!0);else return g.precision=C,a}a=o}}function Wt(n,e){var t,r,i,s,a,o,u,l,f,p,g,v=1,C=10,S=n,j=S.d,x=S.constructor,q=x.rounding,A=x.precision;if(S.s<0||!j||!j[0]||!S.e&&j[0]==1&&j.length==1)return new x(j&&!j[0]?-1/0:S.s!=1?NaN:j?0:S);if(e==null?(K=!1,f=A):f=e,x.precision=f+=C,t=nt(j),r=t.charAt(0),Math.abs(s=S.e)<15e14){for(;r<7&&r!=1||r==1&&t.charAt(1)>3;)S=S.times(n),t=nt(S.d),r=t.charAt(0),v++;s=S.e,r>1?(S=new x("0."+t),s++):S=new x(r+"."+t.slice(1))}else return l=pn(x,f+2,A).times(s+""),S=Wt(new x(r+"."+t.slice(1)),f-C).plus(l),x.precision=A,e==null?F(S,A,q,K=!0):S;for(p=S,u=a=S=ce(S.minus(1),S.plus(1),f,1),g=F(S.times(S),f,1),i=3;;){if(a=F(a.times(g),f,1),l=u.plus(ce(a,new x(i),f,1)),nt(l.d).slice(0,f)===nt(u.d).slice(0,f))if(u=u.times(2),s!==0&&(u=u.plus(pn(x,f+2,A).times(s+""))),u=ce(u,new x(v),f,1),e==null)if(zr(u.d,f-C,q,o))x.precision=f+=C,l=a=S=ce(p.minus(1),p.plus(1),f,1),g=F(S.times(S),f,1),i=o=1;else return F(u,x.precision=A,q,K=!0);else return x.precision=A,u;u=l,i+=2}}function Gs(n){return String(n.s*n.s/0)}function un(n,e){var t,r,i;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(r=e.search(/e/i))>0?(t<0&&(t=r),t+=+e.slice(r+1),e=e.substring(0,r)):t<0&&(t=e.length),r=0;e.charCodeAt(r)===48;r++);for(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(r,i),e){if(i-=r,n.e=t=t-r-1,n.d=[],r=(t+1)%G,t<0&&(r+=G),r<i){for(r&&n.d.push(+e.slice(0,r)),i-=G;r<i;)n.d.push(+e.slice(r,r+=G));e=e.slice(r),r=G-e.length}else r-=i;for(;r--;)e+="0";n.d.push(+e),K&&(n.e>n.constructor.maxE?(n.d=null,n.e=NaN):n.e<n.constructor.minE&&(n.e=0,n.d=[0]))}else n.e=0,n.d=[0];return n}function yc(n,e){var t,r,i,s,a,o,u,l,f;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ls.test(e))return un(n,e)}else if(e==="Infinity"||e==="NaN")return+e||(n.s=NaN),n.e=NaN,n.d=null,n;if(pc.test(e))t=16,e=e.toLowerCase();else if(hc.test(e))t=2;else if(fc.test(e))t=8;else throw Error(Ht+e);for(s=e.search(/p/i),s>0?(u=+e.slice(s+1),e=e.substring(2,s)):e=e.slice(2),s=e.indexOf("."),a=s>=0,r=n.constructor,a&&(e=e.replace(".",""),o=e.length,s=o-s,i=Zs(r,new r(t),s,s*2)),l=cn(e,t,bt),f=l.length-1,s=f;l[s]===0;--s)l.pop();return s<0?new r(n.s*0):(n.e=gn(l,f),n.d=l,K=!1,a&&(n=ce(n,i,o*4)),u&&(n=n.times(Math.abs(u)<54?tt(2,u):Hr.pow(2,u))),K=!0,n)}function bc(n,e){var t,r=e.d.length;if(r<3)return e.isZero()?e:jr(n,2,e,e);t=1.4*Math.sqrt(r),t=t>16?16:t|0,e=e.times(1/_n(5,t)),e=jr(n,2,e,e);for(var i,s=new n(5),a=new n(16),o=new n(20);t--;)i=e.times(e),e=e.times(s.plus(i.times(a.times(i).minus(o))));return e}function jr(n,e,t,r,i){var s,a,o,u,l=1,f=n.precision,p=Math.ceil(f/G);for(K=!1,u=t.times(t),o=new n(r);;){if(a=ce(o.times(u),new n(e++*e++),f,1),o=i?r.plus(a):r.minus(a),r=ce(a.times(u),new n(e++*e++),f,1),a=o.plus(r),a.d[p]!==void 0){for(s=p;a.d[s]===o.d[s]&&s--;);if(s==-1)break}s=o,o=r,r=a,a=s,l++}return K=!0,a.d.length=p+1,a}function _n(n,e){for(var t=n;--e;)t*=n;return t}function Ws(n,e){var t,r=e.s<0,i=At(n,n.precision,1),s=i.times(.5);if(e=e.abs(),e.lte(s))return Dt=r?4:1,e;if(t=e.divToInt(i),t.isZero())Dt=r?3:2;else{if(e=e.minus(t.times(i)),e.lte(s))return Dt=Os(t)?r?2:3:r?4:1,e;Dt=Os(t)?r?1:4:r?3:2}return e.minus(i).abs()}function pi(n,e,t,r){var i,s,a,o,u,l,f,p,g,v=n.constructor,C=t!==void 0;if(C?(ct(t,1,Kt),r===void 0?r=v.rounding:ct(r,0,8)):(t=v.precision,r=v.rounding),!n.isFinite())f=Gs(n);else{for(f=Ot(n),a=f.indexOf("."),C?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,a>=0&&(f=f.replace(".",""),g=new v(1),g.e=f.length-a,g.d=cn(Ot(g),10,i),g.e=g.d.length),p=cn(f,10,i),s=u=p.length;p[--u]==0;)p.pop();if(!p[0])f=C?"0p+0":"0";else{if(a<0?s--:(n=new v(n),n.d=p,n.e=s,n=ce(n,g,t,r,0,i),p=n.d,s=n.e,l=Us),a=p[t],o=i/2,l=l||p[t+1]!==void 0,l=r<4?(a!==void 0||l)&&(r===0||r===(n.s<0?3:2)):a>o||a===o&&(r===4||l||r===6&&p[t-1]&1||r===(n.s<0?8:7)),p.length=t,l)for(;++p[--t]>i-1;)p[t]=0,t||(++s,p.unshift(1));for(u=p.length;!p[u-1];--u);for(a=0,f="";a<u;a++)f+=ui.charAt(p[a]);if(C){if(u>1)if(e==16||e==8){for(a=e==16?4:3,--u;u%a;u++)f+="0";for(p=cn(f,i,e),u=p.length;!p[u-1];--u);for(a=1,f="1.";a<u;a++)f+=ui.charAt(p[a])}else f=f.charAt(0)+"."+f.slice(1);f=f+(s<0?"p":"p+")+s}else if(s<0){for(;++s;)f="0"+f;f="0."+f}else if(++s>u)for(s-=u;s--;)f+="0";else s<u&&(f=f.slice(0,s)+"."+f.slice(s))}f=(e==16?"0x":e==2?"0b":e==8?"0o":"")+f}return n.s<0?"-"+f:f}function Es(n,e){if(n.length>e)return n.length=e,!0}function wc(n){return new this(n).abs()}function vc(n){return new this(n).acos()}function kc(n){return new this(n).acosh()}function Cc(n,e){return new this(n).plus(e)}function Tc(n){return new this(n).asin()}function Mc(n){return new this(n).asinh()}function Sc(n){return new this(n).atan()}function Ac(n){return new this(n).atanh()}function Oc(n,e){n=new this(n),e=new this(e);var t,r=this.precision,i=this.rounding,s=r+4;return!n.s||!e.s?t=new this(NaN):!n.d&&!e.d?(t=At(this,s,1).times(e.s>0?.25:.75),t.s=n.s):!e.d||n.isZero()?(t=e.s<0?At(this,r,i):new this(0),t.s=n.s):!n.d||e.isZero()?(t=At(this,s,1).times(.5),t.s=n.s):e.s<0?(this.precision=s,this.rounding=1,t=this.atan(ce(n,e,s,1)),e=At(this,s,1),this.precision=r,this.rounding=i,t=n.s<0?t.minus(e):t.plus(e)):t=this.atan(ce(n,e,s,1)),t}function Ec(n){return new this(n).cbrt()}function xc(n){return F(n=new this(n),n.e+1,2)}function jc(n,e,t){return new this(n).clamp(e,t)}function Ic(n){if(!n||typeof n!="object")throw Error(mn+"Object expected");var e,t,r,i=n.defaults===!0,s=["precision",1,Kt,"rounding",0,8,"toExpNeg",-Er,0,"toExpPos",0,Er,"maxE",0,Er,"minE",-Er,0,"modulo",0,9];for(e=0;e<s.length;e+=3)if(t=s[e],i&&(this[t]=li[t]),(r=n[t])!==void 0)if(at(r)===r&&r>=s[e+1]&&r<=s[e+2])this[t]=r;else throw Error(Ht+t+": "+r);if(t="crypto",i&&(this[t]=li[t]),(r=n[t])!==void 0)if(r===!0||r===!1||r===0||r===1)if(r)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Ns);else this[t]=!1;else throw Error(Ht+t+": "+r);return this}function Pc(n){return new this(n).cos()}function Bc(n){return new this(n).cosh()}function Hs(n){var e,t,r;function i(s){var a,o,u,l=this;if(!(l instanceof i))return new i(s);if(l.constructor=i,xs(s)){l.s=s.s,K?!s.d||s.e>i.maxE?(l.e=NaN,l.d=null):s.e<i.minE?(l.e=0,l.d=[0]):(l.e=s.e,l.d=s.d.slice()):(l.e=s.e,l.d=s.d?s.d.slice():s.d);return}if(u=typeof s,u==="number"){if(s===0){l.s=1/s<0?-1:1,l.e=0,l.d=[0];return}if(s<0?(s=-s,l.s=-1):l.s=1,s===~~s&&s<1e7){for(a=0,o=s;o>=10;o/=10)a++;K?a>i.maxE?(l.e=NaN,l.d=null):a<i.minE?(l.e=0,l.d=[0]):(l.e=a,l.d=[s]):(l.e=a,l.d=[s]);return}if(s*0!==0){s||(l.s=NaN),l.e=NaN,l.d=null;return}return un(l,s.toString())}if(u==="string")return(o=s.charCodeAt(0))===45?(s=s.slice(1),l.s=-1):(o===43&&(s=s.slice(1)),l.s=1),Ls.test(s)?un(l,s):yc(l,s);if(u==="bigint")return s<0?(s=-s,l.s=-1):l.s=1,un(l,s.toString());throw Error(Ht+s)}if(i.prototype=O,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Ic,i.clone=Hs,i.isDecimal=xs,i.abs=wc,i.acos=vc,i.acosh=kc,i.add=Cc,i.asin=Tc,i.asinh=Mc,i.atan=Sc,i.atanh=Ac,i.atan2=Oc,i.cbrt=Ec,i.ceil=xc,i.clamp=jc,i.cos=Pc,i.cosh=Bc,i.div=qc,i.exp=Rc,i.floor=Dc,i.hypot=Uc,i.ln=$c,i.log=Nc,i.log10=Lc,i.log2=Fc,i.max=Vc,i.min=Zc,i.mod=zc,i.mul=Gc,i.pow=Wc,i.random=Hc,i.round=Kc,i.sign=Qc,i.sin=Xc,i.sinh=Jc,i.sqrt=Yc,i.sub=eu,i.sum=tu,i.tan=ru,i.tanh=nu,i.trunc=iu,n===void 0&&(n={}),n&&n.defaults!==!0)for(r=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<r.length;)n.hasOwnProperty(t=r[e++])||(n[t]=this[t]);return i.config(n),i}function qc(n,e){return new this(n).div(e)}function Rc(n){return new this(n).exp()}function Dc(n){return F(n=new this(n),n.e+1,3)}function Uc(){var n,e,t=new this(0);for(K=!1,n=0;n<arguments.length;)if(e=new this(arguments[n++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return K=!0,new this(1/0);t=e}return K=!0,t.sqrt()}function xs(n){return n instanceof Hr||n&&n.toStringTag===Fs||!1}function $c(n){return new this(n).ln()}function Nc(n,e){return new this(n).log(e)}function Fc(n){return new this(n).log(2)}function Lc(n){return new this(n).log(10)}function Vc(){return zs(this,arguments,-1)}function Zc(){return zs(this,arguments,1)}function zc(n,e){return new this(n).mod(e)}function Gc(n,e){return new this(n).mul(e)}function Wc(n,e){return new this(n).pow(e)}function Hc(n){var e,t,r,i,s=0,a=new this(1),o=[];if(n===void 0?n=this.precision:ct(n,1,Kt),r=Math.ceil(n/G),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(r));s<r;)i=e[s],i>=429e7?e[s]=crypto.getRandomValues(new Uint32Array(1))[0]:o[s++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(r*=4);s<r;)i=e[s]+(e[s+1]<<8)+(e[s+2]<<16)+((e[s+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,s):(o.push(i%1e7),s+=4);s=r/4}else throw Error(Ns);else for(;s<r;)o[s++]=Math.random()*1e7|0;for(r=o[--s],n%=G,r&&n&&(i=tt(10,G-n),o[s]=(r/i|0)*i);o[s]===0;s--)o.pop();if(s<0)t=0,o=[0];else{for(t=-1;o[0]===0;t-=G)o.shift();for(r=1,i=o[0];i>=10;i/=10)r++;r<G&&(t-=G-r)}return a.e=t,a.d=o,a}function Kc(n){return F(n=new this(n),n.e+1,this.rounding)}function Qc(n){return n=new this(n),n.d?n.d[0]?n.s:0*n.s:n.s||NaN}function Xc(n){return new this(n).sin()}function Jc(n){return new this(n).sinh()}function Yc(n){return new this(n).sqrt()}function eu(n,e){return new this(n).sub(e)}function tu(){var n=0,e=arguments,t=new this(e[n]);for(K=!1;t.s&&++n<e.length;)t=t.plus(e[n]);return K=!0,F(t,this.precision,this.rounding)}function ru(n){return new this(n).tan()}function nu(n){return new this(n).tanh()}function iu(n){return F(n=new this(n),n.e+1,1)}O[Symbol.for("nodejs.util.inspect.custom")]=O.toString;O[Symbol.toStringTag]="Decimal";var Hr=O.constructor=Hs(li);dn=new Hr(dn);hn=new Hr(hn);var fn=Hr;function ln(n){return fn.isDecimal(n)?n:new fn(n===void 0?0:n)}var Ks="0x2::sui::SUI",su="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI";var yn=class Xe{static totalBalance(e,t){let r=BigInt(0);return e.forEach(i=>{t===i.coin_type&&(r+=BigInt(i.balance))}),r}static getCoinAssets(e,t){let r=[];return t.forEach(i=>{Is(i.coin_type)===Is(e)&&r.push(i)}),r}static isSuiCoin(e){return xr(e).full_address===Ks}static selectCoinObjectIdGreaterThanOrEqual(e,t,r=[]){let i=Xe.selectCoinAssetGreaterThanOrEqual(e,t,r),s=i.selected_coins.map(u=>u.coin_object_id),a=i.remain_coins,o=i.selected_coins.map(u=>u.balance.toString());return{object_array:s,remain_coins:a,amount_array:o}}static selectCoinAssetGreaterThanOrEqual(e,t,r=[]){let i=Xe.sortByBalance(e.filter(l=>!r.includes(l.coin_object_id))),s=Xe.calculateTotalBalance(i);if(s<t)return{selected_coins:[],remain_coins:i};if(s===t)return{selected_coins:i,remain_coins:[]};let a=BigInt(0),o=[],u=[...i];for(;a<s;){let l=t-a,f=u.findIndex(g=>g.balance>=l);if(f!==-1){o.push(u[f]),u.splice(f,1);break}let p=u.pop();p.balance>0&&(o.push(p),a+=p.balance)}return{selected_coins:Xe.sortByBalance(o),remain_coins:Xe.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,r)=>t.balance<r.balance?-1:t.balance>r.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,r)=>t.balance>r.balance?-1:t.balance<r.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,r)=>t+r.balance,BigInt(0))}static buildCoinForAmount(e,t,r,i,s=!0,a=!0){let o=Xe.getCoinAssets(i,t);if(r===BigInt(0))return this.buildZeroValueCoin(t,e,i,s);let u=Xe.calculateTotalBalance(o);if(u<r)throw new Error(`The amount(${u}) is Insufficient balance for ${i} , expect ${r} `);return this.buildCoin(e,t,o,r,i,s,a)}static buildCoinWithBalance(e,t,r){return e===BigInt(0)&&Xe.isSuiCoin(t)?r.add(As({balance:e,useGasCoin:!1})):r.add(As({balance:e,type:t}))}static buildVectorCoin(e,t,r,i,s,a=!0){if(Xe.isSuiCoin(s)){let g=e.splitCoins(e.gas,[e.pure.u64(i)]);return{selected_coins:[],target_coin:g,remain_coins:t,target_coin_amount:i.toString(),is_mint_zero_coin:!1,original_spited_coin:e.gas}}let{original_spited_coin:o,target_coin:u,target_coin_amount:l,remain_coins:f,selected_coins:p}=this.buildSpitTargeCoin(e,i,r,a);return a?{target_coin:e.makeMoveVec({elements:[u]}),selected_coins:p,remain_coins:f,target_coin_amount:l,is_mint_zero_coin:!1,original_spited_coin:o}:{selected_coins:p,target_coin:e.makeMoveVec({elements:p.map(g=>e.object(g))}),remain_coins:f,target_coin_amount:l,is_mint_zero_coin:!1}}static buildOneCoin(e,t,r,i,s=!0){if(Xe.isSuiCoin(i)){if(r===0n&&t.length>1){let u=Xe.selectCoinObjectIdGreaterThanOrEqual(t,r);return{selected_coins:u.object_array,target_coin:e.object(u.object_array[0]),remain_coins:u.remain_coins,target_coin_amount:u.amount_array[0],is_mint_zero_coin:!1}}let a=Xe.selectCoinObjectIdGreaterThanOrEqual(t,r),o=e.splitCoins(e.gas,[e.pure.u64(r)]);return{selected_coins:[],target_coin:o,remain_coins:a.remain_coins,target_coin_amount:r.toString(),is_mint_zero_coin:!1,original_spited_coin:e.gas}}return this.buildSpitTargeCoin(e,r,t,s)}static buildSpitTargeCoin(e,t,r,i){let s=Xe.selectCoinObjectIdGreaterThanOrEqual(r,t),a=s.amount_array.reduce((C,S)=>Number(C)+Number(S),0).toString(),o=s.object_array,[u,...l]=o,f=e.object(u),p=f,g=s.amount_array.reduce((C,S)=>Number(C)+Number(S),0).toString(),v;return l.length>0&&e.mergeCoins(f,l.map(C=>e.object(C))),i&&Number(a)>Number(t)&&(p=e.splitCoins(f,[e.pure.u64(t)]),v=f),{original_spited_coin:v,target_coin:p,target_coin_amount:g,remain_coins:s.remain_coins,selected_coins:s.object_array,is_mint_zero_coin:!1}}static buildCoin(e,t,r,i,s,a=!0,o=!0){return a?this.buildVectorCoin(e,t,r,i,s,o):this.buildOneCoin(e,r,i,s,o)}static buildZeroValueCoin(e,t,r,i=!0){let s=this.callMintZeroValueCoin(t,r),a;return i?a=t.makeMoveVec({elements:[s]}):a=s,{target_coin:a,remain_coins:e,selected_coins:[],is_mint_zero_coin:!0,target_coin_amount:"0"}}static buildCoinForAmountInterval(e,t,r,i,s=!0,a=!0){let o=Xe.getCoinAssets(i,t);if(r.amount_first===BigInt(0))return o.length>0?this.buildCoin(e,[...t],[...o],r.amount_first,i,s,a):this.buildZeroValueCoin(t,e,i,s);let u=Xe.calculateTotalBalance(o);if(u>=r.amount_first)return this.buildCoin(e,[...t],[...o],r.amount_first,i,s,a);if(u<r.amount_second)throw new Error(`The amount(${u}) is Insufficient balance for ${i} , expect ${r.amount_second} `);return this.buildCoin(e,[...t],[...o],r.amount_second,i,s,a)}static{this.callMintZeroValueCoin=(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]})}static fromBalance(e,t,r){return r.moveCall({target:"0x2::coin::from_balance",typeArguments:[t],arguments:[e]})}static intoBalance(e,t,r){return r.moveCall({target:"0x2::coin::into_balance",typeArguments:[t],arguments:[typeof e=="string"?r.object(e):e]})}static mintBalanceZero(e,t){return t.moveCall({target:"0x2::balance::zero",typeArguments:[e],arguments:[]})}static destroyBalanceZero(e,t,r){return r.moveCall({target:"0x2::balance::destroy_zero",typeArguments:[t],arguments:[e]})}static getCoinAmountObjId(e,t){let r=e.amount_coin_array.find(i=>!i.used&&ln(i.amount).eq(t)?(i.used=!0,!0):!1);return r?r.coin_object_id:Ts("CoinNotFound",`Coin not found for ${t} ${e.coin_type}`)}static buildMultiCoinInput(e,t,r,i){let s=Xe.getCoinAssets(r,t);if(Xe.isSuiCoin(r)){let p=e.splitCoins(e.gas,i.map(g=>e.pure.u64(g)));return{amount_coin_array:i.map((g,v)=>({coin_object_id:p[v],amount:g.toString(),used:!1})),coin_type:r,remain_coins:s}}let a=i.reduce((p,g)=>p+g,BigInt(0)),o=Xe.selectCoinObjectIdGreaterThanOrEqual(s,a);if(o.object_array.length===0)return Ts("InsufficientBalance",`No enough coins for ${r} expect ${a} actual ${Xe.calculateTotalBalance(s)}`);let[u,...l]=o.object_array;l.length>0&&e.mergeCoins(u,[...l]);let f=e.splitCoins(u,i.map(p=>e.pure.u64(p)));return{amount_coin_array:i.map((p,g)=>({coin_object_id:f[g],amount:p.toString(),used:!1})),remain_coins:o.remain_coins,coin_type:r}}};function au(n){return n.startsWith("0x")?`${n.slice(2)}`:n}function js(n,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],r=[n,...e].filter(Boolean).join("::");return t&&t.length&&(r+=`<${t.join(", ")}>`),r}function xr(n){try{let e=n.replace(/\s/g,""),t=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(t){e=e.slice(0,e.indexOf("<"));let s={...xr(e),type_arguments:t.map(a=>xr(a).source_address)};return s.type_arguments=s.type_arguments.map(a=>yn.isSuiCoin(a)?a:xr(a).source_address),s.source_address=js(s.full_address,s.type_arguments),s}let r=e.split("::"),i={full_address:e,address:e===Ks||e===su?"0x2":Ds(r[0]),module:r[1],name:r[2],type_arguments:[],source_address:""};return i.full_address=`${i.address}::${i.module}::${i.name}`,i.source_address=js(i.full_address,i.type_arguments),i}catch{return{full_address:n,address:"",module:"",name:"",type_arguments:[],source_address:n}}}function Is(n){return xr(n).source_address}var Ps=(n,e=!0)=>{let t=n.split("::"),r=t.shift(),i=Ds(r);return e&&(i=au(i)),`${i}::${t.join("::")}`};function cu(n,e,t,r){let i;switch(r){case"address":i=zt.Address.serialize(e).toBytes();break;case"u8":i=zt.u8().serialize(e).toBytes();break;case"u16":i=zt.u16().serialize(e).toBytes();break;case"u32":i=zt.u32().serialize(e).toBytes();break;case"u64":i=zt.u64().serialize(e).toBytes();break;case"u128":i=zt.u128().serialize(e).toBytes();break;case"u256":i=zt.u256().serialize(e).toBytes();break;case"string":i=zt.string().serialize(e).toBytes();break;default:throw new Error(`Unsupported value type: ${r}`)}return ou(n,t,i)}var bn="0x0000000000000000000000000000000000000000000000000000000000000006",uu=["https://rpc-mainnet.suiscan.xyz:443","https://cetus-mainnet-endpoint.blockvision.org","https://cetus-suimain-e31f.mainnet.sui.rpcpool.com"];var ud=Qs("mainnet"),ld=Qs("testnet");function lu(n){return`0x${Buffer.from(n).toString("hex")}`}var pu=class{constructor(n,e,t,r){this._cache={},this._env="mainnet",this._client=n,this._env=r||"mainnet",this._graphQLClient=e,this._suiGrpcClient=t}async fetchCoinMetadata(n){let e=`coin_metadata_${n}`,t=this.getCache(e);if(t)return t;let r=await this._client.getCoinMetadata({coinType:n});return this.updateCache(e,r),r}async fetchCoinMetadataId(n){if(!this._graphQLClient)throw new Error("graphQLClient is not set");let e=`coin_metadata_id_${n}`,t=this.getCache(e);if(t)return t;let r=hu(`
21
+ query coinMetadataId($coinType: String!) {
22
+ objects(filter: { type: $coinType }, first: 1) {
23
+ nodes {
24
+ address
25
+ }
26
+ }
27
+ }
28
+ `),i=(await this._graphQLClient.query({query:r,variables:{coinType:`0x2::coin::CoinMetadata<${n}>`}})).data?.objects?.nodes[0]?.address??null;return i&&this.updateCache(e,i),i}async getSuiTransactionResponse(n){let e;try{e=await this._client.getTransactionBlock({digest:n,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{e=await this._client.getTransactionBlock({digest:n,options:{showEvents:!0,showEffects:!0}})}return e}async queryEventsByPage(n,e="all"){let t=[],r=!0,i=e==="all",s=i?null:e.cursor;do{let a=await this._client.queryEvents({query:n,cursor:s,limit:i?null:e.limit});a.data?(t=[...t,...a.data],r=a.hasNextPage,s=a.nextCursor):r=!1}while(i&&r);return{data:t,next_cursor:s,has_next_page:r}}async queryTransactionBlocksByPage(n,e="all",t="ascending"){let r=[],i=!0,s=e==="all",a=s?null:e.cursor;do{let o=await this._client.queryTransactionBlocks({filter:n,cursor:a,order:t,limit:s?null:e.limit,options:{showEvents:!0}});o.data?(r=[...r,...o.data],i=o.hasNextPage,a=o.nextCursor):i=!1}while(s&&i);return{data:r,next_cursor:a,has_next_page:i}}async getOwnedObjectsByPage(n,e,t="all"){let r=async i=>{let s=[],a=!0,o=t==="all",u=o?null:t.cursor;do{let l=await i.getOwnedObjects({owner:n,...e,cursor:u,limit:o?null:t.limit});l.data?(s=[...s,...l.data],a=l.hasNextPage,u=l.nextCursor):a=!1}while(o&&a);return{data:s,next_cursor:u,has_next_page:a}};try{return await r(this._client)}catch(i){let s=i;for(let a of uu)try{let o=fi(new du({url:a,network:this._env}),this._graphQLClient,this._suiGrpcClient,this._env);return await r(o)}catch(o){s=o;continue}throw s}}async getDynamicFieldsByPage(n,e="all"){let t=[],r=!0,i=e==="all",s=i?null:e.cursor;do{let a=await this._client.getDynamicFields({parentId:n,cursor:s,limit:i?null:e.limit});a.data?(t=[...t,...a.data],r=a.hasNextPage,s=a.nextCursor):r=!1}while(i&&r);return{data:t,next_cursor:s,has_next_page:r}}async getDynamicFieldObjects(n,e,t,r,i={showContent:!0,showType:!0,showOwner:!0}){let s=e.map(a=>cu(n,a,t,r));return s.length===0?[]:await this.batchGetObjects(s,i)}async batchGetObjects(n,e,t=50){let r=[];try{for(let i=0;i<Math.ceil(n.length/t);i++){let s=await this._client.multiGetObjects({ids:n.slice(i*t,t*(i+1)),options:e});r=[...r,...s]}}catch(i){console.log(i)}return r}async calculationTxGas(n){let{sender:e}=n.getData();if(!e)throw Error("sdk sender is empty");let t=await this._client.devInspectTransactionBlock({transactionBlock:n,sender:e}),{gasUsed:r}=t.effects;return Number(r.computationCost)+Number(r.storageCost)-Number(r.storageRebate)}async sendTransaction(n,e){try{return await this._client.signAndExecuteTransaction({transaction:e,signer:n,options:{showEffects:!0,showEvents:!0}})}catch(t){console.log("error: ",t)}}async sendSimulationTransaction(n,e){try{return n.setSender(e),await this._client.dryRunTransactionBlock({transactionBlock:await n.build({client:this._client})})}catch(t){throw console.log("devInspectTransactionBlock error",t),t}}async executeTx(n,e,t){try{if(t){let r=typeof n=="string"?Ss(n):Ss(n.getPublicKey().toSuiAddress()),i=await this.sendSimulationTransaction(e,r);return i.events.length>0?i.events:i}else{if(typeof n=="string")throw new Error("Cannot send transaction with string address - keypair required for signing");return await this.sendTransaction(n,e)}}catch(r){return r}}async getOwnerCoinAssets(n,e){let t=[],r=null;for(;;){let i=await(e?this._client.getCoins({owner:n,coinType:e,cursor:r}):this._client.getAllCoins({owner:n,cursor:r}));if(i.data.forEach(s=>{BigInt(s.balance)>0&&t.push({coin_type:xr(s.coinType).source_address,coin_object_id:s.coinObjectId,balance:BigInt(s.balance)})}),r=i.nextCursor,!i.hasNextPage)break}return t}async getOwnerCoinBalances(n,e){let t=[];return e?t=[await this._client.getBalance({owner:n,coinType:e})]:t=[...await this._client.getAllBalances({owner:n})],t}updateCache(n,e,t=864e5){let r=this._cache[n];r?(r.overdue_time=Ms(t),r.value=e):r=new dc(e,Ms(t)),this._cache[n]=r}getCache(n,e=!1){let t=this._cache[n],r=t?.isValid();if(!e&&r)return t.value;r||delete this._cache[n]}};function fi(n,e,t,r){let i=new pu(n,e,t,r);return new Proxy(i,{get(s,a,o){if(a in s)return Reflect.get(s,a,o);if(a in s._client){let u=Reflect.get(s._client,a);return typeof u=="function"?u.bind(s._client):u}throw new Error(`Property or method "${String(a)}" does not exist on FullClient or its client.`)}})}var fu=Gr(Wr(),1);var _d=new fu.default(1e6),mu=(n=>(n[n.BelowRange=0]="BelowRange",n[n.InRange=1]="InRange",n[n.AboveRange=2]="AboveRange",n))(mu||{}),oi=10n,gu={pyth_package_id:"0x04e20ddf36af412a4096f9014f4a565af9e812db9a05cc40254846cf6ed0ad91",pyth_published_at:"0x04e20ddf36af412a4096f9014f4a565af9e812db9a05cc40254846cf6ed0ad91",pyth_state_id:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole_state_id:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c",hermes_service_urls:[]},_u={"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC":{coin_type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",price_feed_id:"0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",coin_decimals:6},"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI":{coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",price_feed_id:"0x23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",coin_decimals:9},"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS":{coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",price_feed_id:"0xe5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",coin_decimals:9},"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP":{coin_type:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",price_feed_id:"0x29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",coin_decimals:6},"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX":{coin_type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",price_feed_id:"0x88250f854c019ef4f88a5c073d52a18bb1c6ac437033f5932cd017d24917ab46",coin_decimals:9},"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN":{coin_type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",price_feed_id:"0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",coin_decimals:9},"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI":{coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",price_feed_id:"0x6120ffcf96395c70aa77e72dcb900bf9d40dccab228efca59a17b90ce423d5e8",coin_decimals:9},"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH":{coin_type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",price_feed_id:"0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",coin_decimals:8},"0x356a26eb9e012a68958082340d4c4116e7f55615cf27affcff209cf0ae544f59::wal::WAL":{coin_type:"0x356a26eb9e012a68958082340d4c4116e7f55615cf27affcff209cf0ae544f59::wal::WAL",price_feed_id:"0xeba0732395fae9dec4bae12e52760b35fc1c5671e2da8b449c9af4efe5d54341",coin_decimals:9},"0x3e8e9423d80e1774a7ca128fccd8bf5f1f7753be658c5e645929037f7c819040::lbtc::LBTC":{coin_type:"0x3e8e9423d80e1774a7ca128fccd8bf5f1f7753be658c5e645929037f7c819040::lbtc::LBTC",price_feed_id:"0x8f257aab6e7698bb92b15511915e593d6f8eae914452f781874754b03d0c612b",coin_decimals:8},"0x3a304c7feba2d819ea57c3542d68439ca2c386ba02159c740f7b406e592c62ea::haedal::HAEDAL":{coin_type:"0x3a304c7feba2d819ea57c3542d68439ca2c386ba02159c740f7b406e592c62ea::haedal::HAEDAL",price_feed_id:"0xe67d98cc1fbd94f569d5ba6c3c3c759eb3ffc5d2b28e64538a53ae13efad8fd1",coin_decimals:9}};function yu(n,e){if(!oi)throw new Error("oraclePriceMultiplierDecimal is required");if(n===0n)throw new Error("Invalid oracle price");if(e<0n){let t=10n**(oi- -e);return n*t}return n/10n**(e+oi)}var Bs=16*1024,Xs=class{constructor(n,e=gu){this.hasChangeConnection=!1,this.pythConfigs=e,this.fullClient=n;let t=[...e.hermes_service_urls];t.includes("https://hermes.pyth.network")||t.push("https://hermes.pyth.network"),this.hermesClients=t.map(r=>new an(r,{timeout:3e3}))}async getFeedInfoList(n){let e=n.map(t=>this.getFeedInfo(t,!1));return await Promise.all(e)}priceCheck(n,e=60){let t=Math.floor(Date.now()/1e3);if(!(Math.abs(t-n.last_update_time)>e))return n}async getPackageId(n){let e=await this.fullClient.getObject({id:n,options:{showContent:!0}});if(e.data?.content?.dataType=="moveObject")return e.data.content.fields.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async getWormholePackageId(){let{wormhole_state_id:n}=this.pythConfigs,e=`getWormholePackageId_${n}`,t=this.fullClient.getCache(e);if(t)return t;let r=await this.getPackageId(this.pythConfigs.wormhole_state_id);return this.fullClient.updateCache(e,r),r}async getLatestPrice(n,e=!1){let t={},r=[];if(e?n.forEach(s=>{let a=this.fullClient.getCache(`getLatestPrice_${s}`);a&&this.priceCheck(a,60)?t[s]=a:r.push(s)}):r=[...n],r.length===0)return t;let i=await this.getFeedInfoList(r);return(await this.getLatestPriceFeeds(i.map(s=>s.price_feed_id)))?.parsed?.forEach((s,a)=>{if(s){let{price:o,expo:u,publish_time:l}=s.price,f=ln(o).mul(ln(10).pow(ln(u))).toString(),p=i[a],g={coin_type:p.coin_type,price:f,coin_decimals:p.coin_decimals,oracle_price:0n,last_update_time:l};g.oracle_price=yu(BigInt(o),BigInt(u)),t[r[a]]=g,this.fullClient.updateCache(`getLatestPrice_${g.coin_type}`,g)}}),t}async getPriceFeedsUpdateData(n){let e=null;for(let t of this.hermesClients)try{return(await t.getLatestPriceUpdates(n,{encoding:"hex"})).binary.data.map(r=>Buffer.from(r,"hex"))}catch(r){console.log("\u{1F680} ~ PythPriceModule ~ getPriceFeedsUpdateData ~ e:",r),e=r;continue}throw new Error(`All Pyth Hermes endpoints are unavailable. getPriceFeedsUpdateData Detailed error: ${e?.message}`)}async getLatestPriceFeeds(n){let e=null;for(let t of this.hermesClients)try{return await t.getLatestPriceUpdates(n,{parsed:!0})}catch(r){console.log("\u{1F680} ~ PythPriceModule ~ getLatestPriceFeeds ~ error:",r),e=r;continue}throw new Error(`All Pyth Hermes endpoints are unavailable. getLatestPriceFeeds Detailed error: ${e?.message}`)}extractVaaBytesFromAccumulatorMessage(n){let e=7+n.readUint8(6)+1,t=n.readUint16BE(e),r=e+2;return n.subarray(r,r+t)}async verifyVaas(n,e){let t=await this.getWormholePackageId(),r=[];for(let i of n){let[s]=e.moveCall({target:`${t}::vaa::parse_and_verify`,arguments:[e.object(this.pythConfigs.wormhole_state_id),e.pure(on.vector(on.u8()).serialize(Array.from(i),{maxSize:Bs}).toBytes()),e.object(ci)]});r.push(s)}return r}async getPriceTableInfo(){if(this.priceTableInfo===void 0){let n=await this.fullClient.getDynamicFieldObject({parentId:this.pythConfigs.pyth_state_id,name:{type:"vector<u8>",value:"price_info"}});if(!n.data?.type)throw new Error("Price Table not found, contract may not be initialized");let e=n.data.type.replace("0x2::table::Table<","");e=e.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>",""),this.priceTableInfo={id:n.data.objectId,fieldType:e}}return this.priceTableInfo}async getPriceFeedObjectId(n){let e=n.replace("0x",""),t=`getPriceFeedObjectId_${e}`,r=this.fullClient.getCache(t);if(r)return r;let{id:i,fieldType:s}=await this.getPriceTableInfo(),a=await this.fullClient.getDynamicFieldObject({parentId:i,name:{type:`${s}::price_identifier::PriceIdentifier`,value:{bytes:[...Buffer.from(e,"hex")]}}});if(a.data?.content){if(a.data.content.dataType!=="moveObject")throw new Error("Price feed type mismatch");return this.fullClient.updateCache(t,a.data.content.fields.value),a.data.content.fields.value}}async verifyVaasAndGetHotPotato(n,e,t){if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let r=this.extractVaaBytesFromAccumulatorMessage(e[0]),i=await this.verifyVaas([r],n),[s]=n.moveCall({target:`${t}::pyth::create_authenticated_price_infos_using_accumulator`,arguments:[n.object(this.pythConfigs.pyth_state_id),n.pure(on.vector(on.u8()).serialize(Array.from(e[0]),{maxSize:Bs}).toBytes()),i[0],n.object(ci)]});return s}async buildUpdatePythPricePayload(n,e,t){let{pyth_state_id:r,pyth_published_at:i,pyth_package_id:s}=this.pythConfigs,a=(await this.getFeedInfoList(n)).map(f=>f.price_feed_id);if(n.length!==a.length)throw Error("find feed id fail");let o=await this.getPriceFeedsUpdateData(a);if(!o)throw new Error("get price update data fail");if(o.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let u=await this.verifyVaasAndGetHotPotato(e,o,i),l=0;for(let f of a){let p=await this.getPriceFeedObjectId(f);if(!p)throw new Error(`Price feed ${f} not found, please create it first`);u=t({tx:e,coinType:n[l],priceUpdatesHotPotato:u,priceInfoObjectId:p}),l+=1}return e.moveCall({target:`${i}::hot_potato_vector::destroy`,arguments:[u],typeArguments:[`${s}::price_info::PriceInfo`]}),e}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let n=await this.fullClient.getObject({id:this.pythConfigs.pyth_state_id,options:{showContent:!0}});if(!n.data?.content||n.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=n.data.content.fields.base_update_fee}return this.baseUpdateFee}async updatePriceFeeds(n,e,t){let r=this.pythConfigs.pyth_package_id,i=await this.verifyVaasAndGetHotPotato(n,e,r),s=await this.getBaseUpdateFee(),a=n.splitCoins(n.gas,t.map(()=>n.pure.u64(s))),o=[],u=0;for(let l of t){let f=await this.getPriceFeedObjectId(l);if(!f)throw new Error(`Price feed ${l} not found, please create it first`);o.push(f),[i]=n.moveCall({target:`${r}::pyth::update_single_price_feed`,arguments:[n.object(this.pythConfigs.pyth_state_id),i,n.object(f),a[u],n.object(ci)]}),u++}return n.moveCall({target:`${r}::hot_potato_vector::destroy`,arguments:[i],typeArguments:[`${r}::price_info::PriceInfo`]}),o}async buildUpdatePythPricePayloadV2(n,e,t){if(n.length===0)return e;let r=(await this.getFeedInfoList(n)).map(o=>o.price_feed_id);if(n.length!==r.length)throw Error("find feed id fail");let i=await this.getPriceFeedsUpdateData(r);if(!i)throw new Error("get price update data fail");if(i.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let s=await this.updatePriceFeeds(e,i,r),a=0;for(let o of s)t({tx:e,coinType:n[a],priceUpdatesHotPotato:{},priceInfoObjectId:o}),a+=1;return e}getFeedInfoByJson(n){let e=Ps(n,!1);return _u[e]}async getFeedInfo(n,e){let t=`getFeedInfo_${n}`,r=this.fullClient.getCache(t,e);if(r)return r;let i=this.getFeedInfoByJson(n);if(i)return i;let{feed_info_handle:s}=this.pythConfigs;if(!s)throw new Error("feed_info_handle is not set");let a=await this.fullClient.getDynamicFieldObject({parentId:s,name:{type:"0x1::type_name::TypeName",value:Ps(n,!0)}}),{fields:o}=a.data.content.fields.value,u={coin_type:n,price_feed_id:lu(o.price_feed_id),coin_decimals:o.coin_decimals};return console.log("\u{1F680} ~ PythPriceModule ~ getFeedInfo ~ info:",u),this.fullClient.updateCache(t,u),u}},Ir=Gr(Wr(),1),bd=new Ir.default(0),Js=new Ir.default(1),mi=new Ir.default(2),wd=mi.pow(new Ir.default(128)),vd=mi.pow(new Ir.default(64)).sub(Js),kd=mi.pow(new Ir.default(128)).sub(Js);fn.config({precision:64,rounding:fn.ROUND_DOWN,toExpNeg:-64,toExpPos:64});var Cd=Gr(Wr(),1),Td=Gr(Wr(),1);var Md=Gr(Wr(),1);import{SuiGraphQLClient as Hu}from"@mysten/sui/graphql";import{SuiJsonRpcClient as Ku}from"@mysten/sui/jsonRpc";import{DeepBookClient as Ru}from"@mysten/deepbook-v3";import{bcs as L}from"@mysten/sui/bcs";import{Transaction as ae,coinWithBalance as ya}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as rt,normalizeStructTag as wt,normalizeSuiObjectId as Du}from"@mysten/sui/utils";import{Base64 as Uu}from"js-base64";import{coinWithBalance as ia}from"@mysten/sui/transactions";import{SUI_TYPE_ARG as Cu,normalizeStructTag as Tu,normalizeSuiObjectId as _i}from"@mysten/sui/utils";var bu=/^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;function Ys(n){return n.startsWith("0x")?n:`0x${n}`}function gi(n){return n.startsWith("0x")?`${n.slice(2)}`:n}function wu(n,e=4,t=4){let r=Math.max(e,1),i=Math.max(t,1);return`${n.slice(0,r+2)} ... ${n.slice(-i)}`}function Id(n,e=4,t=4){return wu(Ys(n),e,t)}function Pd(n,e={leadingZero:!0}){if(typeof n!="string")return!1;let t=n;if(e.leadingZero){if(!n.startsWith("0x"))return!1;t=t.substring(2)}return bu.test(t)}function vu(n){if(!Buffer.isBuffer(n))if(Array.isArray(n))n=Buffer.from(n);else if(typeof n=="string")exports.isHexString(n)?n=Buffer.from(exports.padToEven(exports.stripHexPrefix(n)),"hex"):n=Buffer.from(n);else if(typeof n=="number")n=exports.intToBuffer(n);else if(n==null)n=Buffer.allocUnsafe(0);else if(n.toArray)n=Buffer.from(n.toArray());else throw new Error("invalid type");return n}function Bd(n){return Ys(vu(n).toString("hex"))}function qd(n){let e=new ArrayBuffer(4),t=new DataView(e);for(let i=0;i<n.length;i++)t.setUint8(i,n.charCodeAt(i));return t.getUint32(0,!0)}function ku(n){let e,t,r,i,s;e="";let a=n.length;for(t=0;t<a;)switch(r=n.charCodeAt(t++),r>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:e+=n.charAt(t-1);break;case 12:case 13:i=n.charCodeAt(t++),e+=String.fromCharCode((r&31)<<6|i&63);break;case 14:i=n.charCodeAt(t++),s=n.charCodeAt(t++),e+=String.fromCharCode((r&15)<<12|(i&63)<<6|(s&63)<<0);break}return e}function Rd(n){let e="",t=gi(n),r=t.length/2;for(let i=0;i<r;i++)e+=String.fromCharCode(Number.parseInt(t.substr(i*2,2),16));return ku(e)}var Mu=0,ra=1,Su=2;function ea(n,e){return n===e?Mu:n<e?ra:Su}function Au(n,e){let t=0,r=n.length<=e.length?n.length:e.length,i=ea(n.length,e.length);for(;t<r;){let s=ea(n.charCodeAt(t),e.charCodeAt(t));if(t+=1,s!==0)return s}return i}function Fd(n,e){return Au(n,e)===ra}function ta(n,...e){let t=Array.isArray(e[e.length-1])?e.pop():[],i=[n,...e].filter(Boolean).join("::");return t&&t.length&&(i+=`<${t.join(", ")}>`),i}function Ld(n){return n.split("::")[0]}function Et(n){try{let e=n.replace(/\s/g,""),r=e.match(/(<.+>)$/)?.[0]?.match(/(\w+::\w+::\w+)(?:<.*?>(?!>))?/g);if(r){e=e.slice(0,e.indexOf("<"));let u={...Et(e),type_arguments:r.map(l=>Et(l).source_address)};return u.type_arguments=u.type_arguments.map(l=>se.isSuiCoin(l)?l:Et(l).source_address),u.source_address=ta(u.full_address,u.type_arguments),u}let i=e.split("::"),a={full_address:e,address:e===wi||e===na?"0x2":_i(i[0]),module:i[1],name:i[2],type_arguments:[],source_address:""};return a.full_address=`${a.address}::${a.module}::${a.name}`,a.source_address=ta(a.full_address,a.type_arguments),a}catch{return{full_address:n,address:"",module:"",name:"",type_arguments:[],source_address:n}}}function yi(n){return Et(n).source_address}function Ou(n){return n.toLowerCase().startsWith("0x")?_i(n):n}var Vd=(n,e=!0)=>{let t=n.split("::"),r=t.shift(),i=_i(r);return e&&(i=gi(i)),`${i}::${t.join("::")}`};function bi(n){for(let e in n){let t=typeof n[e];if(t==="object")bi(n[e]);else if(t==="string"){let r=n[e];n[e]=Ou(r)}}}var Zd=Tu(Cu);var Eu="0x2::coin::Coin",xu=/^0x2::coin::Coin<(.+)>$/,Hd=1e3,Kd=500,Qd=100,Xd=100,Jd=1e3,wi="0x2::sui::SUI",na="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",Yd="SUI",eh=450,th="0x0000000000000000000000000000000000000005",se=class{static getCoinTypeArg(e){let t=e.type.match(xu);return t?t[1]:null}static isSUI(e){let t=se.getCoinTypeArg(e);return t?se.getCoinSymbol(t)==="SUI":!1}static getCoinSymbol(e){return e.substring(e.lastIndexOf(":")+1)}static getBalance(e){return BigInt(e.fields.balance)}static totalBalance(e,t){let r=BigInt(0);return e.forEach(i=>{t===i.coinAddress&&(r+=BigInt(i.balance))}),r}static getID(e){return e.fields.id.id}static getCoinTypeFromArg(e){return`${Eu}<${e}>`}static getCoinAssets(e,t){let r=[];return t.forEach(i=>{yi(i.coinAddress)===yi(e)&&r.push(i)}),r}static isSuiCoin(e){return Et(e).full_address===wi}static selectCoinObjectIdGreaterThanOrEqual(e,t,r=[]){let i=se.selectCoinAssetGreaterThanOrEqual(e,t,r),s=i.selectedCoins.map(u=>u.coinObjectId),a=i.remainingCoins,o=i.selectedCoins.map(u=>u.balance.toString());return{objectArray:s,remainCoins:a,amountArray:o}}static selectCoinAssetGreaterThanOrEqual(e,t,r=[]){let i=se.sortByBalance(e.filter(l=>!r.includes(l.coinObjectId))),s=se.calculateTotalBalance(i);if(s<t)return{selectedCoins:[],remainingCoins:i};if(s===t)return{selectedCoins:i,remainingCoins:[]};let a=BigInt(0),o=[],u=[...i];for(;a<s;){let l=t-a,f=u.findIndex(g=>g.balance>=l);if(f!==-1){o.push(u[f]),u.splice(f,1);break}let p=u.pop();p.balance>0&&(o.push(p),a+=p.balance)}return{selectedCoins:se.sortByBalance(o),remainingCoins:se.sortByBalance(u)}}static sortByBalance(e){return e.sort((t,r)=>t.balance<r.balance?-1:t.balance>r.balance?1:0)}static sortByBalanceDes(e){return e.sort((t,r)=>t.balance>r.balance?-1:t.balance<r.balance?0:1)}static calculateTotalBalance(e){return e.reduce((t,r)=>t+r.balance,BigInt(0))}static buildCoinWithBalance(e,t,r){return e===BigInt(0)&&se.isSuiCoin(t)?r.add(ia({balance:e,useGasCoin:!1})):r.add(ia({balance:e,type:t}))}};var sa=6e4,aa=3e5,Qt=864e5;function Br(n){return Date.parse(new Date().toString())+n}var Pr=class{overdueTime;value;constructor(e,t=0){this.overdueTime=t,this.value=e}isValid(){return this.value===null?!1:this.overdueTime===0?!0:!(Date.parse(new Date().toString())>this.overdueTime)}};import{Ed25519Keypair as oa}from"@mysten/sui/keypairs/ed25519";import{Secp256k1Keypair as ca}from"@mysten/sui/keypairs/secp256k1";import{fromBase64 as ua,fromHex as la}from"@mysten/sui/utils";import wn from"decimal.js";function T(n){return wn.isDecimal(n)?n:new wn(n===void 0?0:n)}function vi(n){return T(10).pow(T(n).abs())}var fr=(n,e)=>{try{return T(n).toDP(e,wn.ROUND_DOWN).toString()}catch{return n}},ki=(n,e)=>wn.max(T(n),T(e));function Kr(n,e){let t=vi(T(e));return Number(T(n).mul(t))}function lh(n,e=32){return BigInt.asUintN(e,BigInt(n)).toString()}function dh(n,e=32){return Number(BigInt.asIntN(e,BigInt(n)))}function mr(n,e){let t=vi(T(e));return Number(T(n).div(t))}function hh(n,e="hex"){if(n instanceof Uint8Array){let r=Buffer.from(n);return oa.fromSecretKey(r)}let t=e==="hex"?la(n):ua(n);return oa.fromSecretKey(t)}function ph(n,e="hex"){if(n instanceof Uint8Array){let r=Buffer.from(n);return ca.fromSecretKey(r)}let t=e==="hex"?la(n):ua(n);return ca.fromSecretKey(t)}var da=async n=>new Promise(e=>{setTimeout(()=>{e(1)},n)});var ha={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},pa={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6};function fa(...n){console.log("DeepbookV3_Utils_Sdk###",...n)}function qr(n){return n.data}function ju(n){if(n.error&&"object_id"in n.error&&"version"in n.error&&"digest"in n.error){let{error:e}=n;return{objectId:e.object_id,version:e.version,digest:e.digest}}}function Iu(n){if(n.error&&"object_id"in n.error&&!("version"in n.error)&&!("digest"in n.error))return n.error.object_id}function ma(n){if("reference"in n)return n.reference;let e=qr(n);return e?{objectId:e.objectId,version:e.version,digest:e.digest}:ju(n)}function ga(n){return"objectId"in n?n.objectId:ma(n)?.objectId??Iu(n)}function _h(n){return"version"in n?n.version:ma(n)?.version}function Pu(n){return n.data!==void 0}function Bu(n){return n.content!==void 0}function yh(n){let e=qr(n);if(e?.content?.dataType==="package")return e.content.disassembled}function Ci(n){let e="data"in n?qr(n):n;if(!(!e||!Bu(e)||e.content.dataType!=="moveObject"))return e.content}function qu(n){return Ci(n)?.type}function bh(n){let e=Pu(n)?n.data:n;return!e?.type&&"data"in n?e?.content?.dataType==="package"?"package":qu(n):e?.type}function wh(n){return qr(n)?.previousTransaction}function vh(n){return qr(n)?.owner}function kh(n){let e=qr(n)?.display;return e||{data:null,error:null}}function _a(n){let e=Ci(n)?.fields;if(e)return"fields"in e?e.fields:e}function Ch(n){return Ci(n)?.hasPublicTransfer??!1}var Ti=1e6,vt=1e9,$u={coinType:"0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP",decimals:6},Nu={coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",decimals:6},kn=class{_sdk;_deep;_cache={};constructor(e){this._sdk=e,this._deep=e.sdkOptions.network==="mainnet"?Nu:$u}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareBalanceManager(){let e=new ae,t=e.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`});return e.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[e.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),t],typeArguments:[]}),e.moveCall({target:"0x2::transfer::public_share_object",arguments:[t],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),e}createAndDepsit({account:e,coin:t,amountToDeposit:r}){let i=new ae;i.setSenderIfNotSet(e);let s=i.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::new`}),a=ya({type:t.coinType,balance:BigInt(r)});return i.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[s,a],typeArguments:[t.coinType]}),i.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::cetus_balance_manager::check_and_add_deepbook_balance_manager_indexer`,arguments:[i.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),s],typeArguments:[]}),i.moveCall({target:"0x2::transfer::public_share_object",arguments:[s],typeArguments:[`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::BalanceManager`]}),i}depositIntoManager({account:e,balanceManager:t,coin:r,amountToDeposit:i,tx:s}){let a=s||new ae;if(t){a.setSenderIfNotSet(e);let o=ya({type:r.coinType,balance:BigInt(i)});return a.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::deposit`,arguments:[a.object(t),o],typeArguments:[r.coinType]}),a}return null}withdrawFromManager({account:e,balanceManager:t,coin:r,amountToWithdraw:i,returnAssets:s,txb:a}){let o=a||new ae,u=o.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::balance_manager::withdraw`,arguments:[o.object(t),o.pure.u64(i)],typeArguments:[r.coinType]});return s?u:(o.transferObjects([u],e),o)}withdrawManagersFreeBalance({account:e,balanceManagers:t,tx:r=new ae}){for(let i in t)t[i].forEach(a=>{let o=r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::withdraw`,arguments:[r.object(i),r.pure.u64(a.amount)],typeArguments:[a.coinType]});r.transferObjects([o],e)});return r}async getBalanceManager(e,t=!0){let r=`getBalanceManager_${e}`,i=this.getCache(r,t);if(!t&&i!==void 0)return i;try{let s=new ae;s.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::get_balance_managers_by_owner`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),s.pure.address(e)],typeArguments:[]});let u=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s}))?.events?.filter(f=>f.type===`${this._sdk.sdkOptions.deepbook_utils.package_id}::cetus_balance_manager::GetCetusBalanceManagerList`)?.[0]?.parsedJson?.deepbook_balance_managers||[],l=[];return u.forEach(f=>{l.push({balanceManager:f,cetusBalanceManager:""})}),this.updateCache(r,l,864e5),l||[]}catch(s){throw s instanceof Error?s:new Error(String(s))}}withdrawSettledAmounts({poolInfo:e,balanceManager:t},r=new ae){let i=r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::generate_proof_as_owner`,arguments:[r.object(t)]});return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::withdraw_settled_amounts`,arguments:[r.object(e.address),r.object(t),i],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),r}async getManagerBalance({account:e,balanceManager:t,coins:r}){try{let i=new ae;r.forEach(o=>{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[i.object(t)],typeArguments:[o.coinType]})});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i}),a={};return s.results?.forEach((o,u)=>{let l=r[u],f=o.returnValues[0][0],p=L.U64.parse(new Uint8Array(f)),g=T(p),v=g.eq(0)?"0":g.div(Math.pow(10,l.decimals)).toString();a[l.coinType]={adjusted_balance:v,balance:g.toString()}}),a}catch(i){throw i instanceof Error?i:new Error(String(i))}}async getAccountAllManagerBalance({account:e,coins:t}){try{let r=new ae,i=await this.getBalanceManager(e,!0);if(!Array.isArray(i)||i.length===0)return{};i.forEach(o=>{t.forEach(u=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::balance`,arguments:[r.object(o.balanceManager)],typeArguments:[u.coinType]})})});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}),a={};return i.forEach((o,u)=>{let l={},f=u*t.length;t.forEach((p,g)=>{let v=f+g,C=s.results?.[v];if(C){let S=C.returnValues[0][0],j=L.U64.parse(new Uint8Array(S)),x=T(j),q=x.eq(0)?"0":x.div(Math.pow(10,p.decimals)).toString();l[p.coinType]={adjusted_balance:q,balance:x.toString()}}}),a[o.balanceManager]=l}),a}catch(r){throw r instanceof Error?r:new Error(String(r))}}async getMarketPrice(e){try{let t=new ae;t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::mid_price`,arguments:[t.object(e.address),t.object(rt)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let i=(await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:t})).results[0]?.returnValues[0]?.[0],s=Number(L.U64.parse(new Uint8Array(i))),a=Math.pow(10,e.baseCoin.decimals).toString(),o=Math.pow(10,e.quoteCoin.decimals).toString();return T(s).mul(a).div(o).div(vt).toString()}catch(t){return fa("getMarketPrice ~ error:",t),"0"}}async getPools(e=!1){let t="Deepbook_getPools",r=this.getCache(t,e);if(r!==void 0)return r;let i=await this._sdk.fullClient?.queryEventsByPage({MoveEventModule:{module:"pool",package:this._sdk.sdkOptions.deepbook.package_id}}),s=/<([^>]+)>/,a=[];return i?.data?.forEach(o=>{let u=o?.parsedJson,l=o.type.match(s);if(l){let p=l[1].split(", ");a.push({...u,baseCoinType:p[0],quoteCoinType:p[1]})}}),this.updateCache(t,a,864e5),a}async getQuoteQuantityOut(e,t,r){let i=new ae;i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quote_quantity_out`,arguments:[i.object(e.address),i.pure.u64(t),i.object(rt)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:i}),a=String(L.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),o=String(L.U64.parse(new Uint8Array(s.results[0].returnValues[1][0]))),u=String(L.U64.parse(new Uint8Array(s.results[0].returnValues[2][0])));return{baseQuantityDisplay:T(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),baseOutDisplay:T(a).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:T(o).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:T(u).div(Ti).toString(),baseQuantity:t,baseOut:a,quoteOut:o,deepRequired:u}}async getBaseQuantityOut(e,t,r){let i=new ae;i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_base_quantity_out`,arguments:[i.object(e.address),i.pure.u64(t),i.object(rt)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let s=await this._sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:i}),a=String(L.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),o=String(L.U64.parse(new Uint8Array(s.results[0].returnValues[1][0]))),u=String(L.U64.parse(new Uint8Array(s.results[0].returnValues[2][0])));return{quoteQuantityDisplay:T(t).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:T(a).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:T(o).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:T(u).div(Ti).toString(),quoteQuantity:t,baseOut:a,quoteOut:o,deepRequired:u}}async getQuantityOut(e,t,r,i){let s=new ae;s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_quantity_out`,arguments:[s.object(e.address),s.pure.u64(t),s.pure.u64(r),s.object(rt)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let a=await this._sdk.fullClient.devInspectTransactionBlock({sender:i,transactionBlock:s}),o=Number(L.U64.parse(new Uint8Array(a.results[0].returnValues[0][0]))),u=Number(L.U64.parse(new Uint8Array(a.results[0].returnValues[1][0]))),l=Number(L.U64.parse(new Uint8Array(a.results[0].returnValues[2][0])));return{baseQuantityDisplay:T(t).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteQuantityDisplay:T(r).div(Math.pow(10,e.quoteCoin.decimals)).toString(),baseOutDisplay:T(o).div(Math.pow(10,e.baseCoin.decimals)).toString(),quoteOutDisplay:T(u).div(Math.pow(10,e.quoteCoin.decimals)).toString(),deepRequiredDisplay:T(l).div(Ti).toString(),baseQuantity:t,quoteQuantity:r,baseOut:o,quoteOut:u,deepRequired:l}}async getReferencePool(e){let t=await this.getPools(),r=e.baseCoin.coinType,i=e.quoteCoin.coinType,s=this._deep.coinType;for(let a=0;a<t.length;a++){let o=t[a];if(o.address===e.address)continue;let u=[o.baseCoinType,o.quoteCoinType];if(o.baseCoinType===s&&(u.includes(r)||u.includes(i)))return o}return null}async updateDeepPrice(e,t){let r=await this.getReferencePool(e);return r?(t.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::add_deep_price_point`,arguments:[t.object(e.address),t.object(r.pool_id),t.object(rt)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType,r.baseCoinType,r.quoteCoinType]}),t):null}async estimatedMaxFee(e,t,r,i,s,a,o){let u=this.deepCoin;try{let{taker_fee:l,maker_fee:f}=e,p=T(l).div(vt).toString(),g=T(f).div(vt).toString(),v=await this.getMarketPrice(e),C=a?r:v!=="0"?v:o;if(C==="0")throw new Error("Cannot get market price");let S=Math.pow(10,e.baseCoin.decimals).toString(),j=Math.pow(10,e.quoteCoin.decimals).toString(),x=T(C).div(S).mul(j).mul(vt).toString();if(i){let U=await this.getMarketPrice(e),R=T(a?r:U!=="0"?U:o).div(S).mul(j).mul(vt).toString(),ne=await this.getOrderDeepPrice(e);if(!ne)throw new Error("Cannot get deep price");let ie=ki(R,r),ue=T(t).mul(T(p)).mul(T(ne.deep_per_asset)).div(T(vt)),oe=T(t).mul(T(g)).mul(T(ne.deep_per_asset)).div(T(vt));ne.asset_is_base||(ue=ue.mul(ie).div(T(vt)),oe=oe.mul(ie).div(T(vt)));let Je=ue.ceil().toString(),ut=oe.ceil().toString();return{takerFee:Je,makerFee:ut,takerFeeDisplay:mr(Je,u.decimals).toString(),makerFeeDisplay:mr(ut,u.decimals).toString(),feeType:u.coinType}}if(s){let U=ki(x,a?r:v),Q=T(t).mul(U).mul(T(p).mul(1.25)).div(T(vt)).ceil().toFixed(0),R=T(t).mul(U).mul(T(g).mul(1.25)).div(T(vt)).ceil().toFixed(0);return{takerFee:Q,makerFee:R,takerFeeDisplay:mr(Q,e.quoteCoin.decimals).toString(),makerFeeDisplay:mr(R,e.quoteCoin.decimals).toString(),feeType:e.quoteCoin.coinType}}let q=T(t).mul(T(p).mul(1.25)).ceil().toFixed(0),A=T(t).mul(T(g).mul(1.25)).ceil().toFixed(0);return{takerFee:q,makerFee:A,takerFeeDisplay:mr(q,e.baseCoin.decimals).toString(),makerFeeDisplay:mr(A,e.baseCoin.decimals).toString(),feeType:e.baseCoin.coinType}}catch(l){throw l instanceof Error?l:new Error(String(l))}}async getOrderDeepPrice(e,t=!0){let r=`getOrderDeepPrice_${e.address}}`,i=this.getCache(r);if(i!==void 0)return i;try{let s=new ae,a=!1;t&&e?.baseCoin?.coinType!==this._deep.coinType&&e?.quoteCoin?.coinType!==this._deep.coinType&&await this.updateDeepPrice(e,s)&&(a=!0),s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order_deep_price`,arguments:[s.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let o=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.sdkOptions.simulationAccount.address,transactionBlock:s}),u=a?o.results[1]?.returnValues[0]?.[0]:o.results[0]?.returnValues[0]?.[0],l=this.parseOrderDeepPrice(new Uint8Array(u));return this.updateCache(r,l,6e4),l}catch{return await da(2e3),this.getOrderDeepPrice(e,!1)}}parseOrderDeepPrice(e){let t=new DataView(e.buffer),r=t.getUint8(0)!==0,i=Number(t.getBigUint64(1,!0));return{asset_is_base:r,deep_per_asset:i}}getCoinAssets(e,t,r){return se.buildCoinWithBalance(BigInt(T(t).abs().ceil().toString()),e,r)}async getTransactionRelatedBalance(e,t,r,i,s,a,o){let u=this.deepCoin;if(!o)return{baseManagerBlance:"0",quoteManagerBlance:"0",feeManaerBalance:"0"};try{let l=[{coinType:e.baseCoin.coinType,decimals:e.baseCoin.decimals},{coinType:e.quoteCoin.coinType,decimals:e.quoteCoin.decimals}];i&&l.push(u);let f=await this.getManagerBalance({account:s,balanceManager:o,coins:l}),p=f?.[t]?.balance||"0",g=f?.[r]?.balance||"0",v=a&&f?.[u.coinType]?.balance||"0";return{baseManagerBlance:p,quoteManagerBlance:g,feeManaerBalance:v}}catch(l){throw l instanceof Error?l:new Error(String(l))}}getFeeAsset(e,t,r,i,s,a,o,u,l){let f=T(e).gt(0)&&u,p="0";if(!f)return{feeAsset:this.getEmptyCoin(l,t),haveDepositFee:"0"};if(a||o){let g=T(s).sub(a?i:r);p=g.lte(0)?e:g.sub(e).lt(0)?g.sub(e).toString():"0"}else p=T(s).sub(e).lt("0")?T(s).sub(e).abs().toString():"0";return{feeAsset:T(p).gt("0")?this.getCoinAssets(t,p,l):this.getEmptyCoin(l,t),haveDepositFee:p}}async getTransactionRelatedAssets(e,t,r,i,s,a,o,u,l){try{let f=this.deepCoin,p=wt(e.baseCoin.coinType),g=wt(e.quoteCoin.coinType),v=p===f.coinType,C=g===f.coinType,S=!v&&!C,{baseManagerBlance:j,quoteManagerBlance:x,feeManaerBalance:q}=await this.getTransactionRelatedBalance(e,p,g,S,a,o,u);console.log("\u{1F680}\u{1F680}\u{1F680} ~ deepbookUtilsModule.ts:897 ~ DeepbookUtilsModule ~ getTransactionRelatedAssets ~ quoteManagerBlance:",{baseManagerBlance:j,quoteManagerBlance:x});let A,U,Q=!1;if(s){o||(r=T(r).add(T(i)).toString());let ne=T(x).sub(r).toString();T(ne).lt(0)?(Q=!0,U=this.getCoinAssets(g,ne,l)):U=this.getEmptyCoin(l,g),A=this.getEmptyCoin(l,p)}else{o||(t=T(t).add(T(i)).toString());let ne=T(j).sub(t).toString();T(ne).lt(0)?(Q=!0,A=this.getCoinAssets(p,ne,l)):A=this.getEmptyCoin(l,p),U=this.getEmptyCoin(l,g)}let R=this.getFeeAsset(i,f.coinType,t,r,q,C,v,o,l);return{baseAsset:A,quoteAsset:U,feeAsset:R,haveDeposit:Q}}catch(f){throw f instanceof Error?f:new Error(String(f))}}async getMarketTransactionRelatedAssets(e,t,r,i,s,a,o,u,l,f){try{let p=this.deepCoin,g=wt(e.baseCoin.coinType),v=wt(e.quoteCoin.coinType),C=g===p.coinType,S=v===p.coinType,j=!C&&!S,x=await this.getTransactionRelatedBalance(e,g,v,j,a,o,u),{feeManaerBalance:q}=x,A=T(x.baseManagerBlance).add(T(f?.base||"0")).toString(),U=T(x.quoteManagerBlance).add(T(f?.quote||"0")).toString(),Q;o&&T(q).lt(i)?Q=this.getCoinAssets(p.coinType,T(i).sub(q).toString(),l):Q=this.getEmptyCoin(l,p.coinType);let R,ne;if(s){o||(r=T(r).add(T(i)).toString());let ie=T(U).sub(r).toString();if(T(ie).lt(0)){let ue;T(U).gt(0)&&(ue=this.withdrawFromManager({account:a,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:U,returnAssets:!0,txb:l}));let oe=this.getCoinAssets(v,ie,l);ue&&l.mergeCoins(oe,[ue]),ne=oe}else ne=this.withdrawFromManager({account:a,balanceManager:u,coin:e.quoteCoin,amountToWithdraw:r,returnAssets:!0,txb:l});R=this.getEmptyCoin(l,g)}else{o||(t=T(t).add(T(i)).toString());let ie=T(A).sub(t).toString();if(T(ie).lt(0)){let ue;T(A).gt(0)&&(ue=this.withdrawFromManager({account:a,balanceManager:u,coin:e.baseCoin,amountToWithdraw:A,returnAssets:!0,txb:l}));let oe=this.getCoinAssets(g,ie,l);ue&&l.mergeCoins(oe,[ue]),R=oe}else R=this.withdrawFromManager({account:a,balanceManager:u,coin:e.baseCoin,amountToWithdraw:t,returnAssets:!0,txb:l});ne=this.getEmptyCoin(l,v)}return{baseAsset:R,quoteAsset:ne,feeAsset:Q}}catch(p){throw p instanceof Error?p:new Error(String(p))}}async createDepositThenPlaceLimitOrder({poolInfo:e,priceInput:t,quantity:r,orderType:i,isBid:s,maxFee:a,account:o,payWithDeep:u,expirationTimestamp:l=Date.now()+31536e8}){try{let f=this.deepCoin,p=e.address,g=e.baseCoin.decimals,v=e.quoteCoin.decimals,C=e.baseCoin.coinType,S=e.quoteCoin.coinType,j=T(t).mul(10**(v-g+9)).toString(),x=wt(C),q=wt(S),A=new ae,U,Q,R=await this._sdk.getOwnerCoinAssets(o);if(s){let oe=T(t).mul(T(r).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();u||(oe=T(oe).add(T(a)).toString()),Q=se.buildCoinWithBalance(BigInt(oe),q,A)}else{let oe=r;u||(oe=T(r).abs().add(T(a)).toString()),U=se.buildCoinWithBalance(BigInt(oe),x,A)}let ne=u?T(a).gt(0)?se.buildCoinWithBalance(BigInt(T(a).abs().ceil().toString()),f.coinType,A):this.getEmptyCoin(A,f.coinType):this.getEmptyCoin(A,f.coinType),ie=A.moveCall({typeArguments:[s?C:S],target:"0x2::coin::zero",arguments:[]}),ue=[A.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),A.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),A.object(p),s?ie:U,s?Q:ie,ne,A.pure.u8(i),A.pure.u8(0),A.pure.u64(j),A.pure.u64(r),A.pure.bool(s),A.pure.bool(!1),A.pure.u64(l),A.object(rt)];return A.moveCall({typeArguments:[x,q],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_limit_order`,arguments:ue}),A}catch(f){throw f instanceof Error?f:new Error(String(f))}}getEmptyCoin(e,t){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}async createDepositThenPlaceMarketOrder({poolInfo:e,quantity:t,isBid:r,maxFee:i,account:s,payWithDeep:a,slippage:o=.01}){try{let u=e.address,l=e.baseCoin.coinType,f=e.quoteCoin.coinType,p=wt(l),g=wt(f),v=new ae,C,S,j=t,x,q=await this.getOrderBook(e,"all",6);if(r){let Q=q?.ask?.[0]?.price||"0",R=T(Q).mul(T(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();x=T(R).plus(T(R).mul(o)).ceil().toString()}else{let Q=await q?.bid?.[0]?.price||"0",R=T(Q).mul(T(t).div(Math.pow(10,e.baseCoin.decimals))).mul(Math.pow(10,e.quoteCoin.decimals)).toString();x=T(R).minus(T(R).mul(o)).floor().toString()}r?(a||(x=T(x).add(T(i)).toString()),S=this.getCoinAssets(g,x,v),C=this.getEmptyCoin(v,p)):(a||(j=T(j).add(T(i)).toString()),S=this.getEmptyCoin(v,g),C=this.getCoinAssets(p,j,v));let A=a?T(i).gt(0)?se.buildCoinWithBalance(BigInt(T(i).abs().ceil().toString()),this.deepCoin.coinType,v):this.getEmptyCoin(v,this.deepCoin.coinType):this.getEmptyCoin(v,this.deepCoin.coinType),U=[v.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),v.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),v.object(u),C,S,A,v.pure.u8(0),v.pure.u64(t),v.pure.bool(r),v.pure.bool(a),v.pure.u64(x),v.object(rt)];return v.moveCall({typeArguments:[p,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::create_deposit_then_place_market_order_v2`,arguments:U}),v}catch(u){throw u instanceof Error?u:new Error(String(u))}}async placeLimitOrder({balanceManager:e,poolInfo:t,priceInput:r,quantity:i,isBid:s,orderType:a,maxFee:o,account:u,payWithDeep:l,expirationTimestamp:f=Date.now()+31536e8}){try{let p=this.deepCoin,g=T(r).mul(10**(t.quoteCoin.decimals-t.baseCoin.decimals+9)).toString(),v=t.baseCoin.coinType,C=t.quoteCoin.coinType,S=new ae,j=s?T(r).mul(T(i).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString():"0",x=s?"0":i,{baseAsset:q,quoteAsset:A,feeAsset:U,haveDeposit:Q}=await this.getTransactionRelatedAssets(t,x,j,o,s,u,l,e,S);if(Q){let ie=[S.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),S.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),S.object(t.address),S.object(e),q,A,U.feeAsset,S.pure.u8(a),S.pure.u8(0),S.pure.u64(g),S.pure.u64(i),S.pure.bool(s),S.pure.bool(l),S.pure.u64(f),S.object(rt)];return S.moveCall({typeArguments:[v,C],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_limit_order_by_owner`,arguments:ie}),S}let R=new ae;T(U.haveDepositFee).gt(0)&&this.depositIntoManager({account:u,balanceManager:e,coin:p,amountToDeposit:U.haveDepositFee,tx:R});let ne=[R.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),R.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),R.object(t.address),R.object(e),R.pure.u8(a),R.pure.u8(0),R.pure.u64(g),R.pure.u64(i),R.pure.bool(s),R.pure.bool(l),R.pure.u64(f),R.object(rt)];return R.moveCall({typeArguments:[v,C],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::place_limit_order`,arguments:ne}),R}catch(p){throw p instanceof Error?p:new Error(String(p))}}modifyOrder({balanceManager:e,poolInfo:t,orderId:r,newOrderQuantity:i}){let s=new ae;return s.moveCall({typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::modify_order`,arguments:[s.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),s.object(e),s.object(t.address),s.pure.u128(r),s.pure.u64(i),s.object(rt)]}),s}async getBestAskprice(e){try{let{baseCoin:t,quoteCoin:r}=e,i=new ae,s=await this.getMarketPrice(e),a=T(s).gt(0)?s:Math.pow(10,-1),o=Math.pow(10,6),u=T(a).mul(Math.pow(10,9+r.decimals-t.decimals)).toString(),l=T(o).mul(Math.pow(10,9+r.decimals-t.decimals)).toString();i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(u),i.pure.u64(l),i.pure.bool(!1),i.object(rt)],typeArguments:[t.coinType,r.coinType]});let f=this._sdk.sdkOptions.simulationAccount.address,p=await this._sdk.fullClient.devInspectTransactionBlock({sender:f,transactionBlock:i}),g=[],v=p.results[0].returnValues[0][0],C=L.vector(L.u64()).parse(new Uint8Array(v)),S=p.results[0].returnValues[1][0],j=L.vector(L.u64()).parse(new Uint8Array(S));return C.forEach((x,q)=>{let A=T(x).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),U=T(j[q]).div(Math.pow(10,t.decimals)).toString();g.push({price:A,quantity:U})}),g?.[0]?.price||0}catch{return 0}}async getBestBidprice(e){try{let{baseCoin:t,quoteCoin:r}=e,i=new ae,s=await this.getMarketPrice(e),a=T(s).gt(0)?T(s).div(3).toNumber():Math.pow(10,-6),o=T(s).gt(0)?s:Math.pow(10,6),u=T(a).mul(Math.pow(10,9+r.decimals-t.decimals)).toString(),l=T(o).mul(Math.pow(10,9+r.decimals-t.decimals)).toString();i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[i.object(e.address),i.pure.u64(fr(u,0)),i.pure.u64(fr(l,0)),i.pure.bool(!0),i.object(rt)],typeArguments:[t.coinType,r.coinType]});let f=this._sdk.sdkOptions.simulationAccount.address,p=await this._sdk.fullClient.devInspectTransactionBlock({sender:f,transactionBlock:i}),g=[],v=p.results[0].returnValues[0][0],C=L.vector(L.u64()).parse(new Uint8Array(v)),S=p.results[0].returnValues[1][0],j=L.vector(L.u64()).parse(new Uint8Array(S));return C.forEach((x,q)=>{let A=T(x).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),U=T(j[q]).div(Math.pow(10,t.decimals)).toString();g.push({price:A,quantity:U})}),g?.[0]?.price||0}catch{return 0}}async getBestAskOrBidPrice(e,t){try{let{baseCoin:r,quoteCoin:i}=e,s=new ae,a=await this.getMarketPrice(e),o,u;t?(o=T(a).gt(0)?T(a).div(3).toNumber():Math.pow(10,-6),u=T(a).gt(0)?a:Math.pow(10,6)):(o=T(a).gt(0)?a:Math.pow(10,-1),u=T(a).gt(0)?T(a).mul(3).toNumber():Math.pow(10,6));let l=T(o).mul(Math.pow(10,9+i.decimals-r.decimals)).toString(),f=T(u).mul(Math.pow(10,9+i.decimals-r.decimals)).toString();s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(fr(l,0)),s.pure.u64(fr(f,0)),s.pure.bool(t),s.object(rt)],typeArguments:[r.coinType,i.coinType]});let p=this._sdk.sdkOptions.simulationAccount.address,g=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:s}),v=[],C=g.results[0].returnValues[0][0],S=L.vector(L.u64()).parse(new Uint8Array(C)),j=g.results[0].returnValues[1][0],x=L.vector(L.u64()).parse(new Uint8Array(j));return S.forEach((q,A)=>{let U=T(q).div(Math.pow(10,9+i.decimals-r.decimals)).toString(),Q=T(x[A]).div(Math.pow(10,r.decimals)).toString();v.push({price:U,quantity:Q})}),v?.[0]?.price||0}catch{return 0}}async placeMarketOrder({balanceManager:e,poolInfo:t,baseQuantity:r,quoteQuantity:i,isBid:s,maxFee:a,account:o,payWithDeep:u,slippage:l=.01,settled_balances:f={base:"0",quote:"0"}}){try{let p=wt(t.baseCoin.coinType),g=wt(t.quoteCoin.coinType),v=new ae;f&&(T(f.base).gt(0)||T(f.quote).gt(0))&&this.withdrawSettledAmounts({poolInfo:t,balanceManager:e},v);let{baseAsset:C,quoteAsset:S,feeAsset:j}=await this.getMarketTransactionRelatedAssets(t,r,i,a,s,o,u,e,v,f),x=await this.getOrderBook(t,"all",6);if(s){let U=x?.ask?.[0]?.price||"0",Q=T(U).mul(T(r).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();i=T(Q).plus(T(Q).mul(l)).ceil().toString()}else{let U=await x?.bid?.[0]?.price||"0",Q=T(U).mul(T(r).div(Math.pow(10,t.baseCoin.decimals))).mul(Math.pow(10,t.quoteCoin.decimals)).toString();i=T(Q).minus(T(Q).mul(l)).floor().toString()}let q=i,A=[v.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),v.object(this._sdk.sdkOptions.deepbook_utils.cetus_balance_manager_indexer_id),v.object(t.address),v.object(e),C,S,j,v.pure.u8(0),v.pure.u64(r),v.pure.bool(s),v.pure.bool(u),v.pure.u64(q),v.object(rt)];return v.setSenderIfNotSet(o),v.moveCall({typeArguments:[p,g],target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::deposit_then_place_market_order_by_owner_v2`,arguments:A}),v}catch(p){throw p instanceof Error?p:new Error(String(p))}}async getOrderInfoList(e,t){try{let r=new ae;e.forEach(l=>{let f=l?.pool,p=l?.orderId;r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_order`,arguments:[r.object(f.pool_id),r.pure.u128(BigInt(p))],typeArguments:[f.baseCoinType,f.quoteCoinType]})});let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:r}),s=L.struct("ID",{bytes:L.Address}),a=L.struct("OrderDeepPrice",{asset_is_base:L.bool(),deep_per_asset:L.u64()}),o=L.struct("Order",{balance_manager_id:s,order_id:L.u128(),client_order_id:L.u64(),quantity:L.u64(),filled_quantity:L.u64(),fee_is_deep:L.bool(),order_deep_price:a,epoch:L.u64(),status:L.u8(),expire_timestamp:L.u64()}),u=[];return i?.results?.forEach(l=>{let f=l.returnValues[0][0],p=o.parse(new Uint8Array(f));u.push(p)}),u}catch{return[]}}decodeOrderId(e){let t=e>>BigInt(127)===BigInt(0),r=e>>BigInt(64)&(BigInt(1)<<BigInt(63))-BigInt(1),i=e&(BigInt(1)<<BigInt(64))-BigInt(1);return{isBid:t,price:r,orderId:i}}async getOpenOrder(e,t,r,i,s=!1,a=new ae){let o;if(i)o=i;else{a.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[a.object(e.address),s?r:a.object(r)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});let g=(await this._sdk.fullClient.devInspectTransactionBlock({sender:t,transactionBlock:a})).results[s?1:0].returnValues[0][0];o=L.struct("VecSet",{constants:L.vector(L.U128)}).parse(new Uint8Array(g)).constants}if(o.length===0)return[];let u=o.map(p=>({pool:{pool_id:e.address,baseCoinType:e.baseCoin.coinType,quoteCoinType:e.quoteCoin.coinType},orderId:p})),l=await this.getOrderInfoList(u,t)||[],f=[];return l.forEach(p=>{let g=this.decodeOrderId(BigInt(p.order_id));f.push({...p,price:g.price,isBid:g.isBid,pool:e})}),f}async getAllMarketsOpenOrders(e,t){try{let r=await this.getPools(),i=new ae;r.forEach(p=>{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[i.object(p.pool_id),i.object(t)],typeArguments:[p.baseCoinType,p.quoteCoinType]})});let a=(await this._sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i})).results?.map(p=>p.returnValues?.[0]?.[0])||[],o=L.struct("VecSet",{constants:L.vector(L.U128)}),u=[];a.forEach((p,g)=>{let v=o.parse(new Uint8Array(p)).constants;v.length>0&&v.forEach(C=>{u.push({pool:r[g],orderId:C})})});let l=await this.getOrderInfoList(u,e)||[],f=[];return u.forEach((p,g)=>{let v=this.decodeOrderId(BigInt(p.orderId)),C=l.find(S=>S.order_id===p.orderId)||{};f.push({...p,...C,price:v.price,isBid:v.isBid})}),f}catch(r){return console.log("\u{1F680} ~ DeepbookUtilsModule ~ getAllMarketsOpenOrders ~ error:",r),[]}}cancelOrders(e,t,r=new ae){return e.forEach(i=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::deepbookv3_utils::cancel_order`,arguments:[r.object(this._sdk.sdkOptions.deepbook_utils.global_config_id),r.object(t),r.object(i.poolInfo.address),r.pure.u128(i.orderId),r.object(rt)],typeArguments:[i.poolInfo.baseCoin.coinType,i.poolInfo.quoteCoin.coinType]})}),r}async getDeepbookOrderBook(e,t,r,i,s,a){let o=this._sdk.fullClient,l=await new Ru({client:o,address:s,network:"testnet",balanceManagers:{test1:{address:a,tradeCap:""}}}).getLevel2Range(e,t,r,i)}processOrderBookData(e,t,r,i){let s=e.returnValues[0][0],a=L.vector(L.u64()).parse(new Uint8Array(s)),o=e.returnValues[1][0],u=L.vector(L.u64()).parse(new Uint8Array(o)),l={};return a.forEach((p,g)=>{let v=T(p).div(Math.pow(10,9+r.decimals-t.decimals)).toString(),C=T(u[g]).div(Math.pow(10,t.decimals)).toString();l[v]?l[v]={price:v,quantity:T(l[v].quantity).add(C).toString()}:l[v]={price:v,quantity:C}}),Object.values(l)}getLevel2RangeTx(e,t,r,i,s=new ae){let{baseCoin:a,quoteCoin:o}=e,u=fr(T(r).mul(Math.pow(10,9+o.decimals-a.decimals)).toString(),0),l=fr(T(i).mul(Math.pow(10,9+o.decimals-a.decimals)).toString(),0);return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[s.object(e.address),s.pure.u64(u),s.pure.u64(l),s.pure.bool(t),s.object(rt)],typeArguments:[a.coinType,o.coinType]}),s}async fetchOrderBook(e,t,r,i,s,a){let o=new ae,{baseCoin:u,quoteCoin:l}=e;try{if(t==="bid"||t==="all"){let C=i,S=r==="0"?s:r;o=this.getLevel2RangeTx(e,!0,C,S,o)}if(t==="ask"||t==="all"){let C=r==="0"?i:r,S=s;o=this.getLevel2RangeTx(e,!1,C,S,o)}let f=this._sdk.sdkOptions.simulationAccount.address,p=await this._sdk.fullClient.devInspectTransactionBlock({sender:f,transactionBlock:o}),g=[];(t==="bid"||t==="all")&&(g=p.results?.[0]?this.processOrderBookData(p.results[0],u,l,a):[]);let v=[];if(t==="ask"||t==="all"){let C=t==="ask"?0:1;v=p.results?.[C]?this.processOrderBookData(p.results[C],u,l,a):[]}return{bid:g.sort((C,S)=>S.price-C.price),ask:v.sort((C,S)=>C.price-S.price)}}catch{let p=this._sdk.sdkOptions.simulationAccount.address,g=[],v=[];try{let C=this.getLevel2RangeTx(e,!0,i,r),S=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:C});g=S.results?.[0]?this.processOrderBookData(S.results[0],u,l,a):[]}catch{g=[]}try{let C=this.getLevel2RangeTx(e,!1,i,r),S=await this._sdk.fullClient.devInspectTransactionBlock({sender:p,transactionBlock:C});v=S.results?.[0]?this.processOrderBookData(S.results[0],u,l,a):[]}catch{v=[]}return{bid:g,ask:v}}}async getOrderBook(e,t,r){let i={bid:[],ask:[]};try{let s=await this.getMarketPrice(e),a=t,o=Math.pow(10,-r),u=Math.pow(10,r),l=await this.fetchOrderBook(e,a,s,o,u,r);return{bid:l?.bid,ask:l?.ask}}catch{return i}}async getOrderBookOrigin(e,t){try{let r=new ae,i=await this.getMarketPrice(e),{baseCoin:s,quoteCoin:a}=e;if(t==="bid"||t==="all"){let p=Math.pow(10,-6),g=i,v=T(p).mul(Math.pow(10,9+a.decimals-s.decimals)).toString(),C=T(g).mul(Math.pow(10,9+a.decimals-s.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(v),r.pure.u64(C),r.pure.bool(!0),r.object(rt)],typeArguments:[s.coinType,a.coinType]})}if(t==="ask"||t==="all"){let p=i,g=Math.pow(10,6),v=T(p).mul(Math.pow(10,9+a.decimals-s.decimals)).toString(),C=T(g).mul(Math.pow(10,9+a.decimals-s.decimals)).toString();r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::get_level2_range`,arguments:[r.object(e.address),r.pure.u64(v),r.pure.u64(C),r.pure.bool(!1),r.object(rt)],typeArguments:[s.coinType,a.coinType]})}let o=this._sdk.sdkOptions.simulationAccount.address,u=await this._sdk.fullClient.devInspectTransactionBlock({sender:o,transactionBlock:r}),l=[];if(t==="bid"||t==="all"){let p=u.results[0]?.returnValues[0]?.[0],g=L.vector(L.u64()).parse(new Uint8Array(p)),v=u.results[0]?.returnValues[1]?.[0],C=L.vector(L.u64()).parse(new Uint8Array(v));g.forEach((S,j)=>{let x=T(S).div(Math.pow(10,9+a.decimals-s.decimals)).toString(),q=T(C[j]).div(Math.pow(10,s.decimals)).toString();l.push({price:x,quantity:q})})}let f=[];if(t==="ask"||t==="all"){let p=t==="ask"?0:1,g=u.results[p]?.returnValues[0]?.[0],v=L.vector(L.u64()).parse(new Uint8Array(g)),C=u.results[p]?.returnValues[1]?.[0],S=L.vector(L.u64()).parse(new Uint8Array(C));v.forEach((j,x)=>{let q=T(j).div(Math.pow(10,9+a.decimals-s.decimals)).toString(),A=T(S[x]).div(Math.pow(10,s.decimals)).toString();f.push({price:q,quantity:A})})}return{bid:l,ask:f}}catch{return{bids:[],asks:[]}}}async getWalletBalance(e){let t=await this._sdk.fullClient?.getAllBalances({owner:e});return Object.fromEntries(t.map((i,s)=>[wt(i.coinType),i]))}async getAccount(e,t,r=new ae){for(let o=0;o<t.length;o++){let u=t[o];r.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::order_trader::get_account_id`,arguments:[r.object(u.address),typeof e=="string"?r.object(e):e],typeArguments:[u.baseCoin.coinType,u.quoteCoin.coinType]})}let i=await this._sdk.fullClient.devInspectTransactionBlock({sender:this._sdk.senderAddress,transactionBlock:r}),s;if(i?.events.length===0)return null;let a=[];return i?.events?.forEach((o,u)=>{s=o?.parsedJson;let l=s.account.open_orders.contents,f=s.account.owed_balances,p=s.account.settled_balances,g=s.account.unclaimed_rebates,v=s.account.taker_volume;a.push({balance_manager_id:e,open_orders:l,owed_balances:f,settled_balances:p,unclaimed_rebates:g,taker_volume:v,poolInfo:t[u]})}),a}async getSuiTransactionResponse(e,t=!1){let r=`${e}_getSuiTransactionResponse`,i=this.getCache(r,t);if(i!==void 0)return i;let s;try{s=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0,showBalanceChanges:!0,showInput:!0,showObjectChanges:!0}})}catch{s=await this._sdk.fullClient.getTransactionBlock({digest:e,options:{showEvents:!0,showEffects:!0}})}return this.updateCache(r,s,864e5),s}transformExtensions(e,t,r=!0){let i=[];for(let s of t){let{key:a}=s.fields,{value:o}=s.fields;if(a==="labels")try{o=JSON.parse(decodeURIComponent(Uu.decode(o)))}catch{}r&&(e[a]=o),i.push({key:a,value:o})}delete e.extension_fields,r||(e.extensions=i)}async getCoinConfigs(e=!1,t=!0){let r=this.sdk.sdkOptions.coinlist.handle,i=`${r}_getCoinConfigs`,s=this.getCache(i,e);if(s)return s;let o=(await this._sdk.fullClient.getDynamicFieldsByPage(r)).data.map(f=>f.objectId),u=await this._sdk.fullClient.batchGetObjects(o,{showContent:!0}),l=[];return u.forEach(f=>{let p=this.buildCoinConfig(f,t);this.updateCache(`${r}_${p.address}_getCoinConfig`,p,864e5),l.push({...p})}),this.updateCache(i,l,864e5),l}buildCoinConfig(e,t=!0){let r=_a(e);r=r.value.fields;let i={...r};return i.id=ga(e),i.address=Et(r.coin_type.fields.name).full_address,r.pyth_id&&(i.pyth_id=Du(r.pyth_id)),this.transformExtensions(i,r.extension_fields.fields.contents,t),delete i.coin_type,i}updateCache(e,t,r=3e5){let i=this._cache[e];i?(i.overdueTime=Br(r),i.value=t):i=new Pr(t,Br(r)),this._cache[e]=i}getCache(e,t=!1){let r=this._cache[e],i=r?.isValid();if(!t&&i)return r.value;i||delete this._cache[e]}async createPermissionlessPool({tickSize:e,lotSize:t,minSize:r,baseCoinType:i,quoteCoinType:s}){let a=new ae,o=se.buildCoinWithBalance(BigInt(500*10**6),"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",a);a.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}::pool::create_permissionless_pool`,typeArguments:[i,s],arguments:[a.object(this.sdk.sdkOptions.deepbook.registry_id),a.pure.u64(e),a.pure.u64(t),a.pure.u64(r),o]});try{let u=await this._sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:a});if(u.effects.status.status==="success")return a;if(u.effects.status.status==="failure"&&u.effects.status.error&&u.effects.status.error.indexOf('Some("register_pool") }, 1)')>-1)throw new Error("Pool already exists")}catch(u){throw u instanceof Error?u:new Error(String(u))}return a}};import{bcs as P}from"@mysten/sui/bcs";import{Transaction as H}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as ge,normalizeSuiAddress as Cn}from"@mysten/sui/utils";var Fh=({totalAssetsValue:n,totalDebtValue:e})=>T(e).eq(0)||T(n).eq(0)?"0":T(n).div(T(e)).toString(),ba=n=>{let{base_margin_pool_id:e,quote_margin_pool_id:t,enabled:r,pool_liquidation_reward:i,user_liquidation_reward:s}=n.value.fields,{liquidation_risk_ratio:a,min_borrow_risk_ratio:o,min_withdraw_risk_ratio:u,target_liquidation_risk_ratio:l}=n.value.fields.risk_ratios.fields;return{id:n.id.id,name:n.name,base_margin_pool_id:e,quote_margin_pool_id:t,enabled:r,pool_liquidation_reward:i,user_liquidation_reward:s,liquidation_risk_ratio:a,min_borrow_risk_ratio:o,min_withdraw_risk_ratio:u,target_liquidation_risk_ratio:l}},wa=(n,e)=>{let{deposit_coin_type:t}=e,r=n.id.id,{max_utilization_rate:i,min_borrow:s,protocol_spread:a,supply_cap:o}=n.config.fields.margin_pool_config.fields,{maintainer_fees:u,protocol_fees:l}=n.protocol_fees.fields,{total_supply:f,total_borrow:p}=n.state.fields,g=T(o).sub(f).toString();return{deposit_coin_type:t,id:r,supply_cap:o,total_supply:f,total_borrow:p,available_supply:g,max_utilization_rate:i,min_borrow:s,protocol_spread:a,maintainer_fees:u,protocol_fees:l}};var Mi=10n;function Fu(n,e){if(!Mi)throw new Error("oraclePriceMultiplierDecimal is required");if(n===0n)throw new Error("Invalid oracle price");if(e<0n){let t=10n**(Mi- -e);return n*t}return n/10n**(e+Mi)}var Rr=class{_sdk;hasChangeConnection=!1;_commonPythPrice;_cache={};constructor(e){this._sdk=e,this._commonPythPrice=new Xs(e.fullClient)}get sdk(){return this._sdk}async updatePythPriceIDs(e,t){let r=null,i=null;try{r=await this._commonPythPrice.getPriceFeedsUpdateData(e)}catch(o){i=o,console.log("Error: ",o)}if(r==null)throw new Error(`All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes. Detailed error: ${i?.message}`);let s=[];try{s=await this._commonPythPrice.updatePriceFeeds(t,r,e)}catch(o){throw new Error(`All Pyth price nodes are unavailable. Cannot fetch price data. Please switch to or add new available Pyth nodes in the pythUrls parameter when initializing AggregatorClient, for example: new AggregatorClient({ pythUrls: ["https://your-pyth-node-url"] }). Detailed error: ${o}`)}let a=new Map;for(let o=0;o<e.length;o++)a.set(e[o],s[o]);return a}priceCheck(e,t=60){let r=Math.floor(Date.now()/1e3);if(!(Math.abs(r-e.last_update_time)>t))return e}async getLatestPrice(e,t=!1){let r={},i=[];if(t?e.forEach(o=>{let u=this._sdk.getCache(`getLatestPrice_${o.coinType}`);u&&this.priceCheck(u,60)?r[o.coinType]=u:i.push(o.coinType)}):i=e.map(o=>o.coinType),i.length===0)return r;let s=e.map(o=>o.feed);return(await this._commonPythPrice.getLatestPriceFeeds(s))?.parsed?.forEach((o,u)=>{let l=o.price;if(l){let{price:f,expo:p}=l,g=T(f).mul(T(10).pow(T(p))).toString(),C={coin_type:e[u].coinType,price:g,oracle_price:0n,last_update_time:l.publish_time};C.oracle_price=Fu(BigInt(f),BigInt(p)),r[i[u]]=C,this._sdk.updateCache(`getLatestPrice_${C.coin_type}`,C)}}),r}};var Tn=class{_sdk;pythPrice;_deep;_cache={};constructor(e){if(!e)throw new Error("SDK instance is required");this._sdk=e,this.pythPrice=new Rr(e),this._deep=e.sdkOptions.network==="mainnet"?pa:ha}get sdk(){return this._sdk}get deepCoin(){return this._deep}createAndShareMarginManager(e,t=new H){if(!e)throw new Error("Pool info is required");if(!e.id)throw new Error("Pool ID is required");if(!e.baseCoin?.coinType||!e.quoteCoin?.coinType)throw new Error("Base and quote coin types are required");let{baseCoin:r,quoteCoin:i}=e;try{let{margin_manager:s,initializer:a}=this.createMarginManager(e,t);return this.shareMarginManager({marginManager:s,initializer:a,baseCoin:r,quoteCoin:i},t),{tx:t,margin_manager:s,initializer:a}}catch(s){throw new Error(`Failed to create and share margin manager: ${s instanceof Error?s.message:String(s)}`)}}createMarginManager(e,t=new H){if(console.log("\u{1F680}\u{1F680}\u{1F680} ~ marginUtilsModule.ts:90 ~ MarginUtilsModule ~ createMarginManager ~ poolInfo:",e),!e)throw new Error("Pool info is required");if(!e.id)throw new Error("Pool ID is required");let{id:r,baseCoin:i,quoteCoin:s}=e;try{let[a,o]=t.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::create_margin_manager`,arguments:[t.object(this.sdk.sdkOptions.margin_utils.versioned_id),t.object(r),t.object(this._sdk.sdkOptions.margin_utils.registry_id),t.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),t.object(ge)],typeArguments:[i.coinType,s.coinType]});return{tx:t,margin_manager:a,initializer:o}}catch(a){throw new Error(`Failed to create margin manager: ${a instanceof Error?a.message:String(a)}`)}}shareMarginManager({marginManager:e,initializer:t,baseCoin:r,quoteCoin:i},s=new H){try{return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::share_margin_manager`,arguments:[e,t],typeArguments:[r.coinType,i.coinType]}),s}catch(a){throw new Error(`Failed to share margin manager: ${a instanceof Error?a.message:String(a)}`)}}async getBalanceManagerByMarginManager(e){if(!e||typeof e!="string")throw new Error("Valid account address is required");let t=`
2
29
  query Events($filter: EventFilter) {
3
30
  events(filter: $filter) {
4
31
  nodes {
@@ -12,4 +39,19 @@
12
39
  }
13
40
  }
14
41
  }
15
- `,r={filter:{sender:e,type:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::BalanceManagerEvent`}};try{let n=await this.sdk.graphqlClient.query({query:t,variables:r});return n?.data?.events?.nodes?n.data.events.nodes.map(i=>i?.contents?.json):[]}catch(n){throw new Error(`Failed to query balance managers: ${n instanceof Error?n.message:String(n)}`)}}async getMarginManagerByAccount(e){if(!e||typeof e!="string")throw new Error("Valid account address is required");try{let n=((await this.sdk.fullClient.queryEventsByPage({MoveEventType:`${this._sdk.sdkOptions.margin_utils.package_id}::margin_utils::CreateMarginManagerEvent`}))?.data??[]).filter(u=>u.parsedJson?.owner===e);if(!n.length)return[];let s=n.map(u=>u.parsedJson?.margin_manager_id),o=(await this.sdk.fullClient.batchGetObjects(s,{showContent:!0})).map((u,m)=>({balanceManagerId:u?.data?.content?.fields?.balance_manager?.fields?.id?.id,marginManagerId:s[m]})),a=await Promise.all(o.map(({balanceManagerId:u})=>this.sdk.fullClient.getDynamicFields({parentId:u}))),d=new Map;return a.forEach((u,m)=>{let _=(u?.data??[]).find(b=>b?.name?.value?.pos0!==null);_&&d.set(o[m].marginManagerId,_.name.value.pos0)}),{finalResult:n.map(u=>{let m=u.parsedJson?.margin_manager_id;return{...u.parsedJson,referralKey:d.get(m)}}),referralMap:d}}catch(t){throw new Error(`Failed to get margin managers by account: ${t instanceof Error?t.message:String(t)}`)}}async getBaseBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new C.Transaction;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[s.object(t)],typeArguments:[r,n]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);return y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])).toString()}catch(i){throw new Error(`Failed to get base balance: ${i instanceof Error?i.message:String(i)}`)}}async getQuoteBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new C.Transaction;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[s.object(t)],typeArguments:[r,n]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);return y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])).toString()}catch(i){throw new Error(`Failed to get quote balance: ${i instanceof Error?i.message:String(i)}`)}}async getDeepBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new C.Transaction;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[s.object(t)],typeArguments:[r,n]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);return y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])).toString()}catch(i){throw new Error(`Failed to get base balance: ${i instanceof Error?i.message:String(i)}`)}}async getPoolMarginManagerBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManagers, baseCoinType, quoteCoinType) are required");let s=new C.Transaction,i=r===this.deepCoin.coinType,o=n===this.deepCoin.coinType,a=i||o;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[s.object(t)],typeArguments:[r,n]}),s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[s.object(t)],typeArguments:[r,n]}),a||s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[s.object(t)],typeArguments:[r,n]});let d=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!d.results||!d.results[0]||!d.results[0].returnValues||!d.results[0].returnValues[0])throw new Error(`Transaction failed: ${d.effects?.status?.error||"Unknown error"}`);let l=y.bcs.U64.parse(new Uint8Array(d.results[0].returnValues[0][0])),u=y.bcs.U64.parse(new Uint8Array(d.results[1].returnValues[0][0])),m=a?i?l:u:y.bcs.U64.parse(new Uint8Array(d.results[2].returnValues[0][0]));return{[r]:l.toString(),[n]:u.toString(),[this.deepCoin.coinType]:m.toString()}}catch(d){throw new Error(`Failed to getPoolMarginManagerBalance: ${d instanceof Error?d.message:String(d)}`)}}async getBorrowedShares({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}){if(!e||!t||!r||!n)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new C.Transaction;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::borrowed_shares`,arguments:[s.object(t)],typeArguments:[r,n]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!i.results||!i.results[0]||!i.results[0].returnValues||i.results[0].returnValues.length<2)throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);let o=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])),a=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0]));return{baseBorrowedShare:o,quoteBorrowedShare:a}}catch(i){throw new Error(`Failed to get borrowed shares: ${i instanceof Error?i.message:String(i)}`)}}managerState=({account:e,marginManager:t,baseCoin:r,quoteCoin:n,pool:s,baseMarginPool:i,quoteMarginPool:o,decimals:a=6,basePriceFeedObjectId:d,quotePriceFeedObjectId:l})=>u=>{u.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_manager::manager_state`,arguments:[u.object(t),u.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),u.object(d),u.object(l),u.object(s),u.object(i),u.object(o),u.object.clock()],typeArguments:[r.coinType,n.coinType]})};async getManagerState(e,t=new C.Transaction){let{account:r,marginManager:n,baseCoin:s,quoteCoin:i,pool:o,baseMarginPool:a,quoteMarginPool:d,decimals:l=6}=e;if(!r||!n||!o||!a||!d)throw new Error("All required parameters must be provided");if(!s?.feed||!i?.feed)throw new Error("Base and quote coin feeds are required");if(!s.scalar||!i.scalar)throw new Error("Base and quote coin scalars are required");try{let u=await this.pythPrice.updatePythPriceIDs([s.feed,i.feed],t),m=u.get(s.feed),p=u.get(i.feed);if(!m||!p)throw new Error("Failed to get price feed object IDs");t.add(this.managerState({...e,basePriceFeedObjectId:m,quotePriceFeedObjectId:p}));let _=await this.sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:t});if(!_.results||!_.results[0]||!_.results[0].returnValues||_.results[0].returnValues.length<14)throw new Error(`Failed to get margin manager state: ${_.effects?.status?.error||"Unknown error"}`);let b=(0,E.normalizeSuiAddress)(y.bcs.Address.parse(new Uint8Array(_.results[0].returnValues[0][0]))),w=(0,E.normalizeSuiAddress)(y.bcs.Address.parse(new Uint8Array(_.results[0].returnValues[1][0]))),f=Number(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[2][0])))/1e9,O=this.#e(BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[3][0]))),s.scalar,l),h=this.#e(BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[4][0]))),i.scalar,l),A=this.#e(BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[5][0]))),s.scalar,l),j=this.#e(BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[6][0]))),i.scalar,l),T=y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[7][0])),M=Number(y.bcs.u8().parse(new Uint8Array(_.results[0].returnValues[8][0]))),q=y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[9][0])),I=Number(y.bcs.u8().parse(new Uint8Array(_.results[0].returnValues[10][0]))),P=BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[11][0]))),D=BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[12][0]))),se=BigInt(y.bcs.U64.parse(new Uint8Array(_.results[0].returnValues[13][0])));return{managerId:b,deepbookPoolId:w,riskRatio:f,baseAsset:O,quoteAsset:h,baseDebt:A,quoteDebt:j,basePythPrice:T.toString(),basePythDecimals:M,quotePythPrice:q.toString(),quotePythDecimals:I,currentPrice:P,lowestTriggerAbovePrice:D,highestTriggerBelowPrice:se}}catch(u){throw new Error(`Failed to get manager state: ${u instanceof Error?u.message:String(u)}`)}}async calculateAssets({account:e,marginManager:t,pool:r,baseCoin:n,quoteCoin:s,tx:i=new C.Transaction}){if(!e||!t||!r)throw new Error("Account, marginManager, and pool are required");if(!n?.coinType||!s?.coinType)throw new Error("Base and quote coin types are required");try{i.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_manager::calculate_assets`,arguments:[i.object(t),i.object(r)],typeArguments:[n.coinType,s.coinType]});let o=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:i});if(!o.results||!o.results[0]||!o.results[0].returnValues||o.results[0].returnValues.length<2)throw new Error(`Transaction failed: ${o.effects?.status?.error||"Unknown error"}`);let a=o.results[0].returnValues[0][0],d=o.results[0].returnValues[1][0];if(!n.scalar||!s.scalar)throw new Error("Base and quote coin scalars are required");let l=y.bcs.U64.parse(new Uint8Array(a)),u=y.bcs.U64.parse(new Uint8Array(d));return{baseAsset:l.toString(),quoteAsset:u.toString(),tx:i}}catch(o){throw new Error(`Failed to calculate assets: ${o instanceof Error?o.message:String(o)}`)}}async getBorrowedAmount({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n,baseMarginPool:s,quoteMarginPool:i}){if(!e||!t||!r||!n||!s||!i)throw new Error("All parameters are required");try{let{baseBorrowedShare:o,quoteBorrowedShare:a}=await this.getBorrowedShares({account:e,marginManager:t,baseCoinType:r,quoteCoinType:n}),d=!!g(o).gt(g(a)),l=d?s:i,u=d?o:a,m=new C.Transaction;m.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_pool::borrow_shares_to_amount`,arguments:[m.object(l),m.pure.u64(BigInt(u)),m.object.clock()],typeArguments:[d?r:n]});let p=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:m});if(!p.results||!p.results[0]||!p.results[0].returnValues||!p.results[0].returnValues[0])throw new Error(`Transaction failed: ${p.effects?.status?.error||"Unknown error"}`);let _=y.bcs.U64.parse(new Uint8Array(p.results[0].returnValues[0][0]));return d?{baseBorrowedAmount:_.toString(),quoteBorrowedAmount:"0"}:{baseBorrowedAmount:"0",quoteBorrowedAmount:_.toString()}}catch(o){throw new Error(`Failed to get borrowed amount: ${o instanceof Error?o.message:String(o)}`)}}async deposit({marginManager:e,baseCoin:t,quoteCoin:r,amount:n,depositCoinType:s},i=new C.Transaction){if(!e)throw new Error("Margin manager is required");if(!t?.coinType||!r?.coinType)throw new Error("Base and quote coin types are required");if(!n||BigInt(n)<=0n)throw new Error("Valid deposit amount is required");if(!t.feed||!r.feed)throw new Error("Base and quote coin feeds are required");try{let o=H.CoinAssist.buildCoinWithBalance(BigInt(n),s,i),a=await this.pythPrice.updatePythPriceIDs([t.feed,r.feed],i),d=a.get(t.feed),l=a.get(r.feed);if(!d||!l)throw new Error("Failed to get price feed object IDs");return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::deposit`,arguments:[i.object(this._sdk.sdkOptions.margin_utils.global_config_id),i.object(this._sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?i.object(e):e,i.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),i.object(d),i.object(l),o,i.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.coinType,r.coinType,s]}),i}catch(o){throw new Error(`Failed to deposit: ${o instanceof Error?o.message:String(o)}`)}}async withdraw({account:e,marginManager:t,baseMarginPool:r,quoteMarginPool:n,baseCoin:s,quoteCoin:i,pool:o,amount:a,withdrawCoinType:d},l=new C.Transaction){if(!e||!t||!r||!n||!o)throw new Error("All required parameters must be provided");if(!s?.coinType||!i?.coinType)throw new Error("Base and quote coin types are required");if(!a||BigInt(a)<=0n)throw new Error("Valid withdraw amount is required");if(!s.feed||!i.feed)throw new Error("Base and quote coin feeds are required");try{let u=await this.pythPrice.updatePythPriceIDs([s.feed,i.feed],l),m=u.get(s.feed),p=u.get(i.feed);if(!m||!p)throw new Error("Failed to get price feed object IDs");let _=l.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::withdraw`,arguments:[l.object(this._sdk.sdkOptions.margin_utils.global_config_id),l.object(this._sdk.sdkOptions.margin_utils.versioned_id),l.object(t),l.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),l.object(r),l.object(n),l.object(m),l.object(p),l.object(o),l.pure.u64(BigInt(a)),l.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[s.coinType,i.coinType,d]});return l.transferObjects([_],e),l}catch(u){throw new Error(`Failed to withdraw: ${u instanceof Error?u.message:String(u)}`)}}async borrowBase({marginManager:e,baseMarginPool:t,baseCoin:r,quoteCoin:n,pool:s,amount:i},o=new C.Transaction){if(!e||!t||!s)throw new Error("Margin manager, base margin pool, and pool are required");if(!r?.coinType||!n?.coinType)throw new Error("Base and quote coin types are required");if(!i||BigInt(i)<=0n)throw new Error("Valid borrow amount is required");if(!r.feed||!n.feed)throw new Error("Base and quote coin feeds are required");try{let a=await this.pythPrice.updatePythPriceIDs([r.feed,n.feed],o),d=a.get(r.feed),l=a.get(n.feed);if(!d||!l)throw new Error("Failed to get price feed object IDs");return o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::borrow_base`,arguments:[o.object(this.sdk.sdkOptions.margin_utils.global_config_id),o.object(this.sdk.sdkOptions.margin_utils.versioned_id),o.object(e),o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(t),o.object(d),o.object(l),o.object(s),o.pure.u64(BigInt(i)),o.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),o}catch(a){throw new Error(`Failed to borrow base: ${a instanceof Error?a.message:String(a)}`)}}async borrowQuote({marginManager:e,quoteMarginPool:t,baseCoin:r,quoteCoin:n,pool:s,amount:i},o=new C.Transaction){if(!e||!t||!s)throw new Error("Margin manager, quote margin pool, and pool are required");if(!r?.coinType||!n?.coinType)throw new Error("Base and quote coin types are required");if(!i||BigInt(i)<=0n)throw new Error("Valid borrow amount is required");if(!r.feed||!n.feed)throw new Error("Base and quote coin feeds are required");try{let a=await this.pythPrice.updatePythPriceIDs([r.feed,n.feed],o),d=a.get(r.feed),l=a.get(n.feed);if(!d||!l)throw new Error("Failed to get price feed object IDs");return o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::borrow_quote`,arguments:[o.object(this.sdk.sdkOptions.margin_utils.global_config_id),o.object(this.sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?o.object(e):e,o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(t),o.object(d),o.object(l),o.object(s),o.pure.u64(BigInt(i)),o.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),o}catch(a){throw new Error(`Failed to borrow quote: ${a instanceof Error?a.message:String(a)}`)}}async repayBase({marginManager:e,baseMarginPool:t,baseCoin:r,quoteCoin:n,amount:s},i=new C.Transaction){if(!e||!t||!r||!n)throw new Error("All required parameters (marginManager, baseMarginPool, baseCoin, quoteCoin) are required");if(s&&BigInt(s)<=0n)throw new Error("Repay amount must be greater than zero if provided");let o={marginManager:e,baseCoin:r,quoteCoin:n,amount:s,depositCoinType:r.coinType};await this.deposit(o,i);try{return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::repay_base`,arguments:[i.object(this._sdk.sdkOptions.margin_utils.global_config_id),i.object(this._sdk.sdkOptions.margin_utils.versioned_id),i.object(e),i.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),i.object(t),i.object.option({type:"u64",value:s?i.pure.u64(s):null}),i.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),i}catch(a){throw new Error(`Failed to repay base: ${a instanceof Error?a.message:String(a)}`)}}async repayQuote({marginManager:e,quoteMarginPool:t,baseCoin:r,quoteCoin:n,amount:s},i=new C.Transaction){if(!e||!t||!r||!n)throw new Error("All required parameters (marginManager, quoteMarginPool, baseCoin, quoteCoin) are required");if(s&&BigInt(s)<=0n)throw new Error("Repay amount must be greater than zero if provided");let o={marginManager:e,baseCoin:r,quoteCoin:n,amount:s,depositCoinType:n.coinType};await this.deposit(o,i);try{return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::repay_quote`,arguments:[i.object(this._sdk.sdkOptions.margin_utils.global_config_id),i.object(this._sdk.sdkOptions.margin_utils.versioned_id),i.object(e),i.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),i.object(t),i.object.option({type:"u64",value:s?i.pure.u64(s):null}),i.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[r.coinType,n.coinType]}),i}catch(a){throw new Error(`Failed to repay quote: ${a instanceof Error?a.message:String(a)}`)}}async repay({marginManager:e,baseMarginPool:t,quoteMarginPool:r,baseCoin:n,quoteCoin:s,isBase:i,amount:o},a=new C.Transaction){try{let d=this.sdk.senderAddress,l,u=o;o||(l=await this.getBorrowedAmount({account:d,marginManager:e,baseCoinType:n?.coinType,quoteCoinType:s?.coinType,baseMarginPool:t,quoteMarginPool:r}),u=i?l.baseBorrowedAmount:l.quoteBorrowedAmount);let m,p={marginManager:e,baseCoin:n,quoteCoin:s,depositCoinType:i?n.coinType:s.coinType};if(i){let _=await this.getBaseBalance({account:d,marginManager:e,baseCoinType:n?.coinType,quoteCoinType:s?.coinType});m=g(u).sub(_).toString()}else{let _=await this.getQuoteBalance({account:d,marginManager:e,baseCoinType:n?.coinType,quoteCoinType:s?.coinType});m=g(u).sub(_).toString()}g(m).gt(0)&&await this.deposit({...p,amount:m},a),a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::${i?"repay_base":"repay_quote"}`,arguments:[a.object(this._sdk.sdkOptions.margin_utils.global_config_id),a.object(this._sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(i?t:r),a.object.option({type:"u64",value:o?a.pure.u64(o):null}),a.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[n.coinType,s.coinType]})}catch{}return a}removeReferralKey=(e,t,r,n,s=new C.Transaction)=>{let i=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::pool::id`,typeArguments:[r,n],arguments:[s.object(t)]});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::unset_margin_manager_referral`,typeArguments:[r,n],arguments:[typeof e=="string"?s.object(e):e,i]})};async placeMarginMarketOrder({marginManager:e,poolInfo:t,selfMatchingOption:r,quantity:n,amountLimit:s,isBid:i,payWithDeep:o,exactBase:a,referralKey:d},l=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!n||BigInt(J(n,t.baseCoin.decimals||0))<=0n)throw new Error("Valid order quantity is required");if(!s||BigInt(J(s,t.baseCoin.decimals||0))<=0n)throw new Error("Valid order amount limit is required");let{id:u,baseCoin:m,quoteCoin:p}=t;if(m.decimals===void 0||p.decimals===void 0)throw new Error("Base and quote coin decimals are required");d&&this.removeReferralKey(e,u,m.coinType,p.coinType,l);try{return l.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_margin_market_order`,arguments:[l.object(this.sdk.sdkOptions.margin_utils.global_config_id),l.object(this.sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?l.object(e):e,l.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),l.object(u),l.pure.u8(r),l.pure.u64(n),l.pure.bool(i),l.pure.bool(o),l.pure.bool(a===void 0?!i:a),l.pure.u64(s),l.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[m.coinType,p.coinType]}),l}catch(_){throw new Error(`Failed to place market order: ${_ instanceof Error?_.message:String(_)}`)}}async placeMarginLimitOrder({marginManager:e,poolInfo:t,orderType:r,selfMatchingOption:n,priceInput:s,quantity:i,isBid:o,payWithDeep:a,expirationTimestamp:d=Date.now()+31536e8,referralKey:l},u=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!s||!i)throw new Error("Price and quantity are required");let{id:m,baseCoin:p,quoteCoin:_}=t;if(p.decimals===void 0||_.decimals===void 0)throw new Error("Base and quote coin decimals are required");try{let b=BigInt(g(s).mul(10**(_.decimals-p.decimals+9)).toString()),w=BigInt(J(i,p.decimals));if(b<=0n||w<=0n)throw new Error("Price and quantity must be greater than zero");return l&&this.removeReferralKey(e,m,p.coinType,_.coinType,u),u.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_margin_limit_order`,arguments:[u.object(this.sdk.sdkOptions.margin_utils.global_config_id),u.object(this.sdk.sdkOptions.margin_utils.versioned_id),u.object(e),u.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),u.object(m),u.pure.u8(r),u.pure.u8(n),u.pure.u64(b),u.pure.u64(w),u.pure.bool(o),u.pure.bool(a),u.pure.u64(d),u.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[p.coinType,_.coinType]}),u}catch(b){throw new Error(`Failed to place limit order: ${b instanceof Error?b.message:String(b)}`)}}modifyMarginOrder({marginManager:e,poolInfo:t,orderId:r,newQuantity:n},s=new C.Transaction){if(!e||!t||!r||!n)throw new Error("All parameters (marginManager, poolInfo, orderId, newQuantity) are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(t.baseCoin.decimals===void 0)throw new Error("Base coin decimals are required");try{let i=BigInt(J(n,t.baseCoin.decimals));if(i<=0n)throw new Error("New quantity must be greater than zero");return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::modify_margin_order`,arguments:[s.object(this.sdk.sdkOptions.margin_utils.global_config_id),s.object(this.sdk.sdkOptions.margin_utils.versioned_id),s.object(e),s.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),s.object(t.id),s.pure.u128(r),s.pure.u64(i),s.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),s}catch(i){throw new Error(`Failed to modify order: ${i instanceof Error?i.message:String(i)}`)}}cancelMarginOrder({marginManager:e,poolInfo:t,orderId:r},n=new C.Transaction){if(!e||!t||!r)throw new Error("All parameters (marginManager, poolInfo, orderId) are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");try{return n.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::cancel_margin_order`,arguments:[n.object(this.sdk.sdkOptions.margin_utils.global_config_id),n.object(this.sdk.sdkOptions.margin_utils.versioned_id),n.object(e),n.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),n.object(t.id),n.pure.u128(r),n.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),n}catch(s){throw new Error(`Failed to cancel order: ${s instanceof Error?s.message:String(s)}`)}}cancelAllMarginOrders({marginManager:e,poolInfo:t},r=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");try{return r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::cancel_all_margin_orders`,arguments:[r.object(this.sdk.sdkOptions.margin_utils.global_config_id),r.object(this.sdk.sdkOptions.margin_utils.versioned_id),r.object(e),r.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),r.object(t.id),r.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),r}catch(n){throw new Error(`Failed to cancel all orders: ${n instanceof Error?n.message:String(n)}`)}}placeReduceOnlyLimitOrder({marginManager:e,poolInfo:t,marginPoolId:r,orderType:n,selfMatchingOption:s,priceInput:i,quantity:o,isBid:a,payWithDeep:d,expirationTimestamp:l},u=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!r)throw new Error("Margin pool id is required");try{return u.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_reduce_only_limit_order`,arguments:[u.object(this.sdk.sdkOptions.margin_utils.global_config_id),u.object(this.sdk.sdkOptions.margin_utils.versioned_id),u.object(e),u.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),u.object(t.id),u.object(r),u.pure.u8(n),u.pure.u8(s),u.pure.u64(i),u.pure.u64(o),u.pure.bool(a),u.pure.bool(d),u.pure.u64(l),u.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType,a?t.quoteCoin.coinType:t.baseCoin.coinType]}),u}catch(m){throw new Error(`Failed to place reduce only limit order: ${m instanceof Error?m.message:String(m)}`)}}placeReduceOnlyMarketOrder({marginManager:e,poolInfo:t,marginPoolId:r,selfMatchingOption:n,quantity:s,isBid:i,payWithDeep:o},a=new C.Transaction){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!r)throw new Error("Margin pool id is required");try{return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_reduce_only_market_order`,arguments:[a.object(this.sdk.sdkOptions.margin_utils.global_config_id),a.object(this.sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(t.id),a.object(r),a.pure.u8(n),a.pure.u64(s),a.pure.bool(i),a.pure.bool(o),a.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType,i?t.quoteCoin.coinType:t.baseCoin.coinType]}),a}catch(d){throw new Error(`Failed to place reduce only market order: ${d instanceof Error?d.message:String(d)}`)}}async getAccountOpenOrders({poolInfo:e,marginManager:t}){try{let r=new C.Transaction,n=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(t)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});return await this.sdk.DeepbookUtils.getOpenOrder(e,this.sdk.senderAddress,n,void 0,!0,r)}catch(r){throw new Error(`Failed to get account open orders: ${r instanceof Error?r.message:String(r)}`)}}async getAccountAllMarketsOpenOrders(e,t){try{if(!e||!t||t.length===0)throw new Error("Account or pools are required");let r=[];for(let n=0;n<t.length;n++){let s=new C.Transaction,i=t[n];if(i.margin_manager_id){let o=await s.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[s.object(i.margin_manager_id)],typeArguments:[i.baseCoin.coinType,i.quoteCoin.coinType]}),a=await this.sdk.DeepbookUtils.getOpenOrder(i,this.sdk.senderAddress,o,void 0,!0,s);r.push(...a)}}return r}catch(r){throw new Error(`Failed to get account all markets open orders: ${r instanceof Error?r.message:String(r)}`)}}mintSupplierCap(e=new C.Transaction,t){let r=e.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::mint_supplier_cap`,arguments:[e.object(this._sdk.sdkOptions.margin_utils.versioned_id),e.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),e.object(E.SUI_CLOCK_OBJECT_ID)]});return t&&e.transferObjects([r],this.sdk.senderAddress),{tx:e,supplierCap:r}}async querySupplierCap(){try{return((await this.sdk.fullClient.queryEventsByPage({MoveEventType:`${this._sdk.sdkOptions.margin_utils.package_id}::margin_utils::SupplierCapCreatedEvent`}))?.data||[]).filter(n=>n.parsedJson?.owner===this.sdk.senderAddress)[0].parsedJson.supplier_cap_id}catch(e){throw new Error(`Failed to get account supplyCap: ${e instanceof Error?e.message:String(e)}`)}}mintSupplierCapAndSupply({marginPool:e,supplyCoinType:t,amount:r}){let n=new C.Transaction,{supplierCap:s}=this.mintSupplierCap(n,!1);return this.supply({marginPool:e,supplierCap:s,supplyCoinType:t,amount:r,tx:n}),n.transferObjects([s],this.sdk.senderAddress),n}supply({marginPool:e,supplierCap:t,supplyCoinType:r,amount:n,tx:s}){let i=s??new C.Transaction;if(!t)throw new Error("Either supplierCap must be provided");let o=H.CoinAssist.buildCoinWithBalance(BigInt(n),r,i);return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::supply`,typeArguments:[r],arguments:[i.object(this._sdk.sdkOptions.margin_utils.global_config_id),i.object(this._sdk.sdkOptions.margin_utils.versioned_id),i.object(e),i.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),i.object(t),o,i.pure.option("address","0x0"),i.object(E.SUI_CLOCK_OBJECT_ID)]}),i}supplierWithdraw({marginPool:e,withdrawCoinType:t,amount:r,supplierCapId:n,hasSwap:s,withdrawAll:i,tx:o=new C.Transaction}){let a=o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::supplier_withdraw`,typeArguments:[t],arguments:[o.object(this._sdk.sdkOptions.margin_utils.global_config_id),o.object(this._sdk.sdkOptions.margin_utils.versioned_id),o.object(e),o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(n),o.object.option({type:"u64",value:i?null:o.pure.u64(r)}),o.object(E.SUI_CLOCK_OBJECT_ID)]});return s?a:(o.transferObjects([a],this.sdk.senderAddress),o)}withdrawReferralFees({marginPool:e}){let t=new C.Transaction,r=t.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::withdraw_referral_fees`,arguments:[t.object(this._sdk.sdkOptions.margin_utils.versioned_id),t.object(e),t.object(this._sdk.sdkOptions.margin_utils.registry_id),t.object.option({type:"0x1",value:null}),t.object(E.SUI_CLOCK_OBJECT_ID)],typeArguments:[this.deepCoin.coinType]});return t.transferObjects([r],this.sdk.senderAddress),t}async getUserSupplyAmount({marginPool:e,supplyCoin:t,supplierCapId:r}){let n=new C.Transaction;n.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::get_user_supply_amount`,typeArguments:[t.coinType],arguments:[n.object(e),n.object(r),n.object(E.SUI_CLOCK_OBJECT_ID)]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:n});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);return this.#e(BigInt(y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),t.scalar,t.decimals)}async getDeepBookMarginRegistry(){let t=(await this.sdk.fullClient.getObject({id:this._sdk.sdkOptions.margin_utils.margin_registry_id,options:{showContent:!0}})).data.content.fields.inner.fields.id.id,r=await this.sdk.fullClient.getDynamicFieldObject({parentId:t,name:{type:"u64",value:"1"}}),n=r.data.content.fields.value.fields.pool_registry.fields.id.id,s=r.data.content.fields.value.fields.margin_pools.fields.id.id;return{pool_registry_table_id:n,margin_pool_table_id:s}}async getDeepBookPool(){let{data:e}=await this.sdk.fullClient.getDynamicFields({parentId:this.sdk.sdkOptions.margin_utils.pool_registry_table_id}),t=e.map(s=>s.objectId),r=await this.sdk.fullClient.batchGetObjects(t,{showContent:!0}),n=[];for(let s=0;s<r.length;s++){let i=r[s].data.content.fields;n.push(je(i))}return n}async getDeepBookMarginPool(){let{data:e}=await this.sdk.fullClient.getDynamicFields({parentId:this.sdk.sdkOptions.margin_utils.margin_pool_table_id}),t=e.map(a=>a.objectId),r=await this.sdk.fullClient.batchGetObjects(t,{showContent:!0}),n=[],s=[];for(let a=0;a<r.length;a++){let d=r[a].data.content.fields;s.push(d.value),n.push({deposit_coin_type:d.name.fields.name,id:d.id.id})}let i=await this.sdk.fullClient.batchGetObjects(s,{showContent:!0}),o=[];for(let a=0;a<i.length;a++){let d=i[a].data.content.fields;o.push(Be(d,n[a]))}return o}async getBaseQuantityIn(e,t,r,n=.01){let s=new C.Transaction;s.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_base_quantity_out":"::pool::get_base_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[s.object(e.address),s.pure.u64(t),s.object(E.SUI_CLOCK_OBJECT_ID)]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:s});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);let o=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])),a=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0])),d=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])),l=await this.sdk.DeepbookUtils.estimatedMaxFee(e,a.toString(),"",!1,!1,!1);return{quantityOut:g(t).sub(a.toString()).toString(),quantityInLeft:g(o.toString()).add(l.takerFee).mul(g(1+n)).ceil().toString(),deep_fee_amount:d.toString()}}async getQuoteQuantityIn(e,t,r,n=.01){let s=new C.Transaction;s.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_quote_quantity_out":"::pool::get_quote_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[s.object(e.address),s.pure.u64(t),s.object(E.SUI_CLOCK_OBJECT_ID)]});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:s});if(!i.results||!i.results[0]||!i.results[0].returnValues||!i.results[0].returnValues[0])throw new Error(`Transaction failed: ${i.effects?.status?.error||"Unknown error"}`);let o=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[0][0])),a=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[1][0])),d=y.bcs.U64.parse(new Uint8Array(i.results[0].returnValues[2][0])),l=await this.sdk.DeepbookUtils.estimatedMaxFee(e,a.toString(),"",!1,!0,!1);return{quantityOut:g(t).sub(o).toString(),quantityInLeft:g(a.toString()).add(g(l.takerFee)).mul(g(1+n)).ceil().toString(),deep_fee_amount:d.toString()}}async getBaseQuantityOutInput(e,t,r){let n=new C.Transaction;n.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_base_quantity_out":"::pool::get_base_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[n.object(e.address),n.pure.u64(t),n.object(E.SUI_CLOCK_OBJECT_ID)]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:n});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);let i=y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])),o=y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[1][0])),a=y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[2][0]));return{base_amount:i.toString(),quote_amount:o.toString(),deep_fee_amount:a.toString()}}async getQuoteQuantityOutInput(e,t,r){let n=new C.Transaction;n.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}::pool::${r?"get_quote_quantity_out":"get_quote_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[n.object(e.address),n.pure.u64(t),n.object(E.SUI_CLOCK_OBJECT_ID)]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:n});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);let i=y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])),o=y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[1][0])),a=y.bcs.U64.parse(new Uint8Array(s.results[0].returnValues[2][0]));return{base_amount:i.toString(),quote_amount:o.toString(),deep_fee_amount:a.toString()}}async getAccount(e,t){if(!e||!t)throw new Error("marginManager and poolInfo are required");let r=new C.Transaction,n=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(e)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]});return await this.sdk.DeepbookUtils.getAccount(n,[t],r)}async withdrawSettledAmounts({poolInfo:e,marginManager:t},r=new C.Transaction){return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::pool_proxy::withdraw_settled_amounts`,arguments:[r.object(this.sdk.sdkOptions.margin_utils.margin_registry_id),r.object(t),r.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),r}#e(e,t,r){if(t<=0||r<0)throw new Error("Scalar must be positive and decimals must be non-negative");let n=BigInt(t),s=e/n,i=e%n;if(i===0n)return s.toString();let o=t.toString().length-1,l=i.toString().padStart(o,"0").slice(0,r).replace(/0+$/,"");return l?`${s}.${l}`:s.toString()}async getMarginPoolStateForInterest(e){if(!e)throw new Error("marginPoolId is required");let t=await this.sdk.fullClient.getObject({id:e,options:{showContent:!0}});if(!t.data?.content?.fields)throw new Error(`Failed to fetch margin pool: ${e}`);let r=t.data.content.fields,n=r.state.fields,s=r.config.fields,i=s.interest_config.fields,o=s.margin_pool_config.fields;return{poolState:{total_supply:BigInt(n.total_supply),total_borrow:BigInt(n.total_borrow),supply_shares:BigInt(n.supply_shares),borrow_shares:BigInt(n.borrow_shares),last_update_timestamp:BigInt(n.last_update_timestamp)},interestConfig:{base_rate:BigInt(i.base_rate),base_slope:BigInt(i.base_slope),optimal_utilization:BigInt(i.optimal_utilization),excess_slope:BigInt(i.excess_slope)},marginPoolConfig:{protocol_spread:BigInt(o.protocol_spread),max_utilization_rate:BigInt(o.max_utilization_rate),min_borrow:BigInt(o.min_borrow),supply_cap:BigInt(o.supply_cap)}}}async getChainTimestamp(){let e=await this.sdk.fullClient.getLatestCheckpointSequenceNumber(),t=await this.sdk.fullClient.getCheckpoint({id:e});return BigInt(t.timestampMs)}async batchGetBorrowedShares({account:e,marginManagerList:t}){let r=new C.Transaction;return t.forEach(s=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::borrowed_shares`,arguments:[r.object(s.marginManagerId)],typeArguments:[s.baseCoinType,s.quoteCoinType]})}),(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r})).results.map((s,i)=>{let o=y.bcs.U64.parse(new Uint8Array(s.returnValues[0][0])),a=y.bcs.U64.parse(new Uint8Array(s.returnValues[1][0]));return{marginManagerId:t[i].marginManagerId,baseBorrowedShare:o,quoteBorrowedShare:a}})}async betchGetOpenOrders({account:e,marginManagerList:t},r=new C.Transaction,n=!1){t.forEach(p=>{let _=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(p.marginManagerId)],typeArguments:[p.baseCoinType,p.quoteCoinType]});r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[r.object(p.poolId),r.object(_)],typeArguments:[p.baseCoinType,p.quoteCoinType]}),r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::get_account_id_with_margin_manager`,arguments:[r.object(p.marginManagerId),r.object(p.poolId)],typeArguments:[p.baseCoinType,p.quoteCoinType]}),r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::locked_balance_with_margin_manager`,arguments:[r.object(p.marginManagerId),r.object(p.poolId)],typeArguments:[p.baseCoinType,p.quoteCoinType]})});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}),i=s.events.map((p,_)=>({marginManagerId:t[_].marginManagerId,...p?.parsedJson?.account?.settled_balances||{}})),o=s.results.filter(p=>p?.returnValues?.[0]?.[1]==="0x2::vec_set::VecSet<u128>"),a=y.bcs.struct("VecSet",{constants:y.bcs.vector(y.bcs.U128)}),d=[];o.forEach((p,_)=>{let b=a.parse(new Uint8Array(p.returnValues[0][0])).constants;b.length>0&&b.forEach(w=>{d.push({pool:{pool_id:t[_].poolId,baseCoinType:t[_].baseCoinType,quoteCoinType:t[_].quoteCoinType},marginManagerId:t[_].marginManagerId,orderId:w})})});let l=s.results.filter(p=>p?.returnValues?.length===3),u=[];l.forEach((p,_)=>{u.push({marginManagerId:t[_].marginManagerId,base:y.bcs.U64.parse(new Uint8Array(p.returnValues[0][0])),quote:y.bcs.U64.parse(new Uint8Array(p.returnValues[1][0])),deep:y.bcs.U64.parse(new Uint8Array(p.returnValues[2][0]))})});let m=[];return d.forEach((p,_)=>{let b=this.sdk.DeepbookUtils.decodeOrderId(BigInt(p.orderId));m.push({...p,price:b.price.toString(),isBid:b.isBid})}),{openOrders:m,settledBalances:i,lockedBalances:u}}async getSingleMarginManagerOpenOrders({account:e,marginManagerId:t,poolId:r,baseCoinType:n,quoteCoinType:s,baseMarginPool:i,quoteMarginPool:o}){let a=new C.Transaction,d=a.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[a.object(t)],typeArguments:[n,s]});a.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[a.object(r),d],typeArguments:[n,s]});let l=y.bcs.struct("VecSet",{constants:y.bcs.vector(y.bcs.U128)}),m=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:a})).results.find(h=>h?.returnValues?.[0]?.[1]==="0x2::vec_set::VecSet<u128>"),p=l.parse(new Uint8Array(m.returnValues[0][0])).constants,_=[];p.forEach(h=>{_.push({pool:{pool_id:r,baseCoinType:n,quoteCoinType:s},marginManagerId:t,orderId:h})});let b=_?.length>0?await this.sdk.DeepbookUtils.getOrderInfoList(_,e)||[]:[],w=[];_.forEach((h,A)=>{let j=this.sdk.DeepbookUtils.decodeOrderId(BigInt(h.orderId)),T=b.find(M=>M.order_id===h.orderId)||{};w.push({...h,...T,price:j.price.toString(),isBid:j.isBid})});let f={marginManagerId:t,base:"0",quote:"0",deep:"0"};if(b?.length>0){let h=new C.Transaction,A=h.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[h.object(t)],typeArguments:[n,s]});h.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::locked_balance`,arguments:[h.object(r),A],typeArguments:[n,s]});let T=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:h})).results.find(M=>M?.returnValues?.length===3);f={...f,base:y.bcs.U64.parse(new Uint8Array(T.returnValues[0][0])),quote:y.bcs.U64.parse(new Uint8Array(T.returnValues[1][0])),deep:y.bcs.U64.parse(new Uint8Array(T.returnValues[2][0]))}}let O={base:"0",quote:"0",deep:"0"};try{let h=new C.Transaction,A=h.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[h.object(t)],typeArguments:[n,s]});h.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::order_trader::get_account_id`,arguments:[h.object(r),A],typeArguments:[n,s]});let j=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:h});O={marginManagerId:t,...O,...j?.events?.parsedJson?.account?.settled_balances||{}}}catch{}return{openOrders:w,settledBalances:[O],lockedBalances:[f]}}async getAllPosRelevantData({account:e,marginManagerList:t}){try{let{openOrders:r,settledBalances:n,lockedBalances:s}=await this.betchGetOpenOrders({account:e,marginManagerList:t}),i=await this.batchGetBorrowedShares({account:e,marginManagerList:t}),o=new C.Transaction,a=0,d=[];t.forEach(m=>{o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[o.object(m.marginManagerId)],typeArguments:[m.baseCoinType,m.quoteCoinType]}),d[a]={type:"base_balance",marginManagerId:m.marginManagerId},a++,o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[o.object(m.marginManagerId)],typeArguments:[m.baseCoinType,m.quoteCoinType]}),d[a]={type:"quote_balance",marginManagerId:m.marginManagerId},a++,o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[o.object(m.marginManagerId)],typeArguments:[m.baseCoinType,m.quoteCoinType]}),d[a]={type:"deep_balance",marginManagerId:m.marginManagerId},a++;let p=i?.find(_=>_.marginManagerId===m.marginManagerId);if(p&&(Number(p.baseBorrowedShare)>0||Number(p.quoteBorrowedShare)>0)){let _=p.baseBorrowedShare,b=p.quoteBorrowedShare,w=!!g(_).gt(g(b)),f=w?m.baseMarginPool:m.quoteMarginPool,O=w?_:b;o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_pool::borrow_shares_to_amount`,arguments:[o.object(f),o.pure.u64(BigInt(O)),o.object.clock()],typeArguments:[w?m?.baseCoinType:m?.quoteCoinType]}),d[a]={type:w?"borrow_base_amount":"borrow_quote_amount",marginManagerId:m.marginManagerId},a++}});let l=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:o}),u=Object.fromEntries(t.map(m=>[m.marginManagerId,{...m,quote_balance:"0",base_balance:"0",deep_balance:"0",borrow_base_amount:"0",borrow_quote_amount:"0",open_orders:[],settled_balances:{base:"0",quote:"0",deep:"0"}}]));return l?.results?.forEach((m,p)=>{let _=d[p],b=y.bcs.U64.parse(new Uint8Array(m.returnValues[0][0]));u[_.marginManagerId]={...u[_.marginManagerId],[_.type]:b}}),r.forEach(m=>{u[m.marginManagerId].open_orders.push(m)}),n.forEach(m=>{u[m.marginManagerId].settled_balances=m}),s.forEach(m=>{u[m.marginManagerId].locked_balances=m}),Object.values(u).forEach(m=>{m.locked_balances&&m.settled_balances&&(m.locked_balances={...m.locked_balances,base:g(m.locked_balances.base||"0").minus(g(m.settled_balances.base||"0")).toString(),quote:g(m.locked_balances.quote||"0").minus(g(m.settled_balances.quote||"0")).toString(),deep:g(m.locked_balances.deep||"0").minus(g(m.settled_balances.deep||"0")).toString()})}),u}catch(r){throw new Error(`Failed to get all pos relevant data: ${r instanceof Error?r.message:String(r)}`)}}async addConditionalOrder(e,t){let{margin_utils:r}=this.sdk.sdkOptions,{global_config_id:n,versioned_id:s,margin_registry_id:i}=r,{margin_manager_id:o,pool_id:a,base_coin:d,quote_coin:l,conditional_order_id:u,pending_order:m,is_trigger_below_price:p,trigger_price:_}=e,b=await this.pythPrice.updatePythPriceIDs([d.feed,l.feed],t),w=b.get(d.feed),f=b.get(l.feed);if(!w||!f)throw new Error("Failed to get price feed object IDs");let O=t.moveCall({target:`${r.published_at}::margin_utils::new_condition`,arguments:[t.pure.bool(p),t.pure.u64(_)]}),h=this.newPendingOrder(m,t);t.moveCall({target:`${r.published_at}::margin_utils::add_conditional_order`,arguments:[t.object(n),t.object(s),t.object(o),t.object(a),t.object(w),t.object(f),t.object(i),typeof u=="string"?t.pure.u64(BigInt(u)):u,O,h,t.object(H.CLOCK_ADDRESS)],typeArguments:[d.coinType,l.coinType]})}newPendingOrder(e,t){let{margin_utils:r}=this.sdk.sdkOptions;if("price"in e){let{client_order_id:n,order_type:s,self_matching_option:i,price:o,quantity:a,is_bid:d,pay_with_deep:l,expire_timestamp:u}=e;return t.moveCall({target:`${r.published_at}::margin_utils::new_pending_limit_order`,arguments:[t.pure.u64(n),t.pure.u8(s),t.pure.u8(i),t.pure.u64(o),t.pure.u64(a),t.pure.bool(d),t.pure.bool(l),t.pure.u64(u)]})}else{let{client_order_id:n,self_matching_option:s,quantity:i,is_bid:o,pay_with_deep:a}=e;return t.moveCall({target:`${r.published_at}::margin_utils::new_pending_market_order`,arguments:[t.pure.u64(n),t.pure.u8(s),t.pure.u64(i),t.pure.bool(o),t.pure.bool(a)]})}}cancelAllConditionalOrders(e,t){let{margin_utils:r}=this.sdk.sdkOptions,{global_config_id:n,versioned_id:s}=r,{margin_manager_id:i,base_coin_type:o,quote_coin_type:a}=e;t.moveCall({target:`${r.published_at}::margin_utils::cancel_all_conditional_orders`,arguments:[t.object(n),t.object(s),t.object(i),t.object(H.CLOCK_ADDRESS)],typeArguments:[o,a]})}cancelConditionalOrders(e,t){let{margin_utils:r}=this.sdk.sdkOptions,{global_config_id:n,versioned_id:s}=r,{margin_manager_id:i,base_coin_type:o,quote_coin_type:a,conditional_order_id:d}=e;t.moveCall({target:`${r.published_at}::margin_utils::cancel_conditional_order`,arguments:[t.object(n),t.object(s),t.object(i),t.pure.u64(d),t.object(H.CLOCK_ADDRESS)],typeArguments:[o,a]})}async getConditionalOrders(e,t){let{deepbook:r}=this.sdk.sdkOptions;e.forEach(a=>{let{margin_manager_id:d,base_coin_type:l,quote_coin_type:u,conditional_order_ids:m}=a;m.forEach(p=>{t.moveCall({target:`${r.margin_package_id}::margin_manager::conditional_order`,arguments:[t.object(d),t.pure.u64(p)],typeArguments:[l,u]})})});let n=await this.sdk.fullClient.devInspectTransactionBlock({sender:(0,E.normalizeSuiAddress)("0x0"),transactionBlock:t});if(!n?.results)return[];let s=y.bcs.struct("Condition",{trigger_below_price:y.bcs.bool(),trigger_price:y.bcs.u64()}),i=y.bcs.struct("PendingOrder",{is_limit_order:y.bcs.bool(),client_order_id:y.bcs.u64(),order_type:y.bcs.option(y.bcs.u8()),self_matching_option:y.bcs.u8(),price:y.bcs.option(y.bcs.u64()),quantity:y.bcs.u64(),is_bid:y.bcs.bool(),pay_with_deep:y.bcs.bool(),expire_timestamp:y.bcs.option(y.bcs.u64())}),o=y.bcs.struct("ConditionalOrder",{conditional_order_id:y.bcs.u64(),condition:s,pending_order:i});return n.results.map(a=>{if(!a?.returnValues?.[0]?.[0])return null;try{let d=new Uint8Array(a.returnValues[0][0]);if(d.length===0)return null;let l;if(d[0]===0)return null;d[0]===1?l=d.subarray(1):l=d;let u=o.parse(l),m=this.normalizeConditionalOrder(u);return e.forEach(p=>{p.conditional_order_ids.find(b=>b===m.conditional_order_id)&&(m.margin_manager_id=p.margin_manager_id,m.base_coin_type=p.base_coin_type,m.quote_coin_type=p.quote_coin_type)}),m}catch{return null}})}async getConditionalOrderIds(e,t){t=t||new C.Transaction;let{deepbook:r}=this.sdk.sdkOptions,n={};return e.forEach(i=>{let{margin_manager_id:o,base_coin_type:a,quote_coin_type:d}=i;t.moveCall({target:`${r.margin_package_id}::margin_manager::conditional_order_ids`,arguments:[t.object(o)],typeArguments:[a,d]})}),(await this.sdk.fullClient.devInspectTransactionBlock({sender:(0,E.normalizeSuiAddress)("0x0"),transactionBlock:t})).results.forEach((i,o)=>{if(i?.returnValues?.[0]?.[0]){let a=new Uint8Array(i.returnValues[0][0]),d=y.bcs.vector(y.bcs.u64()).parse(a),l={margin_manager_id:e[o].margin_manager_id,base_coin_type:e[o].base_coin_type,quote_coin_type:e[o].quote_coin_type,conditional_order_ids:d.map(u=>u.toString())};n[e[o].margin_manager_id]=l}}),n}normalizeConditionalOrder(e){let t=r=>typeof r=="bigint"?String(r):r;return{margin_manager_id:"",base_coin_type:"",quote_coin_type:"",conditional_order_id:t(e.conditional_order_id),condition:{trigger_below_price:e.condition.trigger_below_price,trigger_price:t(e.condition.trigger_price)},pending_order:{is_limit_order:e.pending_order.is_limit_order,client_order_id:t(e.pending_order.client_order_id),order_type:e.pending_order.order_type,self_matching_option:e.pending_order.self_matching_option,price:e.pending_order.price,quantity:t(e.pending_order.quantity),is_bid:e.pending_order.is_bid,pay_with_deep:e.pending_order.pay_with_deep,expire_timestamp:e.pending_order.expire_timestamp}}}};var Ze=require("@mysten/sui/client"),re=class extends Ze.SuiClient{async queryEventsByPage(e,t="all"){let r=[],n=!0,s=t==="all",i=s?null:t.cursor;do{let o=await this.queryEvents({query:e,cursor:i,limit:s?null:t.limit});o.data?(r=[...r,...o.data],n=o.hasNextPage,i=o.nextCursor):n=!1}while(s&&n);return{data:r,nextCursor:i,hasNextPage:n}}async getOwnedObjectsByPage(e,t,r="all"){let n=[],s=!0,i=r==="all",o=i?null:r.cursor;do{let a=await this.getOwnedObjects({owner:e,...t,cursor:o,limit:i?null:r.limit});a.data?(n=[...n,...a.data],s=a.hasNextPage,o=a.nextCursor):s=!1}while(i&&s);return{data:n,nextCursor:o,hasNextPage:s}}async getDynamicFieldsByPage(e,t="all"){let r=[],n=!0,s=t==="all",i=s?null:t.cursor;do{let o=await this.getDynamicFields({parentId:e,cursor:i,limit:s?null:t.limit});o.data?(r=[...r,...o.data],n=o.hasNextPage,i=o.nextCursor):n=!1}while(s&&n);return{data:r,nextCursor:i,hasNextPage:n}}async batchGetObjects(e,t,r=50){let n=[];try{for(let s=0;s<Math.ceil(e.length/r);s++){let i=await this.multiGetObjects({ids:e.slice(s*r,r*(s+1)),options:t});n=[...n,...i]}}catch{}return n}async calculationTxGas(e){let{sender:t}=e.blockData;if(t===void 0)throw Error("sdk sender is empty");let r=await this.devInspectTransactionBlock({transactionBlock:e,sender:t}),{gasUsed:n}=r.effects;return Number(n.computationCost)+Number(n.storageCost)-Number(n.storageRebate)}async sendTransaction(e,t){try{return await this.signAndExecuteTransaction({transaction:t,signer:e,options:{showEffects:!0,showEvents:!0}})}catch{}}};var ve=Pe(require("decimal.js"));ve.default.config({precision:64,rounding:ve.default.ROUND_DOWN,toExpNeg:-64,toExpPos:64});var $=1000000000n,Ye=365n*24n*60n*60n*1000n;function Xe(c,e){return e===0n?0n:c*$/e}function et(c,e){let{base_rate:t,base_slope:r,optimal_utilization:n,excess_slope:s}=e;if(c<n)return t+c*r/$;{let i=c-n,o=n*r/$,a=i*s/$;return t+o+a}}function Me(c,e){let t=c*e,r=t/$;return t%$>0n?r+1n:r}function tt(c,e,t,r){let n=e.borrow_shares===0n?$:e.total_borrow*$/e.borrow_shares,s=Me(c,n),i=Xe(e.total_borrow,e.total_supply),o=et(i,t),a=r-e.last_update_timestamp,d=e.total_borrow*o/$*a/Ye,l=e.borrow_shares===0n?0n:Me(d,c*$/e.borrow_shares),u=s+l;return{confirmedDebt:s,estimatedInterest:l,totalDebt:u,annualInterestRate:o}}function er(c,e,t,r,n=60000n){let s=r+n,{totalDebt:i}=tt(c,e,t,s);return i}var ne=class{_cache={};_rpcModule;_deepbookUtils;_marginUtils;_pythPrice;_graphqlClient;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._rpcModule=new re({url:e.fullRpcUrl}),this._deepbookUtils=new ee(this),this._marginUtils=new te(this),this._pythPrice=new Z(this),this._graphqlClient=new rt.SuiGraphQLClient({url:e.graphqlUrl}),ae(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get MarginUtils(){return this._marginUtils}get PythPrice(){return this._pythPrice}get fullClient(){return this._rpcModule}get graphqlClient(){return this._graphqlClient}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,r=!0){let n=[],s=null,i=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,o=this.getCache(i,r);if(o)return o;for(;;){let a=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:s}):this.fullClient.getAllCoins({owner:e,cursor:s}));if(a.data.forEach(d=>{BigInt(d.balance)>0&&n.push({coinAddress:R(d.coinType).source_address,coinObjectId:d.coinObjectId,balance:BigInt(d.balance)})}),s=a.nextCursor,!a.hasNextPage)break}return this.updateCache(i,n,30*1e3),n}async getOwnerCoinBalances(e,t){let r=[];return t?r=[await this.fullClient.getBalance({owner:e,coinType:t})]:r=[...await this.fullClient.getAllBalances({owner:e})],r}updateCache(e,t,r=864e5){let n=this._cache[e];n?(n.overdueTime=z(r),n.value=t):n=new K(t,z(r)),this._cache[e]=n}getCache(e,t=!1){let r=this._cache[e],n=r?.isValid();if(!t&&n)return r.value;n||delete this._cache[e]}};var tr="0x0000000000000000000000000000000000000000000000000000000000000006",rr="pool_script",nr="pool_script_v2",sr="router",ir="router_with_partner",or="fetcher_script",ar="expect_swap",cr="utils",dr="0x1::coin::CoinInfo",ur="0x1::coin::CoinStore",lr="custodian_v2",gr="clob_v2",pr="endpoints_v2",mr=c=>{if(typeof c=="string"&&c.startsWith("0x"))return"object";if(typeof c=="number"||typeof c=="bigint")return"u64";if(typeof c=="boolean")return"bool";throw new Error(`Unknown type for value: ${c}`)};var nt=(n=>(n[n.NO_RESTRICTION=0]="NO_RESTRICTION",n[n.IMMEDIATE_OR_CANCEL=1]="IMMEDIATE_OR_CANCEL",n[n.FILL_OR_KILL=2]="FILL_OR_KILL",n[n.POST_ONLY=3]="POST_ONLY",n))(nt||{}),st=(r=>(r[r.SELF_MATCHING_ALLOWED=0]="SELF_MATCHING_ALLOWED",r[r.CANCEL_TAKER=1]="CANCEL_TAKER",r[r.CANCEL_MAKER=2]="CANCEL_MAKER",r))(st||{});var _r=ne;0&&(module.exports={CLOCK_ADDRESS,CachedContent,CetusClmmSDK,ClmmExpectSwapModule,ClmmFetcherModule,ClmmIntegratePoolModule,ClmmIntegratePoolV2Module,ClmmIntegrateRouterModule,ClmmIntegrateRouterWithPartnerModule,ClmmIntegrateUtilsModule,CoinAssist,CoinInfoAddress,CoinStoreAddress,DEEP_SCALAR,DEFAULT_GAS_BUDGET_FOR_MERGE,DEFAULT_GAS_BUDGET_FOR_SPLIT,DEFAULT_GAS_BUDGET_FOR_STAKE,DEFAULT_GAS_BUDGET_FOR_TRANSFER,DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,DEFAULT_NFT_TRANSFER_GAS_FEE,DeepbookClobV2Moudle,DeepbookCustodianV2Moudle,DeepbookEndpointsV2Moudle,DeepbookUtilsModule,FLOAT_SCALAR,FLOAT_SCALING,GAS_SYMBOL,GAS_TYPE_ARG,GAS_TYPE_ARG_LONG,MarginUtilsModule,NORMALIZED_SUI_COIN_TYPE,OrderType,RpcModule,SUI_SYSTEM_STATE_OBJECT_ID,SelfMatchingOption,TransactionUtil,YEAR_MS,addHexPrefix,asIntN,asUintN,bufferToHex,cacheTime1min,cacheTime24h,cacheTime5min,calc100PercentRepay,calcDebtDetail,calcInterestRate,calcUtilizationRate,calculateRiskRatio,checkAddress,composeType,d,decimalsMultiplier,extractAddressFromType,extractStructTagFromType,fixCoinType,fixDown,fixSuiObjectId,fromDecimalsAmount,getDefaultSuiInputType,getFutureTime,getMoveObject,getMoveObjectType,getMovePackageContent,getObjectDeletedResponse,getObjectDisplay,getObjectFields,getObjectId,getObjectNotExistsResponse,getObjectOwner,getObjectPreviousTransactionDigest,getObjectReference,getObjectType,getObjectVersion,getSuiObjectData,hasPublicTransfer,hexToNumber,hexToString,isSortedSymbols,isSuiObjectResponse,maxDecimal,mulRoundUp,normalizeCoinType,patchFixSuiObjectId,printTransaction,removeHexPrefix,secretKeyToEd25519Keypair,secretKeyToSecp256k1Keypair,shortAddress,shortString,sleepTime,toBuffer,toDecimalsAmount,utf8to16,wrapDeepBookMarginPoolInfo,wrapDeepBookPoolInfo});
42
+ `,r={filter:{sender:e,type:`${this._sdk.sdkOptions.deepbook.package_id}::balance_manager::BalanceManagerEvent`}};try{let i=await this.sdk.graphqlClient.query({query:t,variables:r});return i?.data?.events?.nodes?i.data.events.nodes.map(a=>a?.contents?.json):[]}catch(i){throw new Error(`Failed to query balance managers: ${i instanceof Error?i.message:String(i)}`)}}async getMarginManagerByAccount(e){if(!e||typeof e!="string")throw new Error("Valid account address is required");try{let i=((await this.sdk.fullClient.queryEventsByPage({MoveEventType:`${this._sdk.sdkOptions.margin_utils.package_id}::margin_utils::CreateMarginManagerEvent`}))?.data??[]).filter(p=>p.parsedJson?.owner===e);if(!i.length)return[];let s=i.map(p=>p.parsedJson?.margin_manager_id),o=(await this.sdk.fullClient.batchGetObjects(s,{showContent:!0})).map((p,g)=>({balanceManagerId:p?.data?.content?.fields?.balance_manager?.fields?.id?.id,marginManagerId:s[g]})),u=await Promise.all(o.map(({balanceManagerId:p})=>this.sdk.fullClient.getDynamicFields({parentId:p}))),l=new Map;return u.forEach((p,g)=>{let C=(p?.data??[]).find(S=>S?.name?.value?.pos0!==null);C&&l.set(o[g].marginManagerId,C.name.value.pos0)}),{finalResult:i.map(p=>{let g=p.parsedJson?.margin_manager_id;return{...p.parsedJson,referralKey:l.get(g)}}),referralMap:l}}catch(t){throw new Error(`Failed to get margin managers by account: ${t instanceof Error?t.message:String(t)}`)}}async getBaseBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i}){if(!e||!t||!r||!i)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new H;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[s.object(t)],typeArguments:[r,i]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!a.results||!a.results[0]||!a.results[0].returnValues||!a.results[0].returnValues[0])throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);return P.U64.parse(new Uint8Array(a.results[0].returnValues[0][0])).toString()}catch(a){throw new Error(`Failed to get base balance: ${a instanceof Error?a.message:String(a)}`)}}async getQuoteBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i}){if(!e||!t||!r||!i)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new H;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[s.object(t)],typeArguments:[r,i]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!a.results||!a.results[0]||!a.results[0].returnValues||!a.results[0].returnValues[0])throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);return P.U64.parse(new Uint8Array(a.results[0].returnValues[0][0])).toString()}catch(a){throw new Error(`Failed to get quote balance: ${a instanceof Error?a.message:String(a)}`)}}async getDeepBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i}){if(!e||!t||!r||!i)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new H;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[s.object(t)],typeArguments:[r,i]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!a.results||!a.results[0]||!a.results[0].returnValues||!a.results[0].returnValues[0])throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);return P.U64.parse(new Uint8Array(a.results[0].returnValues[0][0])).toString()}catch(a){throw new Error(`Failed to get base balance: ${a instanceof Error?a.message:String(a)}`)}}async getPoolMarginManagerBalance({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i}){if(!e||!t||!r||!i)throw new Error("All parameters (account, marginManagers, baseCoinType, quoteCoinType) are required");let s=new H,a=r===this.deepCoin.coinType,o=i===this.deepCoin.coinType,u=a||o;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[s.object(t)],typeArguments:[r,i]}),s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[s.object(t)],typeArguments:[r,i]}),u||s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[s.object(t)],typeArguments:[r,i]});let l=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!l.results||!l.results[0]||!l.results[0].returnValues||!l.results[0].returnValues[0])throw new Error(`Transaction failed: ${l.effects?.status?.error||"Unknown error"}`);let f=P.U64.parse(new Uint8Array(l.results[0].returnValues[0][0])),p=P.U64.parse(new Uint8Array(l.results[1].returnValues[0][0])),g=u?a?f:p:P.U64.parse(new Uint8Array(l.results[2].returnValues[0][0]));return{[r]:f.toString(),[i]:p.toString(),[this.deepCoin.coinType]:g.toString()}}catch(l){throw new Error(`Failed to getPoolMarginManagerBalance: ${l instanceof Error?l.message:String(l)}`)}}async getBorrowedShares({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i}){if(!e||!t||!r||!i)throw new Error("All parameters (account, marginManager, baseCoinType, quoteCoinType) are required");let s=new H;try{s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::borrowed_shares`,arguments:[s.object(t)],typeArguments:[r,i]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:s});if(!a.results||!a.results[0]||!a.results[0].returnValues||a.results[0].returnValues.length<2)throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);let o=P.U64.parse(new Uint8Array(a.results[0].returnValues[0][0])),u=P.U64.parse(new Uint8Array(a.results[0].returnValues[1][0]));return{baseBorrowedShare:o,quoteBorrowedShare:u}}catch(a){throw new Error(`Failed to get borrowed shares: ${a instanceof Error?a.message:String(a)}`)}}managerState=({account:e,marginManager:t,baseCoin:r,quoteCoin:i,pool:s,baseMarginPool:a,quoteMarginPool:o,decimals:u=6,basePriceFeedObjectId:l,quotePriceFeedObjectId:f})=>p=>{p.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_manager::manager_state`,arguments:[p.object(t),p.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),p.object(l),p.object(f),p.object(s),p.object(a),p.object(o),p.object.clock()],typeArguments:[r.coinType,i.coinType]})};async getManagerState(e,t=new H){let{account:r,marginManager:i,baseCoin:s,quoteCoin:a,pool:o,baseMarginPool:u,quoteMarginPool:l,decimals:f=6}=e;if(!r||!i||!o||!u||!l)throw new Error("All required parameters must be provided");if(!s?.feed||!a?.feed)throw new Error("Base and quote coin feeds are required");if(!s.scalar||!a.scalar)throw new Error("Base and quote coin scalars are required");try{let p=await this.pythPrice.updatePythPriceIDs([s.feed,a.feed],t),g=p.get(s.feed),v=p.get(a.feed);if(!g||!v)throw new Error("Failed to get price feed object IDs");t.add(this.managerState({...e,basePriceFeedObjectId:g,quotePriceFeedObjectId:v}));let C=await this.sdk.fullClient.devInspectTransactionBlock({sender:r,transactionBlock:t});if(!C.results||!C.results[0]||!C.results[0].returnValues||C.results[0].returnValues.length<14)throw new Error(`Failed to get margin manager state: ${C.effects?.status?.error||"Unknown error"}`);let S=Cn(P.Address.parse(new Uint8Array(C.results[0].returnValues[0][0]))),j=Cn(P.Address.parse(new Uint8Array(C.results[0].returnValues[1][0]))),x=Number(P.U64.parse(new Uint8Array(C.results[0].returnValues[2][0])))/1e9,q=this.#e(BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[3][0]))),s.scalar,f),A=this.#e(BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[4][0]))),a.scalar,f),U=this.#e(BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[5][0]))),s.scalar,f),Q=this.#e(BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[6][0]))),a.scalar,f),R=P.U64.parse(new Uint8Array(C.results[0].returnValues[7][0])),ne=Number(P.u8().parse(new Uint8Array(C.results[0].returnValues[8][0]))),ie=P.U64.parse(new Uint8Array(C.results[0].returnValues[9][0])),ue=Number(P.u8().parse(new Uint8Array(C.results[0].returnValues[10][0]))),oe=BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[11][0]))),Je=BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[12][0]))),ut=BigInt(P.U64.parse(new Uint8Array(C.results[0].returnValues[13][0])));return{managerId:S,deepbookPoolId:j,riskRatio:x,baseAsset:q,quoteAsset:A,baseDebt:U,quoteDebt:Q,basePythPrice:R.toString(),basePythDecimals:ne,quotePythPrice:ie.toString(),quotePythDecimals:ue,currentPrice:oe,lowestTriggerAbovePrice:Je,highestTriggerBelowPrice:ut}}catch(p){throw new Error(`Failed to get manager state: ${p instanceof Error?p.message:String(p)}`)}}async calculateAssets({account:e,marginManager:t,pool:r,baseCoin:i,quoteCoin:s,tx:a=new H}){if(!e||!t||!r)throw new Error("Account, marginManager, and pool are required");if(!i?.coinType||!s?.coinType)throw new Error("Base and quote coin types are required");try{a.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_manager::calculate_assets`,arguments:[a.object(t),a.object(r)],typeArguments:[i.coinType,s.coinType]});let o=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:a});if(!o.results||!o.results[0]||!o.results[0].returnValues||o.results[0].returnValues.length<2)throw new Error(`Transaction failed: ${o.effects?.status?.error||"Unknown error"}`);let u=o.results[0].returnValues[0][0],l=o.results[0].returnValues[1][0];if(!i.scalar||!s.scalar)throw new Error("Base and quote coin scalars are required");let f=P.U64.parse(new Uint8Array(u)),p=P.U64.parse(new Uint8Array(l));return{baseAsset:f.toString(),quoteAsset:p.toString(),tx:a}}catch(o){throw new Error(`Failed to calculate assets: ${o instanceof Error?o.message:String(o)}`)}}async getBorrowedAmount({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i,baseMarginPool:s,quoteMarginPool:a}){if(!e||!t||!r||!i||!s||!a)throw new Error("All parameters are required");try{let{baseBorrowedShare:o,quoteBorrowedShare:u}=await this.getBorrowedShares({account:e,marginManager:t,baseCoinType:r,quoteCoinType:i}),l=!!T(o).gt(T(u)),f=l?s:a,p=l?o:u,g=new H;g.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_pool::borrow_shares_to_amount`,arguments:[g.object(f),g.pure.u64(BigInt(p)),g.object.clock()],typeArguments:[l?r:i]});let v=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:g});if(!v.results||!v.results[0]||!v.results[0].returnValues||!v.results[0].returnValues[0])throw new Error(`Transaction failed: ${v.effects?.status?.error||"Unknown error"}`);let C=P.U64.parse(new Uint8Array(v.results[0].returnValues[0][0]));return l?{baseBorrowedAmount:C.toString(),quoteBorrowedAmount:"0"}:{baseBorrowedAmount:"0",quoteBorrowedAmount:C.toString()}}catch(o){throw new Error(`Failed to get borrowed amount: ${o instanceof Error?o.message:String(o)}`)}}async deposit({marginManager:e,baseCoin:t,quoteCoin:r,amount:i,depositCoinType:s},a=new H){if(!e)throw new Error("Margin manager is required");if(!t?.coinType||!r?.coinType)throw new Error("Base and quote coin types are required");if(!i||BigInt(i)<=0n)throw new Error("Valid deposit amount is required");if(!t.feed||!r.feed)throw new Error("Base and quote coin feeds are required");try{let o=yn.buildCoinWithBalance(BigInt(i),s,a),u=await this.pythPrice.updatePythPriceIDs([t.feed,r.feed],a),l=u.get(t.feed),f=u.get(r.feed);if(!l||!f)throw new Error("Failed to get price feed object IDs");return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::deposit`,arguments:[a.object(this._sdk.sdkOptions.margin_utils.global_config_id),a.object(this._sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?a.object(e):e,a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(l),a.object(f),o,a.object(ge)],typeArguments:[t.coinType,r.coinType,s]}),a}catch(o){throw new Error(`Failed to deposit: ${o instanceof Error?o.message:String(o)}`)}}async withdraw({account:e,marginManager:t,baseMarginPool:r,quoteMarginPool:i,baseCoin:s,quoteCoin:a,pool:o,amount:u,withdrawCoinType:l},f=new H){if(!e||!t||!r||!i||!o)throw new Error("All required parameters must be provided");if(!s?.coinType||!a?.coinType)throw new Error("Base and quote coin types are required");if(!u||BigInt(u)<=0n)throw new Error("Valid withdraw amount is required");if(!s.feed||!a.feed)throw new Error("Base and quote coin feeds are required");try{let p=await this.pythPrice.updatePythPriceIDs([s.feed,a.feed],f),g=p.get(s.feed),v=p.get(a.feed);if(!g||!v)throw new Error("Failed to get price feed object IDs");let C=f.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::withdraw`,arguments:[f.object(this._sdk.sdkOptions.margin_utils.global_config_id),f.object(this._sdk.sdkOptions.margin_utils.versioned_id),f.object(t),f.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),f.object(r),f.object(i),f.object(g),f.object(v),f.object(o),f.pure.u64(BigInt(u)),f.object(ge)],typeArguments:[s.coinType,a.coinType,l]});return f.transferObjects([C],e),f}catch(p){throw new Error(`Failed to withdraw: ${p instanceof Error?p.message:String(p)}`)}}async borrowBase({marginManager:e,baseMarginPool:t,baseCoin:r,quoteCoin:i,pool:s,amount:a},o=new H){if(!e||!t||!s)throw new Error("Margin manager, base margin pool, and pool are required");if(!r?.coinType||!i?.coinType)throw new Error("Base and quote coin types are required");if(!a||BigInt(a)<=0n)throw new Error("Valid borrow amount is required");if(!r.feed||!i.feed)throw new Error("Base and quote coin feeds are required");try{let u=await this.pythPrice.updatePythPriceIDs([r.feed,i.feed],o),l=u.get(r.feed),f=u.get(i.feed);if(!l||!f)throw new Error("Failed to get price feed object IDs");return o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::borrow_base`,arguments:[o.object(this.sdk.sdkOptions.margin_utils.global_config_id),o.object(this.sdk.sdkOptions.margin_utils.versioned_id),o.object(e),o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(t),o.object(l),o.object(f),o.object(s),o.pure.u64(BigInt(a)),o.object(ge)],typeArguments:[r.coinType,i.coinType]}),o}catch(u){throw new Error(`Failed to borrow base: ${u instanceof Error?u.message:String(u)}`)}}async borrowQuote({marginManager:e,quoteMarginPool:t,baseCoin:r,quoteCoin:i,pool:s,amount:a},o=new H){if(!e||!t||!s)throw new Error("Margin manager, quote margin pool, and pool are required");if(!r?.coinType||!i?.coinType)throw new Error("Base and quote coin types are required");if(!a||BigInt(a)<=0n)throw new Error("Valid borrow amount is required");if(!r.feed||!i.feed)throw new Error("Base and quote coin feeds are required");try{let u=await this.pythPrice.updatePythPriceIDs([r.feed,i.feed],o),l=u.get(r.feed),f=u.get(i.feed);if(!l||!f)throw new Error("Failed to get price feed object IDs");return o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::borrow_quote`,arguments:[o.object(this.sdk.sdkOptions.margin_utils.global_config_id),o.object(this.sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?o.object(e):e,o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(t),o.object(l),o.object(f),o.object(s),o.pure.u64(BigInt(a)),o.object(ge)],typeArguments:[r.coinType,i.coinType]}),o}catch(u){throw new Error(`Failed to borrow quote: ${u instanceof Error?u.message:String(u)}`)}}async repayBase({marginManager:e,baseMarginPool:t,baseCoin:r,quoteCoin:i,amount:s},a=new H){if(!e||!t||!r||!i)throw new Error("All required parameters (marginManager, baseMarginPool, baseCoin, quoteCoin) are required");if(s&&BigInt(s)<=0n)throw new Error("Repay amount must be greater than zero if provided");let o={marginManager:e,baseCoin:r,quoteCoin:i,amount:s,depositCoinType:r.coinType};await this.deposit(o,a);try{return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::repay_base`,arguments:[a.object(this._sdk.sdkOptions.margin_utils.global_config_id),a.object(this._sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(t),a.object.option({type:"u64",value:s?a.pure.u64(s):null}),a.object(ge)],typeArguments:[r.coinType,i.coinType]}),a}catch(u){throw new Error(`Failed to repay base: ${u instanceof Error?u.message:String(u)}`)}}async repayQuote({marginManager:e,quoteMarginPool:t,baseCoin:r,quoteCoin:i,amount:s},a=new H){if(!e||!t||!r||!i)throw new Error("All required parameters (marginManager, quoteMarginPool, baseCoin, quoteCoin) are required");if(s&&BigInt(s)<=0n)throw new Error("Repay amount must be greater than zero if provided");let o={marginManager:e,baseCoin:r,quoteCoin:i,amount:s,depositCoinType:i.coinType};await this.deposit(o,a);try{return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::repay_quote`,arguments:[a.object(this._sdk.sdkOptions.margin_utils.global_config_id),a.object(this._sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(t),a.object.option({type:"u64",value:s?a.pure.u64(s):null}),a.object(ge)],typeArguments:[r.coinType,i.coinType]}),a}catch(u){throw new Error(`Failed to repay quote: ${u instanceof Error?u.message:String(u)}`)}}async repay({marginManager:e,baseMarginPool:t,quoteMarginPool:r,baseCoin:i,quoteCoin:s,isBase:a,amount:o},u=new H){try{let l=this.sdk.senderAddress,f,p=o;o||(f=await this.getBorrowedAmount({account:l,marginManager:e,baseCoinType:i?.coinType,quoteCoinType:s?.coinType,baseMarginPool:t,quoteMarginPool:r}),p=a?f.baseBorrowedAmount:f.quoteBorrowedAmount);let g,v={marginManager:e,baseCoin:i,quoteCoin:s,depositCoinType:a?i.coinType:s.coinType};if(a){let C=await this.getBaseBalance({account:l,marginManager:e,baseCoinType:i?.coinType,quoteCoinType:s?.coinType});g=T(p).sub(C).toString()}else{let C=await this.getQuoteBalance({account:l,marginManager:e,baseCoinType:i?.coinType,quoteCoinType:s?.coinType});g=T(p).sub(C).toString()}T(g).gt(0)&&await this.deposit({...v,amount:g},u),u.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::${a?"repay_base":"repay_quote"}`,arguments:[u.object(this._sdk.sdkOptions.margin_utils.global_config_id),u.object(this._sdk.sdkOptions.margin_utils.versioned_id),u.object(e),u.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),u.object(a?t:r),u.object.option({type:"u64",value:o?u.pure.u64(o):null}),u.object(ge)],typeArguments:[i.coinType,s.coinType]})}catch(l){console.log("\u{1F680} ~ MarginUtilsModule ~ repay ~ error:",l)}return u}removeReferralKey=(e,t,r,i,s=new H)=>{let a=s.moveCall({target:`${this._sdk.sdkOptions.deepbook.published_at}::pool::id`,typeArguments:[r,i],arguments:[s.object(t)]});return s.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::unset_margin_manager_referral`,typeArguments:[r,i],arguments:[typeof e=="string"?s.object(e):e,a]})};async placeMarginMarketOrder({marginManager:e,poolInfo:t,selfMatchingOption:r,quantity:i,amountLimit:s,isBid:a,payWithDeep:o,exactBase:u,referralKey:l},f=new H){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!i||BigInt(Kr(i,t.baseCoin.decimals||0))<=0n)throw new Error("Valid order quantity is required");if(!s||BigInt(Kr(s,t.baseCoin.decimals||0))<=0n)throw new Error("Valid order amount limit is required");let{id:p,baseCoin:g,quoteCoin:v}=t;if(g.decimals===void 0||v.decimals===void 0)throw new Error("Base and quote coin decimals are required");l&&this.removeReferralKey(e,p,g.coinType,v.coinType,f);try{return f.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_margin_market_order`,arguments:[f.object(this.sdk.sdkOptions.margin_utils.global_config_id),f.object(this.sdk.sdkOptions.margin_utils.versioned_id),typeof e=="string"?f.object(e):e,f.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),f.object(p),f.pure.u8(r),f.pure.u64(i),f.pure.bool(a),f.pure.bool(o),f.pure.bool(u===void 0?!a:u),f.pure.u64(s),f.object(ge)],typeArguments:[g.coinType,v.coinType]}),f}catch(C){throw new Error(`Failed to place market order: ${C instanceof Error?C.message:String(C)}`)}}async placeMarginLimitOrder({marginManager:e,poolInfo:t,orderType:r,selfMatchingOption:i,priceInput:s,quantity:a,isBid:o,payWithDeep:u,expirationTimestamp:l=Date.now()+31536e8,referralKey:f},p=new H){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!s||!a)throw new Error("Price and quantity are required");let{id:g,baseCoin:v,quoteCoin:C}=t;if(v.decimals===void 0||C.decimals===void 0)throw new Error("Base and quote coin decimals are required");try{let S=BigInt(T(s).mul(10**(C.decimals-v.decimals+9)).toString()),j=BigInt(Kr(a,v.decimals));if(S<=0n||j<=0n)throw new Error("Price and quantity must be greater than zero");return f&&this.removeReferralKey(e,g,v.coinType,C.coinType,p),p.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_margin_limit_order`,arguments:[p.object(this.sdk.sdkOptions.margin_utils.global_config_id),p.object(this.sdk.sdkOptions.margin_utils.versioned_id),p.object(e),p.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),p.object(g),p.pure.u8(r),p.pure.u8(i),p.pure.u64(S),p.pure.u64(j),p.pure.bool(o),p.pure.bool(u),p.pure.u64(l),p.object(ge)],typeArguments:[v.coinType,C.coinType]}),p}catch(S){throw new Error(`Failed to place limit order: ${S instanceof Error?S.message:String(S)}`)}}modifyMarginOrder({marginManager:e,poolInfo:t,orderId:r,newQuantity:i},s=new H){if(!e||!t||!r||!i)throw new Error("All parameters (marginManager, poolInfo, orderId, newQuantity) are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(t.baseCoin.decimals===void 0)throw new Error("Base coin decimals are required");try{let a=BigInt(Kr(i,t.baseCoin.decimals));if(a<=0n)throw new Error("New quantity must be greater than zero");return s.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::modify_margin_order`,arguments:[s.object(this.sdk.sdkOptions.margin_utils.global_config_id),s.object(this.sdk.sdkOptions.margin_utils.versioned_id),s.object(e),s.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),s.object(t.id),s.pure.u128(r),s.pure.u64(a),s.object(ge)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),s}catch(a){throw new Error(`Failed to modify order: ${a instanceof Error?a.message:String(a)}`)}}cancelMarginOrder({marginManager:e,poolInfo:t,orderId:r},i=new H){if(!e||!t||!r)throw new Error("All parameters (marginManager, poolInfo, orderId) are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");try{return i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::cancel_margin_order`,arguments:[i.object(this.sdk.sdkOptions.margin_utils.global_config_id),i.object(this.sdk.sdkOptions.margin_utils.versioned_id),i.object(e),i.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),i.object(t.id),i.pure.u128(r),i.object(ge)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),i}catch(s){throw new Error(`Failed to cancel order: ${s instanceof Error?s.message:String(s)}`)}}cancelAllMarginOrders({marginManager:e,poolInfo:t},r=new H){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");try{return r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::cancel_all_margin_orders`,arguments:[r.object(this.sdk.sdkOptions.margin_utils.global_config_id),r.object(this.sdk.sdkOptions.margin_utils.versioned_id),r.object(e),r.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),r.object(t.id),r.object(ge)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]}),r}catch(i){throw new Error(`Failed to cancel all orders: ${i instanceof Error?i.message:String(i)}`)}}placeReduceOnlyLimitOrder({marginManager:e,poolInfo:t,marginPoolId:r,orderType:i,selfMatchingOption:s,priceInput:a,quantity:o,isBid:u,payWithDeep:l,expirationTimestamp:f},p=new H){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!r)throw new Error("Margin pool id is required");try{return p.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_reduce_only_limit_order`,arguments:[p.object(this.sdk.sdkOptions.margin_utils.global_config_id),p.object(this.sdk.sdkOptions.margin_utils.versioned_id),p.object(e),p.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),p.object(t.id),p.object(r),p.pure.u8(i),p.pure.u8(s),p.pure.u64(a),p.pure.u64(o),p.pure.bool(u),p.pure.bool(l),p.pure.u64(f),p.object(ge)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType,u?t.quoteCoin.coinType:t.baseCoin.coinType]}),p}catch(g){throw new Error(`Failed to place reduce only limit order: ${g instanceof Error?g.message:String(g)}`)}}placeReduceOnlyMarketOrder({marginManager:e,poolInfo:t,marginPoolId:r,selfMatchingOption:i,quantity:s,isBid:a,payWithDeep:o},u=new H){if(!e||!t)throw new Error("Margin manager and pool info are required");if(!t.id||!t.baseCoin?.coinType||!t.quoteCoin?.coinType)throw new Error("Pool info must contain valid id, baseCoin, and quoteCoin");if(!r)throw new Error("Margin pool id is required");try{return u.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::place_reduce_only_market_order`,arguments:[u.object(this.sdk.sdkOptions.margin_utils.global_config_id),u.object(this.sdk.sdkOptions.margin_utils.versioned_id),u.object(e),u.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),u.object(t.id),u.object(r),u.pure.u8(i),u.pure.u64(s),u.pure.bool(a),u.pure.bool(o),u.object(ge)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType,a?t.quoteCoin.coinType:t.baseCoin.coinType]}),u}catch(l){throw new Error(`Failed to place reduce only market order: ${l instanceof Error?l.message:String(l)}`)}}async getAccountOpenOrders({poolInfo:e,marginManager:t}){try{let r=new H,i=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(t)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]});return await this.sdk.DeepbookUtils.getOpenOrder(e,this.sdk.senderAddress,i,void 0,!0,r)}catch(r){throw new Error(`Failed to get account open orders: ${r instanceof Error?r.message:String(r)}`)}}async getAccountAllMarketsOpenOrders(e,t){try{if(!e||!t||t.length===0)throw new Error("Account or pools are required");let r=[];for(let i=0;i<t.length;i++){let s=new H,a=t[i];if(a.margin_manager_id){let o=await s.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[s.object(a.margin_manager_id)],typeArguments:[a.baseCoin.coinType,a.quoteCoin.coinType]}),u=await this.sdk.DeepbookUtils.getOpenOrder(a,this.sdk.senderAddress,o,void 0,!0,s);r.push(...u)}}return r}catch(r){throw new Error(`Failed to get account all markets open orders: ${r instanceof Error?r.message:String(r)}`)}}mintSupplierCap(e=new H,t){let r=e.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::mint_supplier_cap`,arguments:[e.object(this._sdk.sdkOptions.margin_utils.versioned_id),e.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),e.object(ge)]});return t&&e.transferObjects([r],this.sdk.senderAddress),{tx:e,supplierCap:r}}async querySupplierCap(){try{return((await this.sdk.fullClient.queryEventsByPage({MoveEventType:`${this._sdk.sdkOptions.margin_utils.package_id}::margin_utils::SupplierCapCreatedEvent`}))?.data||[]).filter(i=>i.parsedJson?.owner===this.sdk.senderAddress)[0].parsedJson.supplier_cap_id}catch(e){throw new Error(`Failed to get account supplyCap: ${e instanceof Error?e.message:String(e)}`)}}mintSupplierCapAndSupply({marginPool:e,supplyCoinType:t,amount:r}){let i=new H,{supplierCap:s}=this.mintSupplierCap(i,!1);return this.supply({marginPool:e,supplierCap:s,supplyCoinType:t,amount:r,tx:i}),i.transferObjects([s],this.sdk.senderAddress),i}supply({marginPool:e,supplierCap:t,supplyCoinType:r,amount:i,tx:s}){let a=s??new H;if(!t)throw new Error("Either supplierCap must be provided");let o=yn.buildCoinWithBalance(BigInt(i),r,a);return a.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::supply`,typeArguments:[r],arguments:[a.object(this._sdk.sdkOptions.margin_utils.global_config_id),a.object(this._sdk.sdkOptions.margin_utils.versioned_id),a.object(e),a.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),a.object(t),o,a.pure.option("address","0x0"),a.object(ge)]}),a}supplierWithdraw({marginPool:e,withdrawCoinType:t,amount:r,supplierCapId:i,hasSwap:s,withdrawAll:a,tx:o=new H}){let u=o.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::supplier_withdraw`,typeArguments:[t],arguments:[o.object(this._sdk.sdkOptions.margin_utils.global_config_id),o.object(this._sdk.sdkOptions.margin_utils.versioned_id),o.object(e),o.object(this._sdk.sdkOptions.margin_utils.margin_registry_id),o.object(i),o.object.option({type:"u64",value:a?null:o.pure.u64(r)}),o.object(ge)]});return s?u:(o.transferObjects([u],this.sdk.senderAddress),o)}withdrawReferralFees({marginPool:e}){let t=new H,r=t.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::withdraw_referral_fees`,arguments:[t.object(this._sdk.sdkOptions.margin_utils.versioned_id),t.object(e),t.object(this._sdk.sdkOptions.margin_utils.registry_id),t.object.option({type:"0x1",value:null}),t.object(ge)],typeArguments:[this.deepCoin.coinType]});return t.transferObjects([r],this.sdk.senderAddress),t}async getUserSupplyAmount({marginPool:e,supplyCoin:t,supplierCapId:r}){let i=new H;i.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::get_user_supply_amount`,typeArguments:[t.coinType],arguments:[i.object(e),i.object(r),i.object(ge)]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);return this.#e(BigInt(P.U64.parse(new Uint8Array(s.results[0].returnValues[0][0]))),t.scalar,t.decimals)}async getDeepBookMarginRegistry(){let t=(await this.sdk.fullClient.getObject({id:this._sdk.sdkOptions.margin_utils.margin_registry_id,options:{showContent:!0}})).data.content.fields.inner.fields.id.id,r=await this.sdk.fullClient.getDynamicFieldObject({parentId:t,name:{type:"u64",value:"1"}}),i=r.data.content.fields.value.fields.pool_registry.fields.id.id,s=r.data.content.fields.value.fields.margin_pools.fields.id.id;return{pool_registry_table_id:i,margin_pool_table_id:s}}async getDeepBookPool(){let{data:e}=await this.sdk.fullClient.getDynamicFields({parentId:this.sdk.sdkOptions.margin_utils.pool_registry_table_id}),t=e.map(s=>s.objectId),r=await this.sdk.fullClient.batchGetObjects(t,{showContent:!0}),i=[];for(let s=0;s<r.length;s++){let a=r[s].data.content.fields;i.push(ba(a))}return i}async getDeepBookMarginPool(){let{data:e}=await this.sdk.fullClient.getDynamicFields({parentId:this.sdk.sdkOptions.margin_utils.margin_pool_table_id}),t=e.map(u=>u.objectId),r=await this.sdk.fullClient.batchGetObjects(t,{showContent:!0}),i=[],s=[];for(let u=0;u<r.length;u++){let l=r[u].data.content.fields;s.push(l.value),i.push({deposit_coin_type:l.name.fields.name,id:l.id.id})}let a=await this.sdk.fullClient.batchGetObjects(s,{showContent:!0}),o=[];for(let u=0;u<a.length;u++){let l=a[u].data.content.fields;o.push(wa(l,i[u]))}return o}async getBaseQuantityIn(e,t,r,i=.01){let s=new H;s.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_base_quantity_out":"::pool::get_base_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[s.object(e.address),s.pure.u64(t),s.object(ge)]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:s});if(!a.results||!a.results[0]||!a.results[0].returnValues||!a.results[0].returnValues[0])throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);let o=P.U64.parse(new Uint8Array(a.results[0].returnValues[0][0])),u=P.U64.parse(new Uint8Array(a.results[0].returnValues[1][0])),l=P.U64.parse(new Uint8Array(a.results[0].returnValues[2][0])),f=await this.sdk.DeepbookUtils.estimatedMaxFee(e,u.toString(),"",!1,!1,!1);return{quantityOut:T(t).sub(u.toString()).toString(),quantityInLeft:T(o.toString()).add(f.takerFee).mul(T(1+i)).ceil().toString(),deep_fee_amount:l.toString()}}async getQuoteQuantityIn(e,t,r,i=.01){let s=new H;s.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_quote_quantity_out":"::pool::get_quote_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[s.object(e.address),s.pure.u64(t),s.object(ge)]});let a=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:s});if(!a.results||!a.results[0]||!a.results[0].returnValues||!a.results[0].returnValues[0])throw new Error(`Transaction failed: ${a.effects?.status?.error||"Unknown error"}`);let o=P.U64.parse(new Uint8Array(a.results[0].returnValues[0][0])),u=P.U64.parse(new Uint8Array(a.results[0].returnValues[1][0])),l=P.U64.parse(new Uint8Array(a.results[0].returnValues[2][0])),f=await this.sdk.DeepbookUtils.estimatedMaxFee(e,u.toString(),"",!1,!0,!1);return{quantityOut:T(t).sub(o).toString(),quantityInLeft:T(u.toString()).add(T(f.takerFee)).mul(T(1+i)).ceil().toString(),deep_fee_amount:l.toString()}}async getBaseQuantityOutInput(e,t,r){let i=new H;i.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}${r?"::pool::get_base_quantity_out":"::pool::get_base_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[i.object(e.address),i.pure.u64(t),i.object(ge)]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);let a=P.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])),o=P.U64.parse(new Uint8Array(s.results[0].returnValues[1][0])),u=P.U64.parse(new Uint8Array(s.results[0].returnValues[2][0]));return{base_amount:a.toString(),quote_amount:o.toString(),deep_fee_amount:u.toString()}}async getQuoteQuantityOutInput(e,t,r){let i=new H;i.moveCall({target:`${this.sdk.sdkOptions.deepbook.published_at}::pool::${r?"get_quote_quantity_out":"get_quote_quantity_out_input_fee"}`,typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType],arguments:[i.object(e.address),i.pure.u64(t),i.object(ge)]});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:this.sdk.senderAddress,transactionBlock:i});if(!s.results||!s.results[0]||!s.results[0].returnValues||!s.results[0].returnValues[0])throw new Error(`Transaction failed: ${s.effects?.status?.error||"Unknown error"}`);let a=P.U64.parse(new Uint8Array(s.results[0].returnValues[0][0])),o=P.U64.parse(new Uint8Array(s.results[0].returnValues[1][0])),u=P.U64.parse(new Uint8Array(s.results[0].returnValues[2][0]));return{base_amount:a.toString(),quote_amount:o.toString(),deep_fee_amount:u.toString()}}async getAccount(e,t){if(!e||!t)throw new Error("marginManager and poolInfo are required");let r=new H,i=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(e)],typeArguments:[t.baseCoin.coinType,t.quoteCoin.coinType]});return await this.sdk.DeepbookUtils.getAccount(i,[t],r)}async withdrawSettledAmounts({poolInfo:e,marginManager:t},r=new H){return r.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::pool_proxy::withdraw_settled_amounts`,arguments:[r.object(this.sdk.sdkOptions.margin_utils.margin_registry_id),r.object(t),r.object(e.address)],typeArguments:[e.baseCoin.coinType,e.quoteCoin.coinType]}),r}#e(e,t,r){if(t<=0||r<0)throw new Error("Scalar must be positive and decimals must be non-negative");let i=BigInt(t),s=e/i,a=e%i;if(a===0n)return s.toString();let o=t.toString().length-1,f=a.toString().padStart(o,"0").slice(0,r).replace(/0+$/,"");return f?`${s}.${f}`:s.toString()}async getMarginPoolStateForInterest(e){if(!e)throw new Error("marginPoolId is required");let t=await this.sdk.fullClient.getObject({id:e,options:{showContent:!0}});if(!t.data?.content?.fields)throw new Error(`Failed to fetch margin pool: ${e}`);let r=t.data.content.fields,i=r.state.fields,s=r.config.fields,a=s.interest_config.fields,o=s.margin_pool_config.fields;return{poolState:{total_supply:BigInt(i.total_supply),total_borrow:BigInt(i.total_borrow),supply_shares:BigInt(i.supply_shares),borrow_shares:BigInt(i.borrow_shares),last_update_timestamp:BigInt(i.last_update_timestamp)},interestConfig:{base_rate:BigInt(a.base_rate),base_slope:BigInt(a.base_slope),optimal_utilization:BigInt(a.optimal_utilization),excess_slope:BigInt(a.excess_slope)},marginPoolConfig:{protocol_spread:BigInt(o.protocol_spread),max_utilization_rate:BigInt(o.max_utilization_rate),min_borrow:BigInt(o.min_borrow),supply_cap:BigInt(o.supply_cap)}}}async getChainTimestamp(){let e=await this.sdk.fullClient.getLatestCheckpointSequenceNumber(),t=await this.sdk.fullClient.getCheckpoint({id:e});return BigInt(t.timestampMs)}async batchGetBorrowedShares({account:e,marginManagerList:t}){let r=new H;return t.forEach(s=>{r.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::borrowed_shares`,arguments:[r.object(s.marginManagerId)],typeArguments:[s.baseCoinType,s.quoteCoinType]})}),(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r})).results.map((s,a)=>{let o=P.U64.parse(new Uint8Array(s.returnValues[0][0])),u=P.U64.parse(new Uint8Array(s.returnValues[1][0]));return{marginManagerId:t[a].marginManagerId,baseBorrowedShare:o,quoteBorrowedShare:u}})}async betchGetOpenOrders({account:e,marginManagerList:t},r=new H,i=!1){t.forEach(v=>{let C=r.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[r.object(v.marginManagerId)],typeArguments:[v.baseCoinType,v.quoteCoinType]});r.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[r.object(v.poolId),r.object(C)],typeArguments:[v.baseCoinType,v.quoteCoinType]}),r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::get_account_id_with_margin_manager`,arguments:[r.object(v.marginManagerId),r.object(v.poolId)],typeArguments:[v.baseCoinType,v.quoteCoinType]}),r.moveCall({target:`${this._sdk.sdkOptions.margin_utils.published_at}::margin_utils::locked_balance_with_margin_manager`,arguments:[r.object(v.marginManagerId),r.object(v.poolId)],typeArguments:[v.baseCoinType,v.quoteCoinType]})});let s=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:r}),a=s.events.map((v,C)=>({marginManagerId:t[C].marginManagerId,...v?.parsedJson?.account?.settled_balances||{}})),o=s.results.filter(v=>v?.returnValues?.[0]?.[1]==="0x2::vec_set::VecSet<u128>"),u=P.struct("VecSet",{constants:P.vector(P.U128)}),l=[];o.forEach((v,C)=>{let S=u.parse(new Uint8Array(v.returnValues[0][0])).constants;S.length>0&&S.forEach(j=>{l.push({pool:{pool_id:t[C].poolId,baseCoinType:t[C].baseCoinType,quoteCoinType:t[C].quoteCoinType},marginManagerId:t[C].marginManagerId,orderId:j})})});let f=s.results.filter(v=>v?.returnValues?.length===3),p=[];f.forEach((v,C)=>{p.push({marginManagerId:t[C].marginManagerId,base:P.U64.parse(new Uint8Array(v.returnValues[0][0])),quote:P.U64.parse(new Uint8Array(v.returnValues[1][0])),deep:P.U64.parse(new Uint8Array(v.returnValues[2][0]))})});let g=[];return l.forEach((v,C)=>{let S=this.sdk.DeepbookUtils.decodeOrderId(BigInt(v.orderId));g.push({...v,price:S.price.toString(),isBid:S.isBid})}),{openOrders:g,settledBalances:a,lockedBalances:p}}async getSingleMarginManagerOpenOrders({account:e,marginManagerId:t,poolId:r,baseCoinType:i,quoteCoinType:s,baseMarginPool:a,quoteMarginPool:o}){let u=new H,l=u.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[u.object(t)],typeArguments:[i,s]});u.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::account_open_orders`,arguments:[u.object(r),l],typeArguments:[i,s]});let f=P.struct("VecSet",{constants:P.vector(P.U128)}),g=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:u})).results.find(A=>A?.returnValues?.[0]?.[1]==="0x2::vec_set::VecSet<u128>"),v=f.parse(new Uint8Array(g.returnValues[0][0])).constants,C=[];v.forEach(A=>{C.push({pool:{pool_id:r,baseCoinType:i,quoteCoinType:s},marginManagerId:t,orderId:A})});let S=C?.length>0?await this.sdk.DeepbookUtils.getOrderInfoList(C,e)||[]:[],j=[];C.forEach((A,U)=>{let Q=this.sdk.DeepbookUtils.decodeOrderId(BigInt(A.orderId)),R=S.find(ne=>ne.order_id===A.orderId)||{};j.push({...A,...R,price:Q.price.toString(),isBid:Q.isBid})});let x={marginManagerId:t,base:"0",quote:"0",deep:"0"};if(S?.length>0){let A=new H,U=A.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[A.object(t)],typeArguments:[i,s]});A.moveCall({target:`${this._sdk.sdkOptions.deepbook.package_id}::pool::locked_balance`,arguments:[A.object(r),U],typeArguments:[i,s]});let R=(await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:A})).results.find(ne=>ne?.returnValues?.length===3);x={...x,base:P.U64.parse(new Uint8Array(R.returnValues[0][0])),quote:P.U64.parse(new Uint8Array(R.returnValues[1][0])),deep:P.U64.parse(new Uint8Array(R.returnValues[2][0]))}}let q={base:"0",quote:"0",deep:"0"};try{let A=new H,U=A.moveCall({target:`${this.sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::balance_manager`,arguments:[A.object(t)],typeArguments:[i,s]});A.moveCall({target:`${this._sdk.sdkOptions.deepbook_utils.published_at}::order_trader::get_account_id`,arguments:[A.object(r),U],typeArguments:[i,s]});let Q=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:A});q={marginManagerId:t,...q,...Q?.events?.parsedJson?.account?.settled_balances||{}}}catch(A){console.log("\u{1F680} ~ MarginUtilsModule ~ getSingleMarginManagerPosRelevantData ~ error:",A)}return{openOrders:j,settledBalances:[q],lockedBalances:[x]}}async getAllPosRelevantData({account:e,marginManagerList:t}){try{let{openOrders:r,settledBalances:i,lockedBalances:s}=await this.betchGetOpenOrders({account:e,marginManagerList:t}),a=await this.batchGetBorrowedShares({account:e,marginManagerList:t}),o=new H,u=0,l=[];t.forEach(g=>{o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::base_balance`,arguments:[o.object(g.marginManagerId)],typeArguments:[g.baseCoinType,g.quoteCoinType]}),l[u]={type:"base_balance",marginManagerId:g.marginManagerId},u++,o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::quote_balance`,arguments:[o.object(g.marginManagerId)],typeArguments:[g.baseCoinType,g.quoteCoinType]}),l[u]={type:"quote_balance",marginManagerId:g.marginManagerId},u++,o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_published_at}::margin_manager::deep_balance`,arguments:[o.object(g.marginManagerId)],typeArguments:[g.baseCoinType,g.quoteCoinType]}),l[u]={type:"deep_balance",marginManagerId:g.marginManagerId},u++;let v=a?.find(C=>C.marginManagerId===g.marginManagerId);if(v&&(Number(v.baseBorrowedShare)>0||Number(v.quoteBorrowedShare)>0)){let C=v.baseBorrowedShare,S=v.quoteBorrowedShare,j=!!T(C).gt(T(S)),x=j?g.baseMarginPool:g.quoteMarginPool,q=j?C:S;o.moveCall({target:`${this._sdk.sdkOptions.deepbook.margin_package_id}::margin_pool::borrow_shares_to_amount`,arguments:[o.object(x),o.pure.u64(BigInt(q)),o.object.clock()],typeArguments:[j?g?.baseCoinType:g?.quoteCoinType]}),l[u]={type:j?"borrow_base_amount":"borrow_quote_amount",marginManagerId:g.marginManagerId},u++}});let f=await this.sdk.fullClient.devInspectTransactionBlock({sender:e,transactionBlock:o}),p=Object.fromEntries(t.map(g=>[g.marginManagerId,{...g,quote_balance:"0",base_balance:"0",deep_balance:"0",borrow_base_amount:"0",borrow_quote_amount:"0",open_orders:[],settled_balances:{base:"0",quote:"0",deep:"0"}}]));return f?.results?.forEach((g,v)=>{let C=l[v],S=P.U64.parse(new Uint8Array(g.returnValues[0][0]));p[C.marginManagerId]={...p[C.marginManagerId],[C.type]:S}}),r.forEach(g=>{p[g.marginManagerId].open_orders.push(g)}),i.forEach(g=>{p[g.marginManagerId].settled_balances=g}),s.forEach(g=>{p[g.marginManagerId].locked_balances=g}),Object.values(p).forEach(g=>{g.locked_balances&&g.settled_balances&&(g.locked_balances={...g.locked_balances,base:T(g.locked_balances.base||"0").minus(T(g.settled_balances.base||"0")).toString(),quote:T(g.locked_balances.quote||"0").minus(T(g.settled_balances.quote||"0")).toString(),deep:T(g.locked_balances.deep||"0").minus(T(g.settled_balances.deep||"0")).toString()})}),p}catch(r){throw new Error(`Failed to get all pos relevant data: ${r instanceof Error?r.message:String(r)}`)}}async addConditionalOrder(e,t){let{margin_utils:r}=this.sdk.sdkOptions,{global_config_id:i,versioned_id:s,margin_registry_id:a}=r,{margin_manager_id:o,pool_id:u,base_coin:l,quote_coin:f,conditional_order_id:p,pending_order:g,is_trigger_below_price:v,trigger_price:C}=e,S=await this.pythPrice.updatePythPriceIDs([l.feed,f.feed],t),j=S.get(l.feed),x=S.get(f.feed);if(!j||!x)throw new Error("Failed to get price feed object IDs");let q=t.moveCall({target:`${r.published_at}::margin_utils::new_condition`,arguments:[t.pure.bool(v),t.pure.u64(C)]}),A=this.newPendingOrder(g,t);t.moveCall({target:`${r.published_at}::margin_utils::add_conditional_order`,arguments:[t.object(i),t.object(s),t.object(o),t.object(u),t.object(j),t.object(x),t.object(a),typeof p=="string"?t.pure.u64(BigInt(p)):p,q,A,t.object(bn)],typeArguments:[l.coinType,f.coinType]})}newPendingOrder(e,t){let{margin_utils:r}=this.sdk.sdkOptions;if("price"in e){let{client_order_id:i,order_type:s,self_matching_option:a,price:o,quantity:u,is_bid:l,pay_with_deep:f,expire_timestamp:p}=e;return t.moveCall({target:`${r.published_at}::margin_utils::new_pending_limit_order`,arguments:[t.pure.u64(i),t.pure.u8(s),t.pure.u8(a),t.pure.u64(o),t.pure.u64(u),t.pure.bool(l),t.pure.bool(f),t.pure.u64(p)]})}else{let{client_order_id:i,self_matching_option:s,quantity:a,is_bid:o,pay_with_deep:u}=e;return t.moveCall({target:`${r.published_at}::margin_utils::new_pending_market_order`,arguments:[t.pure.u64(i),t.pure.u8(s),t.pure.u64(a),t.pure.bool(o),t.pure.bool(u)]})}}cancelAllConditionalOrders(e,t){let{margin_utils:r}=this.sdk.sdkOptions,{global_config_id:i,versioned_id:s}=r,{margin_manager_id:a,base_coin_type:o,quote_coin_type:u}=e;t.moveCall({target:`${r.published_at}::margin_utils::cancel_all_conditional_orders`,arguments:[t.object(i),t.object(s),t.object(a),t.object(bn)],typeArguments:[o,u]})}cancelConditionalOrders(e,t){let{margin_utils:r}=this.sdk.sdkOptions,{global_config_id:i,versioned_id:s}=r,{margin_manager_id:a,base_coin_type:o,quote_coin_type:u,conditional_order_id:l}=e;t.moveCall({target:`${r.published_at}::margin_utils::cancel_conditional_order`,arguments:[t.object(i),t.object(s),t.object(a),t.pure.u64(l),t.object(bn)],typeArguments:[o,u]})}async getConditionalOrders(e,t){let{deepbook:r}=this.sdk.sdkOptions;e.forEach(u=>{let{margin_manager_id:l,base_coin_type:f,quote_coin_type:p,conditional_order_ids:g}=u;g.forEach(v=>{t.moveCall({target:`${r.margin_package_id}::margin_manager::conditional_order`,arguments:[t.object(l),t.pure.u64(v)],typeArguments:[f,p]})})});let i=await this.sdk.fullClient.devInspectTransactionBlock({sender:Cn("0x0"),transactionBlock:t});if(!i?.results)return[];let s=P.struct("Condition",{trigger_below_price:P.bool(),trigger_price:P.u64()}),a=P.struct("PendingOrder",{is_limit_order:P.bool(),client_order_id:P.u64(),order_type:P.option(P.u8()),self_matching_option:P.u8(),price:P.option(P.u64()),quantity:P.u64(),is_bid:P.bool(),pay_with_deep:P.bool(),expire_timestamp:P.option(P.u64())}),o=P.struct("ConditionalOrder",{conditional_order_id:P.u64(),condition:s,pending_order:a});return i.results.map(u=>{if(!u?.returnValues?.[0]?.[0])return null;try{let l=new Uint8Array(u.returnValues[0][0]);if(l.length===0)return null;let f;if(l[0]===0)return null;l[0]===1?f=l.subarray(1):f=l;let p=o.parse(f),g=this.normalizeConditionalOrder(p);return e.forEach(v=>{v.conditional_order_ids.find(S=>S===g.conditional_order_id)&&(g.margin_manager_id=v.margin_manager_id,g.base_coin_type=v.base_coin_type,g.quote_coin_type=v.quote_coin_type)}),g}catch{return null}})}async getConditionalOrderIds(e,t){t=t||new H;let{deepbook:r}=this.sdk.sdkOptions,i={};return e.forEach(a=>{let{margin_manager_id:o,base_coin_type:u,quote_coin_type:l}=a;t.moveCall({target:`${r.margin_package_id}::margin_manager::conditional_order_ids`,arguments:[t.object(o)],typeArguments:[u,l]})}),(await this.sdk.fullClient.devInspectTransactionBlock({sender:Cn("0x0"),transactionBlock:t})).results.forEach((a,o)=>{if(a?.returnValues?.[0]?.[0]){let u=new Uint8Array(a.returnValues[0][0]),l=P.vector(P.u64()).parse(u),f={margin_manager_id:e[o].margin_manager_id,base_coin_type:e[o].base_coin_type,quote_coin_type:e[o].quote_coin_type,conditional_order_ids:l.map(p=>p.toString())};i[e[o].margin_manager_id]=f}}),i}normalizeConditionalOrder(e){let t=r=>typeof r=="bigint"?String(r):r;return{margin_manager_id:"",base_coin_type:"",quote_coin_type:"",conditional_order_id:t(e.conditional_order_id),condition:{trigger_below_price:e.condition.trigger_below_price,trigger_price:t(e.condition.trigger_price)},pending_order:{is_limit_order:e.pending_order.is_limit_order,client_order_id:t(e.pending_order.client_order_id),order_type:e.pending_order.order_type,self_matching_option:e.pending_order.self_matching_option,price:e.pending_order.price,quantity:t(e.pending_order.quantity),is_bid:e.pending_order.is_bid,pay_with_deep:e.pending_order.pay_with_deep,expire_timestamp:e.pending_order.expire_timestamp}}}};import va from"decimal.js";va.config({precision:64,rounding:va.ROUND_DOWN,toExpNeg:-64,toExpPos:64});import{Transaction as Vu}from"@mysten/sui/transactions";async function ap(n,e=!0){console.log("inputs",n.getData().inputs),n.getData().commands.forEach((t,r)=>{e&&console.log(`transaction ${r}: `,t)})}var Ut=class{static async adjustTransactionForGas(e,t,r,i){i.setSender(e.senderAddress);let s=se.selectCoinAssetGreaterThanOrEqual(t,r).selectedCoins;if(s.length===0)throw new Error("Insufficient balance");let a=se.calculateTotalBalance(t);if(a-r>1e9)return{fixAmount:r};let o=await e.fullClient.calculationTxGas(i);if(se.selectCoinAssetGreaterThanOrEqual(t,BigInt(o),s.map(l=>l.coinObjectId)).selectedCoins.length===0){let l=BigInt(o)+BigInt(500);if(a-r<l){if(r-=l,r<0)throw new Error("gas Insufficient balance");let f=new Vu;return{fixAmount:r,newTx:f}}}return{fixAmount:r}}static buildCoinForAmount(e,t,r,i,s=!0,a=!1){let o=se.getCoinAssets(i,t);if(r===BigInt(0)&&o.length===0)return Ut.buildZeroValueCoin(t,e,i,s);let u=se.calculateTotalBalance(o);if(u<r)throw new Error(`The amount(${u}) is Insufficient balance for ${i} , expect ${r} `);return Ut.buildCoin(e,t,o,r,i,s,a)}static buildCoin(e,t,r,i,s,a=!0,o=!1){if(se.isSuiCoin(s)){if(a){let A=e.splitCoins(e.gas,[e.pure.u64(i)]);return{targetCoin:e.makeMoveVec({elements:[A]}),remainCoins:t,tragetCoinAmount:i.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}if(i===0n&&r.length>1){let A=se.selectCoinObjectIdGreaterThanOrEqual(r,i);return{targetCoin:e.object(A.objectArray[0]),remainCoins:A.remainCoins,tragetCoinAmount:A.amountArray[0],isMintZeroCoin:!1}}let x=se.selectCoinObjectIdGreaterThanOrEqual(r,i);return{targetCoin:e.splitCoins(e.gas,[e.pure.u64(i)]),remainCoins:x.remainCoins,tragetCoinAmount:i.toString(),isMintZeroCoin:!1,originalSplitedCoin:e.gas}}let u=se.selectCoinObjectIdGreaterThanOrEqual(r,i),l=u.amountArray.reduce((x,q)=>Number(x)+Number(q),0).toString(),f=u.objectArray;if(a)return{targetCoin:e.makeMoveVec({elements:f.map(x=>e.object(x))}),remainCoins:u.remainCoins,tragetCoinAmount:u.amountArray.reduce((x,q)=>Number(x)+Number(q),0).toString(),isMintZeroCoin:!1};let[p,...g]=f,v=e.object(p),C=v,S=u.amountArray.reduce((x,q)=>Number(x)+Number(q),0).toString(),j;return g.length>0&&e.mergeCoins(v,g.map(x=>e.object(x))),o&&Number(l)>Number(i)&&(C=e.splitCoins(v,[e.pure.u64(i)]),S=i.toString(),j=v),{targetCoin:C,remainCoins:u.remainCoins,originalSplitedCoin:j,tragetCoinAmount:S,isMintZeroCoin:!1}}static buildZeroValueCoin(e,t,r,i=!0){let s=Ut.callMintZeroValueCoin(t,r),a;return i?a=t.makeMoveVec({elements:[s]}):a=s,{targetCoin:a,remainCoins:e,isMintZeroCoin:!0,tragetCoinAmount:"0"}}static buildCoinForAmountInterval(e,t,r,i,s=!0){let a=se.getCoinAssets(i,t);if(r.amountFirst===BigInt(0))return a.length>0?Ut.buildCoin(e,[...t],[...a],r.amountFirst,i,s):Ut.buildZeroValueCoin(t,e,i,s);let o=se.calculateTotalBalance(a);if(o>=r.amountFirst)return Ut.buildCoin(e,[...t],[...a],r.amountFirst,i,s);if(o<r.amountSecond)throw new Error(`The amount(${o}) is Insufficient balance for ${i} , expect ${r.amountSecond} `);return Ut.buildCoin(e,[...t],[...a],r.amountSecond,i,s)}static buildCoinTypePair(e,t){let r=[];if(e.length===2){let i=[];i.push(e[0],e[1]),r.push(i)}else{let i=[];i.push(e[0],e[e.length-1]),r.push(i);for(let s=1;s<e.length-1;s+=1){if(t[s-1]===0)continue;let a=[];a.push(e[0],e[s],e[e.length-1]),r.push(a)}}return r}},Si=Ut;zi(Si,"callMintZeroValueCoin",(e,t)=>e.moveCall({target:"0x2::coin::zero",typeArguments:[t]}));var xt=1000000000n,Zu=365n*24n*60n*60n*1000n;function zu(n,e){return e===0n?0n:n*xt/e}function Gu(n,e){let{base_rate:t,base_slope:r,optimal_utilization:i,excess_slope:s}=e;if(n<i)return t+n*r/xt;{let a=n-i,o=i*r/xt,u=a*s/xt;return t+o+u}}function ka(n,e){let t=n*e,r=t/xt;return t%xt>0n?r+1n:r}function Wu(n,e,t,r){let i=e.borrow_shares===0n?xt:e.total_borrow*xt/e.borrow_shares,s=ka(n,i),a=zu(e.total_borrow,e.total_supply),o=Gu(a,t),u=r-e.last_update_timestamp,l=e.total_borrow*o/xt*u/Zu,f=e.borrow_shares===0n?0n:ka(l,n*xt/e.borrow_shares),p=s+f;return{confirmedDebt:s,estimatedInterest:f,totalDebt:p,annualInterestRate:o}}function up(n,e,t,r,i=60000n){let s=r+i,{totalDebt:a}=Wu(n,e,t,s);return a}var Mn=class{_cache={};_rpcModule;_deepbookUtils;_marginUtils;_pythPrice;_graphqlClient;_sdkOptions;_senderAddress="";constructor(e){this._sdkOptions=e,this._graphqlClient=new Hu({url:e.graphqlUrl,network:e.network}),this._rpcModule=fi(new Ku({url:e.fullRpcUrl,network:e.network}),this._graphqlClient,void 0,e.network),this._pythPrice=new Rr(this),this._deepbookUtils=new kn(this),this._marginUtils=new Tn(this),bi(this._sdkOptions)}get senderAddress(){return this._senderAddress}set senderAddress(e){this._senderAddress=e}get DeepbookUtils(){return this._deepbookUtils}get MarginUtils(){return this._marginUtils}get PythPrice(){return this._pythPrice}get fullClient(){return this._rpcModule}get graphqlClient(){return this._graphqlClient}get sdkOptions(){return this._sdkOptions}async getOwnerCoinAssets(e,t,r=!0){let i=[],s=null,a=`${this.sdkOptions.fullRpcUrl}_${e}_${t}_getOwnerCoinAssets`,o=this.getCache(a,r);if(o)return o;for(;;){let u=await(t?this.fullClient.getCoins({owner:e,coinType:t,cursor:s}):this.fullClient.getAllCoins({owner:e,cursor:s}));if(u.data.forEach(l=>{BigInt(l.balance)>0&&i.push({coinAddress:Et(l.coinType).source_address,coinObjectId:l.coinObjectId,balance:BigInt(l.balance)})}),s=u.nextCursor,!u.hasNextPage)break}return this.updateCache(a,i,30*1e3),i}async getOwnerCoinBalances(e,t){let r=[];return t?r=[await this.fullClient.getBalance({owner:e,coinType:t})]:r=[...await this.fullClient.getAllBalances({owner:e})],r}updateCache(e,t,r=864e5){let i=this._cache[e];i?(i.overdueTime=Br(r),i.value=t):i=new Pr(t,Br(r)),this._cache[e]=i}getCache(e,t=!1){let r=this._cache[e],i=r?.isValid();if(!t&&i)return r.value;i||delete this._cache[e]}};var Ip="0x0000000000000000000000000000000000000000000000000000000000000006",Pp="pool_script",Bp="pool_script_v2",qp="router",Rp="router_with_partner",Dp="fetcher_script",Up="expect_swap",$p="utils",Np="0x1::coin::CoinInfo",Fp="0x1::coin::CoinStore",Lp="custodian_v2",Vp="clob_v2",Zp="endpoints_v2",zp=n=>{if(typeof n=="string"&&n.startsWith("0x"))return"object";if(typeof n=="number"||typeof n=="bigint")return"u64";if(typeof n=="boolean")return"bool";throw new Error(`Unknown type for value: ${n}`)};var Qu=(i=>(i[i.NO_RESTRICTION=0]="NO_RESTRICTION",i[i.IMMEDIATE_OR_CANCEL=1]="IMMEDIATE_OR_CANCEL",i[i.FILL_OR_KILL=2]="FILL_OR_KILL",i[i.POST_ONLY=3]="POST_ONLY",i))(Qu||{}),Xu=(r=>(r[r.SELF_MATCHING_ALLOWED=0]="SELF_MATCHING_ALLOWED",r[r.CANCEL_TAKER=1]="CANCEL_TAKER",r[r.CANCEL_MAKER=2]="CANCEL_MAKER",r))(Xu||{});var sf=Mn;export{Ip as CLOCK_ADDRESS,Pr as CachedContent,Mn as CetusClmmSDK,Up as ClmmExpectSwapModule,Dp as ClmmFetcherModule,Pp as ClmmIntegratePoolModule,Bp as ClmmIntegratePoolV2Module,qp as ClmmIntegrateRouterModule,Rp as ClmmIntegrateRouterWithPartnerModule,$p as ClmmIntegrateUtilsModule,se as CoinAssist,Np as CoinInfoAddress,Fp as CoinStoreAddress,Ti as DEEP_SCALAR,Kd as DEFAULT_GAS_BUDGET_FOR_MERGE,Hd as DEFAULT_GAS_BUDGET_FOR_SPLIT,Jd as DEFAULT_GAS_BUDGET_FOR_STAKE,Qd as DEFAULT_GAS_BUDGET_FOR_TRANSFER,Xd as DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI,eh as DEFAULT_NFT_TRANSFER_GAS_FEE,Vp as DeepbookClobV2Moudle,Lp as DeepbookCustodianV2Moudle,Zp as DeepbookEndpointsV2Moudle,kn as DeepbookUtilsModule,vt as FLOAT_SCALAR,xt as FLOAT_SCALING,Yd as GAS_SYMBOL,wi as GAS_TYPE_ARG,na as GAS_TYPE_ARG_LONG,Tn as MarginUtilsModule,Zd as NORMALIZED_SUI_COIN_TYPE,Qu as OrderType,th as SUI_SYSTEM_STATE_OBJECT_ID,Xu as SelfMatchingOption,Si as TransactionUtil,Zu as YEAR_MS,Ys as addHexPrefix,dh as asIntN,lh as asUintN,Bd as bufferToHex,sa as cacheTime1min,Qt as cacheTime24h,aa as cacheTime5min,up as calc100PercentRepay,Wu as calcDebtDetail,Gu as calcInterestRate,zu as calcUtilizationRate,Fh as calculateRiskRatio,Pd as checkAddress,ta as composeType,T as d,vi as decimalsMultiplier,sf as default,Ld as extractAddressFromType,Et as extractStructTagFromType,Vd as fixCoinType,fr as fixDown,Ou as fixSuiObjectId,mr as fromDecimalsAmount,zp as getDefaultSuiInputType,Br as getFutureTime,Ci as getMoveObject,qu as getMoveObjectType,yh as getMovePackageContent,ju as getObjectDeletedResponse,kh as getObjectDisplay,_a as getObjectFields,ga as getObjectId,Iu as getObjectNotExistsResponse,vh as getObjectOwner,wh as getObjectPreviousTransactionDigest,ma as getObjectReference,bh as getObjectType,_h as getObjectVersion,qr as getSuiObjectData,Ch as hasPublicTransfer,qd as hexToNumber,Rd as hexToString,Fd as isSortedSymbols,Pu as isSuiObjectResponse,ki as maxDecimal,ka as mulRoundUp,yi as normalizeCoinType,bi as patchFixSuiObjectId,ap as printTransaction,gi as removeHexPrefix,hh as secretKeyToEd25519Keypair,ph as secretKeyToSecp256k1Keypair,Id as shortAddress,wu as shortString,da as sleepTime,vu as toBuffer,Kr as toDecimalsAmount,ku as utf8to16,wa as wrapDeepBookMarginPoolInfo,ba as wrapDeepBookPoolInfo};
43
+ /*! Bundled license information:
44
+
45
+ @cetusprotocol/common-sdk/dist/index.js:
46
+ (*! Bundled license information:
47
+
48
+ decimal.js/decimal.mjs:
49
+ (*!
50
+ * decimal.js v10.6.0
51
+ * An arbitrary-precision Decimal type for JavaScript.
52
+ * https://github.com/MikeMcl/decimal.js
53
+ * Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>
54
+ * MIT Licence
55
+ *)
56
+ *)
57
+ */