@raydium-io/raydium-sdk-v2
Version:
An SDK for building applications on top of Raydium.
3 lines • 230 kB
JavaScript
var Pa=Object.defineProperty,Aa=Object.defineProperties;var wa=Object.getOwnPropertyDescriptors;var Un=Object.getOwnPropertySymbols;var Wi=Object.prototype.hasOwnProperty,qi=Object.prototype.propertyIsEnumerable;var Di=(l,e,t)=>e in l?Pa(l,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):l[e]=t,_=(l,e)=>{for(var t in e||(e={}))Wi.call(e,t)&&Di(l,t,e[t]);if(Un)for(var t of Un(e))qi.call(e,t)&&Di(l,t,e[t]);return l},E=(l,e)=>Aa(l,wa(e));var at=(l,e)=>{var t={};for(var n in l)Wi.call(l,n)&&e.indexOf(n)<0&&(t[n]=l[n]);if(l!=null&&Un)for(var n of Un(l))e.indexOf(n)<0&&qi.call(l,n)&&(t[n]=l[n]);return t};import{PublicKey as Z,SystemProgram as fa}from"@solana/web3.js";import{createTransferInstruction as ya,TOKEN_PROGRAM_ID as be,TOKEN_2022_PROGRAM_ID as bn,createAssociatedTokenAccountIdempotentInstruction as gn,createSyncNativeInstruction as ba,createTransferCheckedInstruction as Lc}from"@solana/spl-token";import j from"bn.js";import se from"decimal.js";import{PublicKey as zi}from"@solana/web3.js";import{get as Ui,set as ka}from"lodash";var Mo=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},Gi={},Ta={};function te(l){let e=Ui(Gi,l);if(!e){let t=Ui(Ta,l);e=new Mo({name:l,logLevel:t}),ka(Gi,l,e)}return e}import{MINT_SIZE as ha,TOKEN_PROGRAM_ID as Ba,getTransferFeeConfig as Ia,unpackMint as xa}from"@solana/spl-token";var Fo=te("Raydium_accountInfo_util");async function st(l,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=_({batchRequest:!1},t),r=vo(e,i),a=new Array(r.length).fill([]);if(n){let c=r.map(f=>{let d=l._buildArgs([f.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=vo(c,10);a=(await(await Promise.all(u.map(async f=>await l._rpcBatchRequest(f)))).flat()).map(f=>(f.error&&Fo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${f.error.message}`),f.result.value.map(d=>{if(d){let{data:p,executable:g,lamports:y,owner:b,rentEpoch:P}=d;return p.length!==2&&p[1]!=="base64"&&Fo.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:g,lamports:y,owner:new zi(b),rentEpoch:P}}return null})))}else try{a=await Promise.all(r.map(c=>l.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&Fo.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function pt(l,e,t){let n=await st(l,e.map(o=>o.pubkey),t);return e.map((o,i)=>E(_({},o),{accountInfo:n[i]}))}async function Gn({connection:l,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await pt(l,e.map(c=>({pubkey:it(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<ha){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=xa(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=E(_({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||Ba,feeConfig:(a=Ia(u))!=null?a:void 0})}return o[zi.default.toBase58()]=o[Ae.toBase58()],o}import _t from"bn.js";import VR from"decimal.js";import Ma from"big.js";import Yn from"bn.js";import Sa from"toformat";var Ka=Sa,An=Ka;import Xn from"big.js";import Ra from"bn.js";import La from"decimal.js-light";import wn from"bn.js";var Xi=9007199254740991;function ge(l){let e=te("Raydium_parseBigNumberish");if(l instanceof wn)return l;if(typeof l=="string"){if(l.match(/^-?[0-9]+$/))return new wn(l);e.logWithError(`invalid BigNumberish string: ${l}`)}return typeof l=="number"?(l%1&&e.logWithError(`BigNumberish number underflow: ${l}`),(l>=Xi||l<=-Xi)&&e.logWithError(`BigNumberish number overflow: ${l}`),new wn(String(l))):typeof l=="bigint"?new wn(l.toString()):(e.error(`invalid BigNumberish value: ${l}`),new wn(0))}var zn=te("module/fraction"),_o=An(Xn),kn=An(La),Oa={[0]:kn.ROUND_DOWN,[1]:kn.ROUND_HALF_UP,[2]:kn.ROUND_UP},Na={[0]:Xn.roundDown,[1]:Xn.roundHalfUp,[2]:Xn.roundUp},ue=class{constructor(e,t=new Ra(1)){this.numerator=ge(e),this.denominator=ge(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ue(this.denominator,this.numerator)}add(e){let t=e instanceof ue?e:new ue(ge(e));return this.denominator.eq(t.denominator)?new ue(this.numerator.add(t.numerator),this.denominator):new ue(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ue?e:new ue(ge(e));return this.denominator.eq(t.denominator)?new ue(this.numerator.sub(t.numerator),this.denominator):new ue(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ue?e:new ue(ge(e));return new ue(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ue?e:new ue(ge(e));return new ue(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||zn.logWithError(`${e} is not an integer.`),e<=0&&zn.logWithError(`${e} is not positive.`),kn.set({precision:e+1,rounding:Oa[n]});let o=new kn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||zn.logWithError(`${e} is not an integer.`),e<0&&zn.logWithError(`${e} is negative.`),_o.DP=e,_o.RM=Na[n]||1,new _o(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Fa=te("Raydium_amount"),Yi=An(Ma);function va(l,e){let t="0",n="0";if(l.includes(".")){let o=l.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Fa.logWithError(`invalid number string, num: ${l}`)}else t=l;return[t,n.slice(0,e)||n]}var fe=class extends ue{constructor(t,n,o=!0,i){let r=new Yn(0),a=Vo.pow(new Yn(t.decimals));if(o)r=ge(n);else{let c=new Yn(0),u=new Yn(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[s,f]=va(n.toString(),t.decimals);c=ge(s),u=ge(f)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=te(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new fe(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new fe(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Yi.DP=this.token.decimals,new Yi(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as _a}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Hi}from"@solana/spl-token";var Hn={chainId:101,address:_a.default.toBase58(),programId:Hi.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},ft={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Hi.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Wo}from"@solana/web3.js";import{PublicKey as Te,SystemProgram as Qi,SYSVAR_RENT_PUBKEY as Va}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ea}from"@solana/spl-token";function M({pubkey:l,isSigner:e=!1,isWritable:t=!0}){return{pubkey:l,isWritable:t,isSigner:e}}var Da=[M({pubkey:Ea,isWritable:!1}),M({pubkey:Qi.programId,isWritable:!1}),M({pubkey:Va,isWritable:!1})];function Eo({publicKey:l,transformSol:e}){let t=Do(l.toString());if(t instanceof Te)return e&&t.equals(Dt)?Ae:t;if(e&&t.toString()===Dt.toBase58())return Ae;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Do(l){try{return new Te(l)}catch{return l}}var It=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ut=new Te("SysvarRent111111111111111111111111111111111"),Al=new Te("SysvarC1ock11111111111111111111111111111111"),Rt=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Wa=new Te("Sysvar1nstructions1111111111111111111111111"),qa=Qi.programId,wl=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),kl=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Tl=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),hl=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Bl=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Il=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),xl=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Sl=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Kl=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Cl=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Rl=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Ae=new Te("So11111111111111111111111111111111111111112"),Dt=Te.default;function it(l){return Eo({publicKey:l,transformSol:!0})}var qo=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===Dt.toBase58()||e instanceof Wo&&Dt.equals(e)){this.decimals=ft.decimals,this.symbol=ft.symbol,this.name=ft.name,this.mint=new Wo(ft.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?Wo.default:Eo({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ce=qo;Ce.WSOL=new qo(E(_({},ft),{mint:ft.address}));var Uo=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Qn=Uo;Qn.SOL=new Uo(Hn);import Ua from"bn.js";var Zi=new ue(new Ua(100)),yt=class extends ue{toSignificant(e=5,t,n){return this.mul(Zi).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Zi).toFixed(e,t,n)}};var Ga=te("Raydium_price"),$e=class extends ue{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new ue(Go(n.decimals),Go(o.decimals))}get raw(){return new ue(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Ga.logWithError("mul token not equals");let n=super.mul(t);return new $e({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};import{merge as xK}from"lodash";import em from"axios";var $i={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",TEMP_HOST:"https://temp-api-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",CLMM_DYNAMIC_CONFIG:"/main/clmm-dynamic-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://lite-api.jup.ag/tokens/v2/tag?query=verified",POOL_LIST:"/pools/info/list-v2",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/list-v2",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position",LAUNCH_AUTH_HOST:"https://launch-auth-v1.raydium.io",LAUNCH_COMMENT_HOST:"hhttps://launch-forum-v1.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1.raydium.io"},za=E(_({},$i),{BASE_HOST:"https://api-v3-devnet.raydium.io",OWNER_BASE_HOST:"https://owner-v1-devnet.raydium.io",SWAP_HOST:"https://transaction-v1-devnet.raydium.io",CPMM_LOCK:"https://dynamic-ipfs-devnet.raydium.io/lock/cpmm/position",TEMP_HOST:"https://temp-api-v1-devnet.raydium.io",LAUNCH_AUTH_HOST:"https://launch-auth-v1-devnet.raydium.io",LAUNCH_COMMENT_HOST:"https://launch-forum-v1-devnet.raydium.io",LAUNCH_HISTORY_HOST:"https://launch-history-v1-devnet.raydium.io",LAUNCH_MINT_HOST:"https://launch-mint-v1-devnet.raydium.io"});var hm=te("Raydium_Api");import{PublicKey as Gp,SystemProgram as zp}from"@solana/web3.js";import{AccountLayout as Zp,createAssociatedTokenAccountIdempotentInstruction as $p,TOKEN_PROGRAM_ID as jp,TOKEN_2022_PROGRAM_ID as Jp}from"@solana/spl-token";import{PublicKey as en,sendAndConfirmTransaction as Zo,SystemProgram as $a,Transaction as Bn,TransactionMessage as In,VersionedTransaction as xn}from"@solana/web3.js";import ja from"axios";import{PublicKey as zo,AddressLookupTableAccount as jt}from"@solana/web3.js";async function Xo({connection:l,address:e,cluster:t="mainnet"}){let n=await st(l,[...new Set(e.map(i=>i.toString()))].map(i=>new zo(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new jt({key:a,state:jt.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?$t[a.toString()]=c:Zt[a.toString()]=c}return o}var Zt={},Yo=async l=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Zt[e])return Zt;let t=new zo(e),n=await l.getAccountInfo(t);return n&&(Zt[e]=new jt({key:t,state:jt.deserialize(n.data)})),Zt},$t={},Ho=async l=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if($t[e])return $t;let t=new zo(e),n=await l.getAccountInfo(t);return n&&($t[e]=new jt({key:t,state:jt.deserialize(n.data)})),$t};var $={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV4Withdraw:"FarmV4Withdraw",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee",TransferTip:"TransferTip"};import{ComputeBudgetProgram as ji,Keypair as er,PublicKey as Xa,Transaction as tr,TransactionMessage as Ya,VersionedTransaction as nr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ha}from"@solana/spl-token";var Ji=te("Raydium_txUtil"),or=1644;function Zn(l){let e=[],t=[];return l.microLamports&&(e.push(ji.setComputeUnitPrice({microLamports:l.microLamports})),t.push($.SetComputeUnitPrice)),l.units&&(e.push(ji.setComputeUnitLimit({units:l.units})),t.push($.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Jt(l,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=l.getLatestBlockhash)==null?void 0:n.call(l,{commitment:t})))==null?void 0:o.blockhash}async function $n(l,e){return l.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);l.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function Qo(l,e){l.length<1&&Ji.logWithError(`no instructions provided: ${l.toString()}`),e.length<1&&Ji.logWithError(`no signers provided:, ${e.toString()}`);let t=new tr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...l);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<or}catch{return!1}}function ie(l,e){let[t,n]=Xa.findProgramAddressSync(l,e);return{publicKey:t,nonce:n}}function Tn({instructions:l,payer:e,signers:t}){return Qo(l,[e,...t])}function hn({instructions:l,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=er.generate().publicKey.toString()}){let i=new Ya({payerKey:e,recentBlockhash:n,instructions:l}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new nr(i).serialize()).toString("base64").length<or}catch{return!1}}var Qa=l=>Buffer.isBuffer(l)?l:l instanceof Uint8Array?Buffer.from(l.buffer,l.byteOffset,l.byteLength):Buffer.from(l),Za=l=>{let e=l.serialize({requireAllSignatures:!1,verifySignatures:!1});l instanceof nr&&(e=Qa(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Wt(l){let e=[];return l.forEach(t=>{t instanceof tr&&(t.recentBlockhash||(t.recentBlockhash=Ha.toBase58()),t.feePayer||(t.feePayer=er.generate().publicKey)),e.push(Za(t))}),console.log("simulate tx string:",e),e}var jn=2e3,Jn=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.loopMultiTxStatus=!!e.loopMultiTxStatus}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await ja.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=Zn(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push($a.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new en(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push($.TransferTip),!0):!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:r=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...r.filter(a=>a!==en.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(E(_({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new Bn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var s;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=i!=null?i:await Jt(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Wt([t]),(s=this.owner)!=null&&s.isKeyPair)return{txId:a?await Zo(this.connection,t,this.signers.find(d=>d.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let f=await this.signAllTransactions([t]);if(this.signers.length)for(let d of f)try{d.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(f[0].serialize(),{skipPreflight:r}),signedTx:f[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(s=>s.transaction.instructions.length>0),r=[o,...i.map(s=>s.transaction)],a=[this.signers,...i.map(s=>s.signers)],c=[...this.instructionTypes,...i.map(s=>s.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(s=>{s.some(f=>f.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:c,execute:async s=>{var P;let{sequentially:f,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:g,skipPreflight:y=!0}=s||{},b=g!=null?g:await Jt(this.connection,this.blockhashCommitment);if((P=this.owner)!=null&&P.isKeyPair){if(f){let w=[],B=0;for(let I of r){if(++B,B<=p)continue;let A=await Zo(this.connection,I,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});w.push(A)}return{txIds:w,signedTxs:r}}return{txIds:await await Promise.all(r.map(async w=>(w.recentBlockhash=b,await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let w=r.map((I,A)=>(I.recentBlockhash=b,a[A].length&&I.sign(...a[A]),I));Wt(w);let B=await this.signAllTransactions(w);if(f){let I=0,A=[],k=async()=>{if(!B[I])return;let T=await this.connection.sendRawTransaction(B[I].serialize(),{skipPreflight:y});A.push({txId:T,status:"sent",signedTx:B[I]}),d==null||d([...A]),I++;let K=!1,S=null,x=null,V=F=>{S!==null&&clearInterval(S),x!==null&&this.connection.removeSignatureListener(x);let N=A.findIndex(q=>q.txId===T);if(N>-1){if(A[N].status==="error"||A[N].status==="success")return;A[N].status=F.err?"error":"success"}d==null||d([...A]),F.err||k()};this.loopMultiTxStatus&&(S=setInterval(async()=>{var F;if(K){clearInterval(S);return}try{let N=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:1});N&&(K=!0,clearInterval(S),V({err:((F=N.meta)==null?void 0:F.err)||null}),console.log("tx status from getTransaction:",T))}catch(N){K=!0,clearInterval(S),console.error("getTransaction timeout:",N,T)}},jn)),x=this.connection.onSignature(T,F=>{if(K){this.connection.removeSignatureListener(x);return}K=!0,V(F)},"confirmed"),this.connection.getSignatureStatus(T)};return await k(),{txIds:A.map(T=>T.txId),signedTxs:B}}else{let I=[];for(let A=0;A<B.length;A+=1){let k=await this.connection.sendRawTransaction(B[A].serialize(),{skipPreflight:y});I.push(k)}return{txIds:I,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let g=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=g,r=at(g,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Ho(this.connection):await Yo(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new en(b));let s=await Xo({connection:this.connection,address:u});for(let[b,P]of Object.entries(s))a[b]=P;let f=o?en.default.toBase58():i!=null?i:await Jt(this.connection,this.blockhashCommitment),d=new In({payerKey:this.feePayer,recentBlockhash:f,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new xn(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var I;let{skipPreflight:P=!0,sendAndConfirm:w,notSendToRpc:B}=b||{};if(Wt([p]),(I=this.owner)!=null&&I.isKeyPair){let A=await this.connection.sendTransaction(p,{skipPreflight:P});return w&&await $n(this.connection,A),{txId:A,signedTx:p}}if(this.signAllTransactions){let A=await this.signAllTransactions([p]);if(this.signers.length)for(let k of A)try{k.sign(this.signers)}catch{}return{txId:B?"":await this.connection.sendTransaction(A[0],{skipPreflight:P}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(s=>s.builder.instructions.length>0),r=[o,...i.map(s=>s.transaction)],a=[this.signers,...i.map(s=>s.signers)],c=[...this.instructionTypes,...i.map(s=>s.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(s=>{s.some(f=>f.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(s,f)=>{s.sign(a[f])}),{builder:this,transactions:r,signers:a,instructionTypes:c,buildProps:n,execute:async s=>{var y;let{sequentially:f,onTxUpdate:d,recentBlockHash:p,skipPreflight:g=!0}=s||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),Wt(r),(y=this.owner)!=null&&y.isKeyPair){if(f){let b=[];for(let P of r){let w=await this.connection.sendTransaction(P,{skipPreflight:g});await $n(this.connection,w),b.push(w)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:g}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(f){let P=0,w=[],B=async()=>{if(!b[P])return;let I=await this.connection.sendTransaction(b[P],{skipPreflight:g});w.push({txId:I,status:"sent",signedTx:b[P]}),d==null||d([...w]),P++;let A=!1,k=null,T=null,K=S=>{k!==null&&clearInterval(k),T!==null&&this.connection.removeSignatureListener(T);let x=w.findIndex(V=>V.txId===I);if(x>-1){if(w[x].status==="error"||w[x].status==="success")return;w[x].status=S.err?"error":"success"}d==null||d([...w]),S.err||B()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var S;if(A){clearInterval(k);return}try{let x=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:1});x&&(A=!0,clearInterval(k),K({err:((S=x.meta)==null?void 0:S.err)||null}),console.log("tx status from getTransaction:",I))}catch(x){A=!0,clearInterval(k),console.error("getTransaction timeout:",x,I)}},jn)),T=this.connection.onSignature(I,S=>{if(A){this.connection.removeSignatureListener(T);return}A=!0,K(S)},"confirmed"),this.connection.getSignatureStatus(I)};return B(),{txIds:[],signedTxs:b}}else{let P=[];for(let w=0;w<b.length;w+=1){let B=await this.connection.sendTransaction(b[w],{skipPreflight:g});P.push(B)}return{txIds:P,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let f=e||{},{splitIns:t=[],computeBudgetConfig:n}=f,o=at(f,["splitIns","computeBudgetConfig"]),i=n?Zn(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,g)=>E(_({},p),{[g.publicKey.toBase58()]:g}),{}),a=[],c=[],u=[],s=0;if(this.allInstructions.forEach(p=>{let g=[...u,p],y=n?[...i.instructions,...g]:g,P=[...new Set(g.map(w=>w.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(w=>new en(w));if(p!==t[s]&&u.length<12&&(Tn({instructions:y,payer:this.feePayer,signers:P})||Tn({instructions:g,payer:this.feePayer,signers:P})))u.push(p);else{if(u.length===0)throw Error("item ins too big");s+=p===t[s]?1:0,Tn({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:P})?a.push(new Bn().add(...i.instructions,...u)):a.push(new Bn().add(...u)),c.push(Array.from(new Set(u.map(w=>w.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat())).map(w=>r[w]).filter(w=>w!==void 0)),u=[p]}}),u.length>0){let g=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);Tn({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g.map(y=>y.publicKey)})?a.push(new Bn().add(...i.instructions,...u)):a.push(new Bn().add(...u)),c.push(g)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(g=>g.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var I;let{sequentially:g,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:P,skipPreflight:w=!0}=p||{},B=P!=null?P:await Jt(this.connection,this.blockhashCommitment);if(a.forEach(async(A,k)=>{A.recentBlockhash=B,c[k].length&&A.sign(...c[k])}),Wt(a),(I=this.owner)!=null&&I.isKeyPair){if(g){let A=0,k=[];for(let T of a){if(++A,A<=b){k.push("tx skipped");continue}let K=await Zo(this.connection,T,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:w});k.push(K)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:w}))),signedTxs:a}}if(this.signAllTransactions){let A=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...A];if(g){let T=0,K=[],S=async()=>{if(!k[T])return;T<b&&(K.push({txId:"",status:"success",signedTx:k[T]}),y==null||y([...K]),T++,S());let x=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:w});K.push({txId:x,status:"sent",signedTx:k[T]}),y==null||y([...K]),T++;let V=!1,F=null,N=null,q=W=>{F!==null&&clearInterval(F),N!==null&&this.connection.removeSignatureListener(N);let X=K.findIndex(G=>G.txId===x);if(X>-1){if(K[X].status==="error"||K[X].status==="success")return;K[X].status=W.err?"error":"success"}y==null||y([...K]),W.err||S()};this.loopMultiTxStatus&&(F=setInterval(async()=>{var W;if(V){clearInterval(F);return}try{let X=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:1});X&&(V=!0,clearInterval(F),q({err:((W=X.meta)==null?void 0:W.err)||null}),console.log("tx status from getTransaction:",x))}catch(X){V=!0,clearInterval(F),console.error("getTransaction timeout:",X,x)}},jn)),N=this.connection.onSignature(x,W=>{if(V){this.connection.removeSignatureListener(N);return}V=!0,q(W)},"confirmed"),this.connection.getSignatureStatus(x)};return await S(),{txIds:K.map(x=>x.txId),signedTxs:k}}else{let T=[];for(let K=0;K<k.length;K+=1){let S=await this.connection.sendRawTransaction(k[K].serialize(),{skipPreflight:w});T.push(S)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var I;let B=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=B,a=at(B,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),c=_(_({},this.cluster==="devnet"?await Ho(this.connection):await Yo(this.connection)),o),u=Array.from(new Set([...this.lookupTableAddress,...i])),s=[];for(let A of u)c[A]===void 0&&s.push(new en(A));let f=await Xo({connection:this.connection,address:s});for(let[A,k]of Object.entries(f))c[A]=k;let d=t?Zn(t):{instructions:[],instructionTypes:[]},p=await Jt(this.connection,this.blockhashCommitment),g=this.signers.reduce((A,k)=>E(_({},A),{[k.publicKey.toBase58()]:k}),{}),y=[],b=[],P=[],w=0;if(this.allInstructions.forEach(A=>{let k=[...P,A],T=t?[...d.instructions,...k]:k;if(A!==n[w]&&P.length<r&&(hn({instructions:T,payer:this.feePayer,lookupTableAddressAccount:c})||hn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:c})))P.push(A);else{if(P.length===0)throw Error("item ins too big");w+=A===n[w]?1:0;let K={};for(let S of[...new Set(u)])c[S]!==void 0&&(K[S]=c[S]);if(t&&hn({instructions:[...d.instructions,...P],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let S=new In({payerKey:this.feePayer,recentBlockhash:p,instructions:[...d.instructions,...P]}).compileToV0Message(Object.values(c));y.push(new xn(S))}else{let S=new In({payerKey:this.feePayer,recentBlockhash:p,instructions:[...P]}).compileToV0Message(Object.values(c));y.push(new xn(S))}b.push(Array.from(new Set(P.map(S=>S.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat())).map(S=>g[S]).filter(S=>S!==void 0)),P=[A]}}),P.length>0){let k=[...new Set(P.map(T=>T.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat()).values()].map(T=>g[T]).filter(T=>T!==void 0);if(t&&hn({instructions:[...d.instructions,...P],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let T=new In({payerKey:this.feePayer,recentBlockhash:p,instructions:[...d.instructions,...P]}).compileToV0Message(Object.values(c));y.push(new xn(T))}else{let T=new In({payerKey:this.feePayer,recentBlockhash:p,instructions:[...P]}).compileToV0Message(Object.values(c));y.push(new xn(T))}b.push(k)}return(I=this.owner)!=null&&I.signer&&b.forEach(A=>{A.some(k=>k.publicKey.equals(this.owner.publicKey))||A.push(this.owner.signer)}),y.forEach((A,k)=>{A.sign(b[k])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async A=>{var V;let{sequentially:k,onTxUpdate:T,skipTxCount:K=0,recentBlockHash:S,skipPreflight:x=!0}=A||{};if(y.map(async(F,N)=>{b[N].length&&F.sign(b[N]),S&&(F.message.recentBlockhash=S)}),Wt(y),(V=this.owner)!=null&&V.isKeyPair){if(k){let F=0,N=[];for(let q of y){if(++F,F<=K){console.log("skip tx: ",F),N.push("tx skipped");continue}let W=await this.connection.sendTransaction(q,{skipPreflight:x});await $n(this.connection,W),N.push(W)}return{txIds:N,signedTxs:y}}return{txIds:await Promise.all(y.map(async F=>await this.connection.sendTransaction(F,{skipPreflight:x}))),signedTxs:y}}if(this.signAllTransactions){let F=await this.signAllTransactions(y.slice(K,y.length)),N=[...y.slice(0,K),...F];if(k){let q=0,W=[],X=async()=>{if(!N[q])return;if(q<K){W.push({txId:"",status:"success",signedTx:N[q]}),T==null||T([...W]),q++,X();return}let G=await this.connection.sendTransaction(N[q],{skipPreflight:x});W.push({txId:G,status:"sent",signedTx:N[q]}),T==null||T([...W]),q++;let oe=!1,ye=null,pe=null,ke=me=>{ye!==null&&clearInterval(ye),pe!==null&&this.connection.removeSignatureListener(pe);let ee=W.findIndex(ve=>ve.txId===G);if(ee>-1){if(W[ee].status==="error"||W[ee].status==="success")return;W[ee].status=me.err?"error":"success"}T==null||T([...W]),me.err||X()};this.loopMultiTxStatus&&(ye=setInterval(async()=>{var me;if(oe){clearInterval(ye);return}try{let ee=await this.connection.getTransaction(G,{commitment:"confirmed",maxSupportedTransactionVersion:1});ee&&(oe=!0,clearInterval(ye),ke({err:((me=ee.meta)==null?void 0:me.err)||null}),console.log("tx status from getTransaction:",G))}catch(ee){oe=!0,clearInterval(ye),console.error("getTransaction timeout:",ee,G)}},jn)),pe=this.connection.onSignature(G,me=>{if(oe){this.connection.removeSignatureListener(pe);return}oe=!0,ke(me)},"confirmed"),this.connection.getSignatureStatus(G)};return X(),{txIds:[],signedTxs:N}}else{let q=[];for(let W=0;W<N.length;W+=1){let X=await this.connection.sendTransaction(N[W],{skipPreflight:x});q.push(X)}return{txIds:q,signedTxs:N}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};var $o=(...l)=>l.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),je=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=te(t)}createTxBuilder(e){return this.scope.checkOwner(),new Jn({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,loopMultiTxStatus:this.scope.loopMultiTxStatus,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug($o(e))}logInfo(...e){this.logger.info($o(e))}logAndCreateError(...e){let t=$o(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ks,SystemProgram as Ts}from"@solana/web3.js";import hs from"bn.js";import{createCloseAccountInstruction as Bs,createInitializeAccountInstruction as Is,createTransferInstruction as Mp,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";import{Keypair as gs,PublicKey as Ps}from"@solana/web3.js";import Ap from"bn.js";import{TOKEN_PROGRAM_ID as As}from"@solana/spl-token";function Ja(l){return l instanceof Uint8Array||l!=null&&typeof l=="object"&&l.constructor.name==="Uint8Array"}function jo(l,...e){if(!Ja(l))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(l.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${l.length}`)}function Jo(l,e=!0){if(l.destroyed)throw new Error("Hash instance has been destroyed");if(e&&l.finished)throw new Error("Hash#digest() has already been called")}function ir(l,e){jo(l);let t=e.outputLen;if(l.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var to=l=>new DataView(l.buffer,l.byteOffset,l.byteLength),bt=(l,e)=>l<<32-e|l>>>e;var dd=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function es(l){if(typeof l!="string")throw new Error(`utf8ToBytes expected string, got ${typeof l}`);return new Uint8Array(new TextEncoder().encode(l))}function ei(l){return typeof l=="string"&&(l=es(l)),jo(l),l}var eo=class{clone(){return this._cloneInto()}},pd={}.toString;function rr(l){let e=n=>l().update(ei(n)).digest(),t=l();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>l(),e}function ts(l,e,t,n){if(typeof l.setBigUint64=="function")return l.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;l.setUint32(e+c,r,n),l.setUint32(e+u,a,n)}var ar=(l,e,t)=>l&e^~l&t,sr=(l,e,t)=>l&e^l&t^e&t,no=class extends eo{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=to(this.buffer)}update(e){Jo(this);let{view:t,buffer:n,blockLen:o}=this;e=ei(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let c=to(e);for(;o<=i-r;r+=o)this.process(c,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Jo(this),ir(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let f=r;f<o;f++)t[f]=0;ts(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=to(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,s=this.get();if(u>s.length)throw new Error("_sha2: outputLen bigger than state");for(let f=0;f<u;f++)a.setUint32(4*f,s[f],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var ns=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Lt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Ot=new Uint32Array(64),ti=class extends no{constructor(){super(64,32,8,!1),this.A=Lt[0]|0,this.B=Lt[1]|0,this.C=Lt[2]|0,this.D=Lt[3]|0,this.E=Lt[4]|0,this.F=Lt[5]|0,this.G=Lt[6]|0,this.H=Lt[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:c}=this;return[e,t,n,o,i,r,a,c]}set(e,t,n,o,i,r,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=c|0}process(e,t){for(let f=0;f<16;f++,t+=4)Ot[f]=e.getUint32(t,!1);for(let f=16;f<64;f++){let d=Ot[f-15],p=Ot[f-2],g=bt(d,7)^bt(d,18)^d>>>3,y=bt(p,17)^bt(p,19)^p>>>10;Ot[f]=y+Ot[f-7]+g+Ot[f-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:c,G:u,H:s}=this;for(let f=0;f<64;f++){let d=bt(a,6)^bt(a,11)^bt(a,25),p=s+d+ar(a,c,u)+ns[f]+Ot[f]|0,y=(bt(n,2)^bt(n,13)^bt(n,22))+sr(n,o,i)|0;s=u,u=c,c=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,s=s+this.H|0,this.set(n,o,i,r,a,c,u,s)}roundClean(){Ot.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ur=rr(()=>new ti);import{PublicKey as fs}from"@solana/web3.js";import pr,{isBN as fr}from"bn.js";import{bits as os,BitStructure as Td,blob as is,Blob as hd,cstr as Bd,f32 as Id,f32be as xd,f64 as Sd,f64be as Kd,greedy as Cd,Layout as rs,ns64 as Rd,ns64be as Ld,nu64 as Od,nu64be as Nd,offset as as,s16 as Md,s16be as Fd,s24 as vd,s24be as _d,s32 as ss,s32be as Vd,s40 as Ed,s40be as Dd,s48 as Wd,s48be as qd,s8 as Ud,seq as us,struct as Gd,Structure as cs,u16 as ls,u16be as zd,u24 as Xd,u24be as Yd,u32 as ms,u32be as Hd,u40 as Qd,u40be as Zd,u48 as $d,u48be as jd,u8 as ds,UInt as ps,union as Jd,Union as ep,unionLayoutDiscriminator as tp,utf8 as np}from"@solana/buffer-layout";var oo=rs,cr=cs;var ni=ps;var lr=ds,Re=ls;var io=ms;var Ne=ss;var mr=us;var J=is;var oi=os,dr=as;var Ut=class extends oo{constructor(t,n,o){super(t,o);this.blob=J(t),this.signed=n}decode(t,n=0){let o=new pr(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new pr(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},ro=class extends oo{constructor(t){super(8,t);this._lower=oi(io(),!1),this._upper=oi(io(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return _(_({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function O(l){return new ni(1,l)}function he(l){return new ni(4,l)}function m(l){return new Ut(8,!1,l)}function z(l){return new Ut(16,!1,l)}function yr(l){return new Ut(1,!0,l)}function tn(l){return new Ut(8,!0,l)}function br(l){return new Ut(16,!0,l)}var Sn=class extends oo{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function h(l){return new Sn(J(32),e=>new fs(e),e=>e.toBuffer(),l)}function Be(l){return new Sn(lr(),ys,bs,l)}function ys(l){if(l===0)return!1;if(l===1)return!0;throw new Error("Invalid bool: "+l)}function bs(l){return l?1:0}function ri(l,e){let t=io("length"),n=L([t,D(l,dr(t,-t.span),"values")]);return new Sn(n,({values:o})=>o,o=>({values:o}),e)}var ii=class extends cr{decode(e,t){return super.decode(e,t)}};function L(l,e,t){return new ii(l,e,t)}function D(l,e,t){let n,o=typeof e=="number"?e:fr(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=fr(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,r)},set(i,r,a){return r==="count"&&(n=a),Reflect.set(i,r,a)}});return mr(l,o,t)}var nn=L([h("mint"),h("owner"),m("amount"),he("delegateOption"),h("delegate"),O("state"),he("isNativeOption"),m("isNative"),m("delegatedAmount"),he("closeAuthorityOption"),h("closeAuthority")]);function on({fromPublicKey:l,programId:e=As,assignSeed:t}){let n=t?btoa(t).slice(0,32):gs.generate().publicKey.toBase58().slice(0,32);return{publicKey:ws(l,n,e),seed:n}}function ws(l,e,t){let n=Buffer.concat([l.toBuffer(),Buffer.from(e),t.toBuffer()]),o=ur(n);return new Ps(o)}function gr(l){let{mint:e,tokenAccount:t,owner:n,programId:o=Kn}=l;return Is(t,e,n,o)}function rn(l){let{tokenAccount:e,destination:t,multiSigners:n=[],owner:o,programId:i=Kn}=l;return Bs(e,t,o,n,i)}async function ao(l){let{connection:e,amount:t,commitment:n,closeDestination:o,payer:i,owner:r,skipCloseAccount:a}=l,c=await e.getMinimumBalanceForRentExemption(nn.span,n),u=ge(t).add(new hs(c)),s=on({fromPublicKey:i,programId:Kn});return{addresses:{newAccount:s.publicKey},signers:[],instructions:[Ts.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:s.seed,newAccountPubkey:s.publicKey,lamports:u.toNumber(),space:nn.span,programId:Kn}),gr({mint:new ks(ft.address),tokenAccount:s.publicKey,owner:r,programId:Kn})],instructionTypes:[$.CreateAccount,$.InitAccount],endInstructionTypes:a?[]:[$.CloseAccount],endInstructions:a?[]:[rn({tokenAccount:s.publicKey,destination:o!=null?o:r,owner:r})]}}import{PublicKey as UA,SystemProgram as GA}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as XA}from"@solana/spl-token";import{PublicKey as xs}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ss}from"@solana/spl-token";function ce(l,e,t){return ie([l.toBuffer(),(t!=null?t:Ss).toBuffer(),e.toBuffer()],new xs("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as Y}from"@solana/web3.js";var Pr=new Y("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Ar=new Y("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),wr=new Y("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ai=new Y("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),mf=new Y("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Ks=new Y("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),si=new Y("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ui=new Y("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),df=new Y("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),kr=new Y("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ci=new Y("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Cs=new Y("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Rs=new Y("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),so=new Y("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),pf=new Y("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Ls=new Y("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),uo=new Y("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Os=new Y("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ff=new Y("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Ns=new Y("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ms=new Y("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Fs=new Y("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),yf=new Y("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),bf=new Y("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),gf=new Y("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Pf=new Y("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Af=new Y("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX");var Nt={OPEN_BOOK_PROGRAM:new Y("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new Y("Ray1111111111111111111111111111111111111111"),AMM_V4:new Y("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new Y("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new Y("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new Y("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new Y("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new Y("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new Y("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new Y("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new Y("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new Y("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:Y.default,Router:new Y("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new Y("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new Y("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new Y("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new Y("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new Y("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new Y("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new Y("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new Y("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new Y("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new Y("Ray1111111111111111111111111111111111111111")};import nw from"decimal.js";import{createAssociatedTokenAccountIdempotentInstruction as xg,TOKEN_2022_PROGRAM_ID as Sg,TOKEN_PROGRAM_ID as Kg}from"@solana/spl-token";import{PublicKey as Rg}from"@solana/web3.js";import Og from"bn.js";import Mg from"decimal.js";import{TOKEN_PROGRAM_ID as Nf}from"@solana/spl-token";import{PublicKey as _f}from"@solana/web3.js";var vs=L([he("mintAuthorityOption"),h("mintAuthority"),m("supply"),O("decimals"),O("isInitialized"),he("freezeAuthorityOption"),h("freezeAuthority")]);var co=l=>new Ce({mint:l.address,decimals:l.decimals,symbol:l.symbol,name:l.name}),Me=o=>{var i=o,{amount:l,isRaw:e,name:t}=i,n=at(i,["amount","isRaw","name"]);return new fe(new Ce({mint:it(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),l,e,t)};var At=o=>{var i=o,{address:l,programId:e,decimals:t}=i,n=at(i,["address","programId","decimals"]);return _({chainId:101,address:it(l).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)};import{ASSOCIATED_TOKEN_PROGRAM_ID as wi,TOKEN_2022_PROGRAM_ID as Oe,TOKEN_PROGRAM_ID as de}from"@solana/spl-token";import{Keypair as bo,PublicKey as v,SystemProgram as kt,TransactionInstruction as Ke}from"@solana/web3.js";import go from"bn.js";import re from"bn.js";var le=new re(1).shln(64),an=64,_s=new re(1).shln(128),wt=new re(1).shln(64).subn(1),Vs=new re(1).shln(128).subn(1),ct=-443636,lt=443636,Ye=new re("4295048016"),He=new re("79226673521066979257578248091"),Tr=new re("59543866431248"),hr=new re("184467440737095516"),Br=new re("15793534762490258745"),Ir=16,lo=512,Je=60,Qf=new re("18446743708227953217"),xr=[{bit:0,factor:new re("fffcb933bd6fb800",16)},{bit:1,factor:new re("fff97272373d4000",16)},{bit:2,factor:new re("fff2e50f5f657000",16)},{bit:3,factor:new re("ffe5caca7e10f000",16)},{bit:4,factor:new re("ffcb9843d60f7000",16)},{bit:5,factor:new re("ff973b41fa98e800",16)},{bit:6,factor:new re("ff2ea16466c9b000",16)},{bit:7,factor:new re("fe5dee046a9a3800",16)},{bit:8,factor:new re("fcbe86c7900bb000",16)},{bit:9,factor:new re("f987a7253ac65800",16)},{bit:10,factor:new re("f3392b0822bb6000",16)},{bit:11,factor:new re("e7159475a2caf000",16)},{bit:12,factor:new re("d097f3bdfd2f2000",16)},{bit:13,factor:new re("a9f746462d9f8000",16)},{bit:14,factor:new re("70d869a156f31c00",16)},{bit:15,factor:new re("31be135f97ed3200",16)},{bit:16,factor:new re("9aa508b5b85a500",16)},{bit:17,factor:new re("5d6af8dedc582c",16)},{bit:18,factor:new re("2216e584f5fa",16)}],xt=1e6;var mo=1e5,Cn=1e4,Sr=1e4,Kr=1e5;var Rn=3,Cr=100;var Rr=10,Lr=100,sn=14;var U=new re(0),De=new re(1),Zf=new re(-1);var $f=new re("18446744073700000000");var Es=L([J(8),O("bump"),Re("index"),h("owner"),he("protocolFeeRate"),he("tradeFeeRate"),Re("tickSpacing"),he("fundFeeRate"),D(he(),1),h("fundOwner"),D(m(),3)]),Ds=L([he("blockTimestamp"),tn("tickCumulative"),D(m(),4)]),Or=L([J(8),Be("initialized"),m("recentEpoch"),Re("observationIndex"),h("poolId"),D(Ds,Cr,"observations"),D(m(),4)]),Ws=L([Re("filterPeriod"),Re("decayPeriod"),Re("reductionFactor"),he("dynamicFeeControl"),he("maxVolatilityAccumulator"),Ne("tickSpacingIndexReference"),he("volatilityReference"),he("volatilityAccumulator"),m("lastUpdateTimestamp"),D(O(),46)]),qs=L([O("state"),m("openTime"),m("endTime"),m("lastUpdateTime"),z("emissionsPerSecondX64"),m("totalEmissioned"),m("claimed"),h("mint"),h("vault"),h("creator"),z("growthGlobalX64")]),un=L([J(8),O("bump"),h("configId"),h("creator"),h("mintA"),h("mintB"),h("vaultA"),h("vaultB"),h("observationId"),O("mintDecimalsA"),O("mintDecimalsB"),Re("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),Ne("tickCurrent"),he(),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),m("protocolFeesTokenA"),m("protocolFeesTokenB"),D(z(),4),O("status"),O("feeOn"),J(6),D(qs,Rn,"rewardInfos"),J(8*16,"tickArrayBitmap"),D(m(),4),m("fundFeesTokenA"),m("fundFeesTokenB"),m("startTime"),m("recentEpoch"),Ws.replicate("dynamicFeeInfo"),D(m(),46)]),Us=L([z("growthInsideLastX64"),m("rewardAmountOwed")]),Gs=L([J(8),O("bump"),h("nftMint"),h("poolId"),Ne("tickLower"),Ne("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),m("tokenFeesOwedA"),m("tokenFeesOwedB"),D(Us,Rn,"rewardInfos"),m("recentEpoch"),D(m(),7)]),ty=L([J(8),O("bump"),h("poolId"),Ne("tickLower"),Ne("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),m("tokenFeesOwedA"),m("tokenFeesOwedB"),D(z(),Rn,"rewardGrowthInside"),m("recentEpoch"),D(m(),7)]),zs=L([Ne("tick"),br("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),D(z(),Rn,"rewardGrowthsOutsideX64"),m("orderPhase"),m("ordersAmount"),m("partFilledOrdersRemaining"),z("unfilledRatioX64"),D(he(),3)]),Ln=L([J(8),h("poolId"),Ne("startTickIndex"),D(zs,Je,"ticks"),O("initializedTickCount"),m("recentEpoch"),D(O(),107)]),Xs=L([J(8),O("bump"),D(h(),Rr,"operationOwners"),D(h(),Lr,"whitelistMints")]),Ys=L([J(8),h("poolId"),h("owner"),Ne("tick"),Be("zeroForOne"),m("orderPhase"),m("totalAmount"),m("filledAmount"),m("settleBase"),m("settleOutput"),m("openTime"),z("unfilledRatioX64"),D(m(),4)]),li=L([J(8),h("poolId"),J(8*8*sn,"positiveTickArrayBitmap"),J(8*8*sn,"negativeTickArrayBitmap")]),ny=L([J(8),Re("index"),Re("filterPeriod"),Re("decayPeriod"),Re("reductionFactor"),he("dynamicFeeControl"),he("maxVolatilityAccumulator"),D(m(),8)]),Hs=L([J(8),h("wallet"),O("nonceIndex"),m("orderNonce"),D(m(),4)]),oy=L([m(),O("bump"),h("owner"),h("poolId"),h("positionId"),h("nftAccount"),D(m(),8)]),Qs=L([J(8),O("bump"),h("lockOwner"),h("poolId"),h("positionId"),h("nftAccount"),h("lockNftMint"),m("recentEpoch"),D(m(),8)]);import ay from"bn.js";function mi(l){let e=Buffer.alloc(2);return e.writeUInt16LE(l),e}function di(l){let e=Buffer.alloc(4);return e.writeInt32LE(l),e}function Nr(l){let e=Buffer.alloc(4);return e.writeInt32BE(l),e}var yy=Buffer.from("amm_config","utf8"),pi=Buffer.from("pool","utf8"),Mr=Buffer.from("pool_vault","utf8"),Zs=Buffer.from("pool_reward_vault","utf8"),Fr=Buffer.from("position","utf8"),$s=Buffer.from("tick_array","utf8"),js=Buffer.from("operation","utf8"),Js=Buffer.from("pool_tick_array_bitmap_extension","utf8"),eu=Buffer.from("observation","utf8"),by=Buffer.from("support_mint","utf8"),gy=Buffer.from("dynamic_fee_config","utf8"),tu=Buffer.from("permission","utf8");function vr(l,e,t,n){return ie([pi,e.toBuffer(),t.toBuffer(),n.toBuffer()],l)}function _r(l,e){return ie([tu,e.toBuffer()],l)}function Vr(l,e,t,n,o){return ie([pi,e.toBuffer(),t.toBuffer(),n.toBuffer(),mi(o)],l)}function cn(l,e,t){return ie([Mr,e.toBuffer(),t.toBuffer()],l)}function Er(l,e,t){return ie([Zs,e.toBuffer(),t.toBuffer()],l)}function Ie(l,e,t){return ie([$s,e.toBuffer(),Nr(t)],l)}function St(l,e,t,n){return ie([Fr,e.toBuffer(),di(t),di(n)],l)}function mt(l,e){return ie([Fr,e.toBuffer()],l)}function Gt(l){return ie([Buffer.from("metadata","utf8"),Rt.toBuffer(),l.toBuffer()],Rt)}function po(l){return ie([js],l)}function xe(l,e){return ie([Js,e.toBuffer()],l)}function fi(l,e){return ie([eu,e.toBuffer()],l)}var Dr=Buffer.from("locked_position","utf8");function yi(l,e){return ie([Dr,e.toBuffer()],l)}function bi(l,e){return ie([Dr,e.toBuffer()],l)}import{sha256 as ou}from"js-sha256";import Wr from"bn.js";import gi from"decimal.js";function Se(l,e,t){if(t.isZero())throw new Error("Division by zero");return l.mul(e).div(t)}function we(l,e,t){if(t.isZero())throw new Error("Division by zero");let n=l.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function fo(l,e){return l.div(e).add(l.mod(e).isZero()?U:De)}var Ty=new Wr(1).shln(256).subn(1);function qr(l){return l.isZero()?-1:l.bitLength()-1}function Ur(l,e){return new gi(l.toString()).div(gi.pow(2,64)).toDecimalPlaces(e)}function Pi(l){return new Wr(l.mul(gi.pow(2,64)).floor().toFixed())}import Fy from"bn.js";import _e from"bn.js";import ln from"decimal.js";var Mt=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let i=[],r=e.length*8,a=0,c=r-1;if(o){let f=o.tick/(t*Je)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(f)):c=Math.min(r-1,Math.floor(f))}if(a>c)return i;let u=Math.floor(a/8),s=Math.floor(c/8);for(let f=u;f<=s;f++){if(!e[f])continue;let d=f===u?a%8:0,p=f===s?c%8:7;for(let g=d;g<=p;g++)e[f]&1<<g&&i.push((f*8+g+n)*t*Je)}return i}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Je/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-lo,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/Je/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:lo,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let i=[];if(o){let c=Math.floor(o.tick/Je/t);if(o.valueType==="gte"&&c>=-512)return i}let r=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(Je*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(Je*t))+7680:0;e:for(let c=0;c<sn;c++){let u=sn-1-c;for(let s=0;s<512;s++){let f=c*512+s;if(f>r)break e;if(f<a)continue;let d=u*64+Math.floor(s/8);if(!e[d]){s=Math.floor(s/8)*8+7;continue}if(e[d]&1<<s%8){let p=(c*512+s-7680)*Je*t;if(i.push(p),n!==void 0&&i.length>=n)break e}}}return i}static findTickArrayStartIndex({tickSpacing:e,poolBitmap:t,tickArrayBitmap:n,findInfo:o}){if(o.type==="all")return[...this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap}),...this.findPoolBitmap({tickSpacing:e,bitmap:t}),...this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap})];let i=ae.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:r}=o;if(o.type==="oneForZero"){let a={tick:i,valueType:"gte"},c=[()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}),()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a})];return this.collectUntil(c,r)}if(o.type==="zeroForOne"){let a={tick:i,valueType:"lte"},c=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((u,s)=>s-u),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((u,s)=>s-u),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((u,s)=>s-u)];return this.collectUntil(c,r)}throw new Error("find info type check error")}static collectUntil(e,t){let n=[];for(let o of e){if(t!==void 0&&n.length>=t)break;n.push(...o())}return n.slice(0,t)}static findTickArrayAddress(e){return this.findTickArrayStartIndex(e).map(t=>Ie(e.programId,e.poolId,t).publicKey)}static maxTickInTickarrayBitmap(e){return e*Je*lo}},ae=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(Q.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(Q.isInitialized({data:e.ticks[n]}))return e.ticks[n]}static nextInitalizedTick({data:e,currentTickIndex:t,tickSpacing:n,zeroForOne:o}){if(this.getTickArrayStartIndex(t,n)!==e.startTickIndex)return;let r=Math.floor((t-e.startTickIndex)/n);if(o){for(let a=r;a>=0;a--)if(Q.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=r+1;a<Je;a++)if(Q.isInitialized({data:e.ticks[a]}))return e.ticks[a]}static getTickArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=this.getTickArrayStartIndex(e,t);return Math.floor((e-n)/t)}static tickCount(e){return Je*e}static getMinTick(e){return Math.ceil(ct/e)*e}static getMaxTick(e){return Math.floor(lt/e)*e}},Q=class{static isInitialized({data:e}){return this.hasLiquidity({data:e})||this.hasLimitOrders({data:e})}static hasLimitOrders({data:e}){return!e.ordersAmount.isZero()||!e.partFilledOrdersRemaining.isZero()}static hasLiquidity({data:e}){return!e.liquidityGross.isZero()}static isValidTick(e){return e>=ct&&e<=lt}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${ct}, ${lt}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=le.clone();for(let{bit:o,factor:i}of xr)(t&1<<o)!==0&&(n=Se(n,i,le));return e>0&&(n=Se(le,le,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=Q.getPriceAtTick(t,!1);return Se(e,o,le)}else{let o=Q.getPriceAtTick(t,!0);return Se(e,le,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=Q.getPriceAtTick(t,!0);return we(e,o,le)}else{let o=Q.getPriceAtTick(t,!1);return we(e,le,o)}}static limitOrderUnfilledAmount({tick:e}){return e.ordersAmount.add(e.partFilledOrdersRemaining)}static matchLimitOrder({tick:e,swapAmount:t,swapDirectionZeroForOne:n,isBaseInput:o,feeRate:i,isFeeOnInput:r}){let a={amountIn:U,amountOut:U,ammFeeAmount:U},c=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||c.isZero())return a;if(o)r?(a.ammFeeAmount=we(t,new _e(i),We),a.amountIn=t.sub(a.ammFeeAmount)):a.amountIn=t,a.amountOut=this.getLimitOrderOutput({amountIn:a.amountIn,tick:e.tick,zeroForOne:n}),a.amountOut.gt(c)&&(a.amountOut=c,a.amountIn=this.getLimitOrderInput({amountOut:c,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=we(a.amountIn,new _e(i),We.sub(new _e(i)))));else{let f=_e.min(t,c);r?a.amountOut=f:a.amountOut=_e.min(we(f,We,We.sub(new _e(i))),c),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=we(a.amountIn,new _e(i),We.sub(new _e(i))))}let u=U;e.partFilledOrdersRemaining.gt(U)&&(u=_e.min(e.partFilledOrdersRemaining,a.amountOut),u.gt(U)&&(e.unfilledRatioX64=Se(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(u),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(u));let s=a.amountOut.sub(u);if(s.gt(U)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(s))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add(De),e.unfilledRatioX64=Se(le,e.ordersAmount.sub(s),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(s),e.ordersAmount=U}return r||(a.ammFeeAmount=we(a.amountOut,new _e(i),We),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(le.subn(1)).div(le):n.mul(n).div(le)}static getTickAtSqrtPrice(e){if(!(e.gte(Ye)&&e.lte(He)))throw Error("SqrtPriceX64");let t=qr(e),n=t-64,o;n>=0?o=new _e(n).shln(32):o=new _e(-n).shln(32).neg();let i;t>=64?i=e.shrn(t-63):i=e.shln(63-t);let r=new _e(0),a=new _e(1).shln(63);for(let b=0;b<Ir&&!a.isZero();b++){i=i.mul(i);let P=i.shrn(127).toNumber();i=i.shrn(63+P),P&&(r=r.add(a)),a=a.shrn(1)}let c=r.shrn(32),s=o.add(c).mul(Tr),f=s.sub(hr),d=s.add(Br),p=this.signedShrn64(f),g=this.signedShrn64(d);return p===g?p:Q.getSqrtPriceAtTick(g).lte(e)?g:p}static signedShrn64(e){if(e.isNeg()){let t=new _e(1).shln(64),n=e.div(t);return!e.mod(t).isZero()&&e.isNeg()?n.subn(1).toNumber():n.toNumber()}else return e.shrn(64).toNumber()}static sqrtPriceX64ToPrice(e,t,n){let o=e.mul(e),i=t-n,r=20,a=new _e(10).pow(new _e(r)),c=o.mul(a),u=new _e(1).shln(128),f=c.div(u).toString();for(;f.length<=r;)f="0"+f;let d=f.slice(0,-r),p=f.slice(-r),g=d+"."+p;return new ln(g).mul(new ln(10).pow(i))}static tickToPrice(e,t,n){let o=Q.getSqrtPriceAtTick(e);return this.sqrtPriceX64ToPrice(o,t,n)}static priceToTick(e,t,n){let i=e.div(Math.pow(10,t-n)).log().div(new ln(1.0001).log()).floor();return Math.max(ct,Math.min(lt,i.toNumber()))}static priceToSqrtPriceX64(e,t,n){let r=e.div(Math.pow(10,t-n)).sqrt().mul(new ln(2).pow(64));return new _e(r.toFixed(0))}static toTickIndex(e,t){return e>=0?e-e%t:e-e%t-(e%t!==0?t:0)}static getPriceAndTick({price:e,mintADecimals:t,mintBDecimals:n,zeroForOne:o,tickSpacing:i}){let r=e.clamp(1/10**Math.max(t,n),Number.MAX_SAFE_INTEGER);o||(r=new ln(1).div(r));let a=Q.toTickIndex(Q.priceToTick(r,t,n),i),c=Q.tickToPrice(a,t,n);return{price:o?c:new ln(1).div(c),tick:a}}};import yo from"bn.js";import Gr from"decimal.js";var Le=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.shln(an),r=t.sub(e);if(!e.gt(U))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?fo(we(i,r,t),e):Se(i,r,t).div(e);if(a.gt(wt))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=o?we(n,t.sub(e),le):Se(n,t.sub(e),le);if(i.gt(wt))throw Error("MaxTokenOverflow");return i}static addDelta(e,t){if(t.isNeg()){let n=t.neg();if(e.lt(n))throw new Error("Liquidity underflow");return e.sub(n)}else return e.add(t)}static getLiquidityFromAmountA(e,t,n){if(n.isZero())return U;e.gt(t)&&([e,t]=[t,e]);let o=Se(e,t,le),i=t.sub(e);return Se(n,o,i)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return U;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return Se(n,le,o)}static getLiquidityFromAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return this.getLiquidityFromAmountA(t,n,o);if(e.lt(n)){let r=this.getLiquidityFromAmountA(e,n,o),a=this.getLiquidityFromAmountB(t,e,i);return r.lt(a)?r:a}else return this.getLiquidityFromAmountB(t,n,i)}static getAmountsForLiquidity(e,t,n,o,i){t.gt(n)&&([t,n]=[n,t]);let r=U,a=U;return e.lte(t)?r=this.getDeltaAmountAUnsigned(t,n,o,i):e.lt(n)?(r=this.getDeltaAmountAUnsigned(e,n,o,i),a=this.getDeltaAmountBUnsigned(t,e,o,i)):a=this.getDeltaAmountBUnsigned(t,n,o,i),{amountA:r,amountB:a}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=this.getAmountsForLiquidity(e,t,n,o,r),s=i?1+a:1-a,f=new yo(new Gr(c.toString()).mul(s).toFixed(0)),d=new yo(new Gr(u.toString()).mul(s).toFixed(0));return{amountSlippageA:f,amountSlippageB:d}}static getLiquidityAndAmountsFromAmount({sqrtPriceCurrentX64:e,sqrtPriceLowerX64:t,sqrtPriceUpperX64:n,amountInfo:o}){let i;if(o.type==="liquidity")i=o.amount;else if(o.type==="amountA")i=e.gte(n)?U:this.getLiquidityFromAmountA(yo.max(e,t),n,o.amount);else if(o.type==="amountB")i=e.lte(t)?U:this.getLiquidityFromAmountB(t,yo.min(e,n),o.amount);else throw Error("amount info type check error");return _({liquidity:i},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};import{PublicKey as tt}from"@solana/web3.js";import qe from"bn.js";import{TOKEN_2022_PROGRAM_ID as zr,TOKEN_PROGRAM_ID as kb}from"@solana/spl-token";import ne from"decimal.js";import dn from"bn.js";import Fe from"bn.js";var On=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let i=t.shln(an);if(o){let r=n.mul(e),a=i.add(r);if(a.gte(i))return we(i,e,a);let c=Se(i,De,e);return we(i,De,c.add(n))}else{let r=n.mul(e);if(i.lte(r))throw new Error("Insufficient liquidity for token0 removal");let a=i.sub(r);return we(i,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let i=n.shln(an).div(t);return e.add(i)}else{let i=fo(n.shln(an),t);return e.sub(i)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(U))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(U))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceFromOutput(e,t,n,o){if(!e.gt(U))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(U))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var gt=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:i}){let r={amountSpecifiedRemaining:t,amountCalculated:U,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:U,protocolFee:U,fundFee:U,liquidity:e.liquidity,sqrtPriceNextX64:U,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:mn.getDynamicFeeInfo({poolInfo:e})};return r.dynamicFeeInfo&&(r.tickSpacingIndex=Mn.tickSpacingIndexFromTick(r.tick,r.tickSpacing),mn.updateReference({dynamicFeeInfo:r.dynamicFeeInfo,tickSpacingIndex:r.tickSpacingIndex,currentTimestamp:i})),r}static getTargetPriceBasedOnNextTick({data:e,tickNext:t,zeroForOne:n,sqrtPriceLimitX64:o}){e.tickNext=t,e.tickNext<ct?e.tickNext=ct:e.tickNext>lt&&(e.tickNext=lt),e.sqrtPriceNextX64=Q.getSqrtPriceAtTick(e.tickNext);let i;if(n&&e.sqrtPriceNextX64.lt(o)||!n&&e.sqrtPriceNextX64.gt(o)?i=o:i=e.sqrtPriceNextX64,n){if(e.tick<e.tickNext)throw Error("data.tick < data.tickNext");if(e.sqrtPriceX64.lt(e.sqrtPriceNextX64))throw Error("data.sqrtPriceX64.lt(data.sqrtPriceNextX64)");if(e.sqrtPriceX64.lt(i))throw Error("data.sqrtPriceX64.lt(targetPrice)")}else{if(e.tickNext<=e.tick)throw Error("data.tickNext <= data.tick");if(e.sqrtPriceNextX64.lt(e.sqrtPriceX64))throw Error("data.sqrtPriceNextX64.lt(data.sqrtPriceX64)");if(i.lt(e.sqrtPriceX64))throw Error("targetPrice.lt(data.sqrtPriceX64)")}return i}static updateVolatilityAccumulator({state:e}){!e.dynamicFeeInfo||mn.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,i=Kr*Cn*Cn,r=we(new Fe(e.dynamicFeeControl),new Fe(o),new Fe(i)).toNumber();return r>mo?mo:r}static getTotalFeeRate({data:e}){if(e.dynamicFeeInfo){let t=this.computeDynamicFeeRate({data:e.dynamicFeeInfo,tickSpacing:e.tickSpacing}),n=e.baseFeeRate+t;return Math.min(mo,n)}return e.baseFeeRate}static getSpacingBoundedPrice({data:e,targetPrice:t,zeroForOne:n}){if(e.dynamicFeeInfo===void 0)return{isSkipped:!0,boundedPrice:t};if(e.liquidity.isZero()||e.dynamicFeeInfo.volatilityAccumulator===e.dynamicFeeInfo.maxVolatilityAccumulator)return{isSkipped:!0,boundedPrice:t};let o=e.tickSpacing,i=n?e.tickSpacingIndex*o:(e.tickSpacingIndex+1)*o,r=Math.max(ct,Math.min(lt,i)),a=Q.getSqrtPriceAtTick(r);return n?{isSkipped:!1,boundedPrice:Fe.max(t,a)}:{isSkipped:!1,boundedPrice:Fe.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:i,isFeeOnInput:r,protocolFeeRate:a,fundFeeRate:c}){let u=r?t.add(o):t;i?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(u),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(u)),this.splitFee({state:e,feeAmount:o,protocolFeeRate:a,fundFeeRate:c})}static updateDynamicFeeIndex({state:e,zeroForOne:t,isSkippedTickSpacing:n}){if(e.dynamicFeeInfo!==void 0){if(n){let o=e.sqrtPriceX64.eq(e.sqrtPriceNextX64)?e.tickNext:e.tick,i=Mn.tickSpacingIndexFromTick(o,e.tickSpacing);!t&&o%e.tickSpacing===0&&(i=i-1),e.tickSpacingIndex=i,e.dynamicFeeInfo.volatilityAccumulator!==e.dynamicFeeInfo.maxVolatilityAccumulator&&this.updateVolatilityAccumulator({state:e})}e.tickSpacingIndex+=t?-1:1}}static splitFee({state:e,feeAmount:t,protocolFeeRate:n,fundFeeRate:o}){let i=t;if(n.gt(U)){let r=t.mul(n).div(new Fe(We));e.protocolFee=e.protocolFee.add(r),i=i.sub(r)}if(o.gt(U)){let r=t.mul(o).div(new Fe(We));e.fundFee=e.fundFee.add(r),i=i.sub(r)}if(e.liquidity.gt(U)){let r=Se(i,le,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(r),e.lpFee=e.lpFee.add(i)}}},Nn=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:U,amountIn:U,amountOut:U,feeAmount:U}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:i}){if(i)try{return o?Le.getDeltaAmountAUnsigned(t,e,n,!0):Le.getDeltaAmountBUnsigned(e,t,n,!0)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}else try{return o?Le.getDeltaAmountBUnsigned(t,e,n,!1):Le.getDeltaAmountAUnsigned(e,t,n,!1)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}}static computeSwap(e,t,n,o,i,r,a,c){let u=this.newSwapComputationResult({});if(r){let f=c?Se(o,new Fe(xt-i),new Fe(xt)):o,d=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});d!==null&&(u.amountIn=d),u.sqrtPriceNextX64=d!==null&&f.gte(u.amountIn)?t:On.getNextSqrtPriceFromInput(e,n,f,a)}else{let f=c?o:we(o,new Fe(xt),new Fe(xt-i)),d=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});d!==null&&(u.amountOut=d),u.sqrtPriceNextX64=d!==null&&f.gte(u.amountOut)?t:On.getNextSqrtPriceFromOutput(e,n,f,a)}if(a){if(!u.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(u.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let s=t.eq(u.sqrtPriceNextX64);if(a?(s&&r||(u.amountIn=Le.getDeltaAmountAUnsigned(u.sqrtPriceNextX64,e,n,!0)),s&&!r||(u.amountOut=Le.getDeltaAmountBUnsigned(u.sqrtPriceNextX64,e,n,!1))):(s&&r||(u.amountIn=Le.getDeltaAmountBUnsigned(e,u.sqrtPriceNextX64,n,!0)),s&&!r||(u.amountOut=Le.getDeltaAmountAUnsigned(e,u.sqrtPriceNextX64,n,!1))),r)c?u.sqrtPriceNextX64.eq(t)?u.feeAmount=we(u.amountIn,new Fe(i),new Fe(xt-i)):u.feeAmount=o.sub(u.amountIn):(u.feeAmount=we(u.amountOut,new Fe(i),new Fe(xt)),u.amountOut=u.amountOut.sub(u.feeAmount),s||(u.amountIn=o));else if(c)u.amountOut=Fe.min(u.amountOut,o),u.feeAmount=we(u.amountIn,new Fe(i),new Fe(xt-i));else{u.feeAmount=we(u.amountOut,new Fe(i),new Fe(xt));let f=u.amountOut.sub(u.feeAmount);f.gt(o)?(u.feeAmount=u.amountOut.sub(o),u.amountOut=o):u.amountOut=f}return u}};function Ai({programId:l,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:i,amountSpecified:r,sqrtPriceLimitX64:a,zeroForOne:c,isBaseInput:u,blockTimestamp:s,includeExtraTickArrays:f}){a.isZero()&&(a=c?new dn(Ye).addn(1):new dn(He).subn(1));let d=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:r,amountCalculated:U,feeAmount:U,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let p=f?Mt.findTickArrayAddress({programId:l,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:i,findInfo:{type:c?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(k=>k.toString()!==n[0].address.toString()):[],g=ae.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:y,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[d].value.startTickIndex===g,firstValidTickArrayStartIndex:n[d].value.startTickIndex},P=y,w=b,B=n[d],I=et.isFeeOnInput(t.feeOn,c),A=gt.newValue({poolInfo:t,amountSpecified:r,zeroForOne:c,feeRate:o.tradeFeeRate,blockTimestamp:s});for(;!A.amountSpecifiedRemaining.isZero()&&!A.sqrtPriceX64.eq(a);){let k=(()=>{let S=ae.nextInitalizedTick({data:B.value,tickSpacing:A.tickSpacing,zeroForOne:c,currentTickIndex:A.tick});if(S!==void 0)return S;if(P){let x=n[++d];return x===void 0?void 0:(w=x.value.startTickIndex,B=x,ae.firstinitializedTick({data:x.value,zeroForOne:c}))}else return P=!0,ae.firstinitializedTick({data:B.value,zeroForOne:c})})();if(k===void 0)return{allTrade:!1,amountSpecifiedRemaining:A.amountSpecifiedRemaining,amountCalculated:A.amountCalculated,feeAmount:A.lpFee.add(A.fundFee).add(A.protocolFee),sqrtPriceX64:A.sqrtPriceX64,liquidity:A.liquidity,tickCurrent:A.tick,accounts:n.slice(0,d).map(S=>S.address)};let T=gt.getTargetPriceBasedOnNextTick({data:A,tickNext:k.tick,zeroForOne:c,sqrtPriceLimitX64:a}),K=A.liquidity;do{gt.updateVolatilityAccumulator({state:A});let S=gt.getTotalFeeRate({data:A}),{isSkipped:x,boundedPrice:V}=gt.getSpacingBoundedPrice({data:A,targetPrice:T,zeroForOne:c}),F=!A.sqrtPriceX64.eq(V),N;F?(N=Nn.computeSwap(A.sqrtPriceX64,V,A.liquidity,A.amountSpecifiedRemaining,S,u,c,I),gt.applySwapAmounts({state:A,amountIn:N.amountIn,amountOut:N.amountOut,feeAmount:N.feeAmount,isBaseInput:u,isFeeOnInput:I,protocolFeeRate:new dn(o.protocolFeeRate),fundFeeRate:new dn(o.fundFeeRate)})):N=Nn.newSwapComputationResult({sqrtPriceNextX64:V});let q=Q.limitOrderUnfilledAmount({tick:k});if(A.sqrtPriceNextX64.eq(N.sqrtPriceNextX64)){let W=Q.matchLimitOrder({tick:k,swapAmount:A.amountSpecifiedRemaining,swapDirectionZeroForOne:c,isBaseInput:u,feeRate:S,isFeeOnInput:I});if(W.amountIn.gt(U)&>.applySwapAmounts({state:A,amountIn:W.amountIn,amountOut:W.amountOut,feeAmount:W.ammFeeAmount,isBaseInput:u,isFeeOnInput:I,protocolFeeRate:new dn(o.protocolFeeRate),fundFeeRate:new dn(o.fundFeeRate)}),Q.hasLiquidity({data:k})&&!Q.hasLimitOrders({data:k})){let X=c?k.liquidityNet.neg():k.liquidityNet;K=Le.addDelta(A.liquidity,X)}A.tick=c&&!Q.hasLimitOrders({data:k})||!c&&Q.hasLimitOrders({data:k})?A.tickNext-1:A.tickNext}else A.sqrtPriceX64.eq(N.sqrtPriceNextX64)||(A.tick=Q.getTickAtSqrtPrice(N.sqrtPriceNextX64));if(A.sqrtPriceX64=N.sqrtPriceNextX64,gt.updateDynamicFeeIndex({state:A,zeroForOne:c,isSkippedTickSpacing:x}),A.amountSpecifiedRemaining.isZero()||A.sqrtPriceX64.eq(T)){let W=Q.limitOrderUnfilledAmount({tick:k});if(!A.amountSpecifiedRemaining.isZero()&&!W.eq(q)&&!W.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);A.liquidity=K}return{allTrade:!0,amountSpecifiedRemaining:U,amountCalculated:A.amountCalculated,feeAmount:A.lpFee.add(A.fundFee).add(A.protocolFee),sqrtPriceX64:A.sqrtPriceX64,liquidity:A.liquidity,tickCurrent:A.tick,accounts:[...p,...n.slice(0,d+1+(f?1:0)).map(k=>k.address)]}}var Mn=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},mn=class{static getDynamicFeeInfo({poolInfo:e}){if(!(e.dynamicFeeInfo.filterPeriod===0&&e.dynamicFeeInfo.decayPeriod===0&&e.dynamicFeeInfo.reductionFactor===0&&e.dynamicFeeInfo.dynamicFeeControl===0&&e.dynamicFeeInfo.maxVolatilityAccumulator===0&&e.dynamicFeeInfo.tickSpacingIndexReference===0&&e.dynamicFeeInfo.volatilityReference===0&&e.dynamicFeeInfo.volatilityAccumulator===0&&e.dynamicFeeInfo.lastUpdateTimestamp.isZero()))return e.dynamicFeeInfo}static updateReference({dynamicFeeInfo:e,tickSpacingIndex:t,currentTimestamp:n}){let o=n-e.lastUpdateTimestamp.toNumber();o<e.filterPeriod||(o<e.decayPeriod?(e.tickSpacingIndexReference=t,e.volatilityReference=Math.floor(e.volatilityAccumulator*e.reductionFactor/Sr),e.lastUpdateTimestamp=new qe(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new qe(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*Cn;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},et=class{static isFeeOnInput(e,t){switch(e){case 0:return!0;case 1:return t;case 2:return!t;default:return!0}}static isFeeOnTokenA(e,t){return e.feeOn===0?t:e.feeOn===1}static isOverflowDefaultTickarrayBitmap({tickSpacing:e,tickIndexs:t}){let{maxTickBoundary:n,minTickBoundary:o}=this.tickArrayStartIndexRange({tickSpacing:e});for(let i of t){let r=ae.getTickArrayStartIndex(i,e);if(r>=n||r<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=Mt.maxTickInTickarrayBitmap(e),n=-t;return t>lt&&(t=ae.getTickArrayStartIndex(lt,e)+ae.tickCount(e)),n<ct&&(n=ae.getTickArrayStartIndex(ct,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let r=[];for(let s=0;s<i.length;s++){let f=i[s],d=(u=(a=t.rewardDefaultInfos[s])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(f.mint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(_({},f),{perSecond:Ur(f.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new tt(d)});if(p.mint.equals(tt.default)||p.totalEmissioned.eq(wt))continue;if(n<=p.openTime.toNumber()||o.eq(U)){r.push(p);continue}let g=new qe(Math.min(p.endTime.toNumber(),n)),y=g.sub(p.lastUpdateTime);if(y.isZero()){r.push(p);continue}let b=we(y,p.emissionsPerSecondX64,le),P=Se(y,p.emissionsPerSecondX64,o),w,B=p.totalEmissioned.add(b);if(B.lte(wt))w=B;else{let A=wt.sub(p.totalEmissioned);w=wt,P=Se(A,le,o)}let I=p.growthGlobalX64.add(P);r.push(E(_({},p),{growthGlobalX64:I,totalEmissioned:w,lastUpdateTime:g}))}return r}},Qe=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r,a){let c=o.toBase58()===e.mintA.address,u=ae.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:s,amountCalculated:f,feeAmount:d,sqrtPriceX64:p,accounts:g}=Ai({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:y[1].address,value:y[1]})).filter(y=>c?y.value.startTickIndex<=u:y.value.startTickIndex>=u).sort((y,b)=>c?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:U,zeroForOne:c,isBaseInput:!0,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:s,expectedAmountOut:f,remainingAccounts:g,executionPrice:p,feeAmount:d}}static getInputAmountAndRemainAccounts(e,t,n,o,i,r,a){let c=o.toBase58()===e.mintB.address,u=ae.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:s,amountCalculated:f,feeAmount:d,sqrtPriceX64:p,accounts:g}=Ai({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(y=>({address:new tt(y[0]),value:y[1]})).filter(y=>c?y.value.startTickIndex<=u:y.value.startTickIndex>=u).sort((y,b)=>c?b.value.startTickIndex-y.value.startTickIndex:y.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:U,zeroForOne:c,isBaseInput:!1,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:s,expectedAmountIn:f,remainingAccounts:g,executionPrice:p,feeAmount:d}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await pt(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=li.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=[...Mt.findTickArrayStartIndex({tickSpacing:c.tickSpacing,poolBitmap:c.tickArrayBitmap,tickArrayBitmap:c.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:c.tickCurrent}}),...Mt.findTickArrayStartIndex({tickSpacing:c.tickSpacing,poolBitmap:c.tickArrayBitmap,tickArrayBitmap:c.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:c.tickCurrent}})];for(let s of u){let{publicKey:f}=Ie(c.programId,c.id,s);o[f.toString()]===void 0&&(i.push({pubkey:f}),o[f.toString()]=c.id)}}let r=await pt(e,i,{batchRequest:n}),a={};for(let c of r){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let s=Ln.decode(c.accountInfo.data);a[u.toString()][s.startTickIndex]=E(_({},s),{address:c.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountIn:r,slippage:a,blockTimestamp:c,priceLimit:u=new ne(0)}){var N;let s,f=o.toBase58()===e.mintA.address,[d,p]=f?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];u.equals(new ne(0))?s=f?Ye.add(new qe(1)):He.sub(new qe(1)):s=Q.priceToSqrtPriceX64(u,e.mintA.decimals,e.mintB.decimals);let g=rt(r,d,i,!1),{allTrade:y,expectedAmountOut:b,remainingAccounts:P,executionPrice:w,feeAmount:B}=Qe.getOutputAmountAndRemainAccounts(e,t,n,o,g.amount.sub((N=g.fee)!=null?N:U),c,s),I=rt(b,p,i,!1),A=Q.sqrtPriceX64ToPrice(w,e.mintA.decimals,e.mintB.decimals),k=f?A:new ne(1).div(A),T=b.mul(new qe(Math.floor((1-a)*1e10))).div(new qe(1e10)),K=rt(T,p,i,!1),S=f?e.currentPrice:new ne(1).div(e.currentPrice),x=new ne(k).sub(S).abs(),V=S,F=new yt(new ne(x).mul(10**15).toFixed(0),new ne(V).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:g,amountOut:I,minAmountOut:K,expirationTime:Kt(g.expirationTime,I.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:F,fee:B,remainingAccounts:P,executionPriceX64:w}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:i,slippage:r,epochInfo:a,blockTimestamp:c,catchLiquidityInsufficient:u=!1}){let s=i.address===e.mintB.address,[f,d]=s?[e.mintA,e.mintB]:[e.mintB,e.mintA],[p,g]=[new Ce(E(_({},f),{mint:f.address,isToken2022:f.programId===zr.toBase58()})),new Ce(E(_({},d),{mint:d.address,isToken2022:d.programId===zr.toBase58()}))],{allTrade:y,realAmountIn:b,amountOut:P,minAmountOut:w,expirationTime:B,currentPrice:I,executionPrice:A,priceImpact:k,fee:T,remainingAccounts:K,executionPriceX64:S}=Qe.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new tt(f.address),amountIn:o,slippage:r,epochInfo:a,catchLiquidityInsufficient:u,blockTimestamp:c}),x=E(_({},b),{amount:new fe(p,b.amount),fee:b.fee===void 0?void 0:new fe(p,b.fee)}),V=E(_({},P),{amount:new fe(g,P.amount),fee:P.fee===void 0?void 0:new fe(g,P.fee)}),F=E(_({},w),{amount:new fe(g,w.amount),fee:w.fee===void 0?void 0:new fe(g,w.fee)}),N=new $e({baseToken:p,denominator:new qe(10).pow(new qe(20+p.decimals)),quoteToken:g,numerator:I.mul(new ne(10**(20+g.decimals))).toFixed(0)}),q=new $e({baseToken:p,denominator:new qe(10).pow(new qe(20+p.decimals)),quoteToken:g,numerator:A.mul(new ne(10**(20+g.decimals))).toFixed(0)}),W=new fe(p,T);return{allTrade:y,realAmountIn:x,amountOut:V,minAmountOut:F,expirationTime:B,currentPrice:N,executionPrice:q,priceImpact:k,fee:W,remainingAccounts:K,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountOut:r,slippage:a,priceLimit:c=new ne(0),blockTimestamp:u}){var N;let s=o.toBase58()===e.mintA.address,f={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},d;c.equals(new ne(0))?d=s?He.sub(new qe(1)):Ye.add(new qe(1)):d=Q.priceToSqrtPriceX64(c,e.mintA.decimals,e.mintB.decimals);let p=rt(r,f[o.toString()],i,!0),{allTrade:g,expectedAmountIn:y,remainingAccounts:b,executionPrice:P,feeAmount:w}=Qe.getInputAmountAndRemainAccounts(e,t,n,o,p.amount.sub((N=p.fee)!=null?N:U),u,d),B=s?e.mintB.address:e.mintA.address,I=rt(y,f[B],i,!1),A=Q.sqrtPriceX64ToPrice(P,e.mintA.decimals,e.mintB.decimals),k=s?A:new ne(1).div(A),T=y.mul(new qe(Math.floor((1+a)*1e10))).div(new qe(1e10)),K=rt(T,f[B],i,!0),S=s?e.currentPrice:new ne(1).div(e.currentPrice),x=new ne(k).sub(S).abs(),V=S,F=new yt(new ne(x).mul(10**15).toFixed(0),new ne(V).mul(10**15).toFixed(0));return{allTrade:g,amountIn:I,maxAmountIn:K,realAmountOut:p,expirationTime:Kt(I.expirationTime,p.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:F,fee:w,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var g,y,b;let i=e[t],r=Q.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=Q.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),c=Math.max(r,i.priceMin),s=Math.min(a,i.priceMax)-c,f=a-r,d=i.priceMax-i.priceMin,p;return s<=0?p=0:f===s?p=d/s:d===s?p=s/f:p=s/d*(s/f),{feeApr:i.feeApr*p,rewardsApr:[((g=i.rewardApr[0])!=null?g:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,s=e[n],f=o[it(e.mintA.address).toString()],d=o[it(e.mintB.address).toString()],p=e.mintA.decimals,g=e.mintB.decimals;if(!s||!f||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=Q.priceToSqrtPriceX64(new ne(e.price),e.mintA.decimals,e.mintB.decimals),b=Q.getSqrtPriceAtTick(r),P=Q.getSqrtPriceAtTick(a),{amountSlippageA:w,amountSlippageB:B}=Le.getAmountsFromLiquidityWithSlippage(y,b,P,t,!1,!1,0),{amountSlippageA:I,amountSlippageB:A}=Le.getAmountsFromLiquidityWithSlippage(y,b,P,i,!1,!1,0),k=new ne(w.toString()).div(new ne(10).pow(p)).mul(f.value).add(new ne(B.toString()).div(new ne(10).pow(g)).mul(d.value)),T=new ne(I.toString()).div(new ne(10).pow(p)).mul(f.value).add(new ne(A.toString()).div(new ne(10).pow(g)).mul(d.value)),K=new ne(1).div(k.add(T)),x=new ne(s.volumeFee).mul(365).div(u).mul(K).mul(100).toNumber(),V=3600*24*365,F=e.rewardDefaultInfos.map(N=>{var X,G;let q=N.mint.decimals,W=o[N.mint.address];return c<((X=N.startTime)!=null?X:0)||c>((G=N.endTime)!=null?G:0)||!N.perSecond||!W||q===void 0?0:new ne(W.value).mul(new ne(N.perSecond).mul(V)).div(new ne(10).pow(q)).mul(K).mul(100).toNumber()});return{feeApr:x,rewardsApr:F,apr:x+F.reduce((N,q)=>N+q,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var P,w;let s=Q.priceToSqrtPriceX64(new ne(e.price),e.mintA.decimals,e.mintB.decimals),f=Q.getSqrtPriceAtTick(n),d=Q.getSqrtPriceAtTick(o),p=rt(i,(P=e[t?"mintA":"mintB"].extensions)==null?void 0:P.feeConfig,c,!u),g=new qe(new ne(p.amount.sub((w=p.fee)!=null?w:U).toString()).toFixed(0)),y;if(s.lte(f))y=t?Le.getLiquidityFromAmountA(f,d,g):new qe(0);else if(s.lte(d)){let B=Le.getLiquidityFromAmountA(s,d,g),I=Le.getLiquidityFromAmountB(f,s,g);y=t?B:I}else y=t?new qe(0):Le.getLiquidityFromAmountB(f,d,g);let b=await Qe.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,P,w,B;let c=Q.getSqrtPriceAtTick(n),u=Q.getSqrtPriceAtTick(o),s=Le.getAmountsForLiquidity(Q.priceToSqrtPriceX64(new ne(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[f,d]=[rt(s.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),rt(s.amountB,(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)],p=r*1e4,[g,y]=[rt(s.amountA.muln(1e4-p).divn(1e4),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),rt(s.amountB.muln(1e4-p).divn(1e4),(B=t.mintB.extensions)==null?void 0:B.feeConfig,e,!0)];return{liquidity:i,amountA:f,amountB:d,amountSlippageA:g,amountSlippageB:y,expirationTime:Kt(f.expirationTime,d.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(u=>!n[u.id]).map(u=>new tt(u.id));(await st(e,o)).forEach((u,s)=>{!u||(n[o[s].toBase58()]=un.decode(u.data))});let r=t.map(u=>xe(new tt(u.programId),new tt(u.id)).publicKey),a=await Qe.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1}),c={};return t.reduce((u,s)=>E(_({},u),{[s.id]:E(_({accInfo:n[s.id]},n[s.id]),{id:new tt(s.id),version:6,programId:new tt(s.programId),mintA:s.mintA,mintB:s.mintB,ammConfig:E(_({},s.config),{id:new tt(s.config.id),fundOwner:""}),currentPrice:new ne(s.price),exBitmapAccount:xe(new tt(s.programId),new tt(s.id)).publicKey,exBitmapInfo:a[xe(new tt(s.programId),new tt(s.id)).publicKey.toBase58()],startTime:n[s.id].startTime.toNumber(),rewardInfos:n[s.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}static async fetchTickArrayInfo({connection:e,programId:t,poolId:n,tick:o,tickSpacing:i}){let r=ae.getTickArrayStartIndex(o,i),a=Ie(t,n,r).publicKey,c=await e.getAccountInfo(a);if(!c)throw new Error(`tick array ${a.toBase58()} not found`);return Ln.decode(c.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(i=>{let r=ae.getTickArrayStartIndex(i.tick,i.tickSpacing);return Ie(i.programId,i.poolId,r).publicKey});return(await st(e,n)).map(i=>i&&Ln.decode(i.data))}};import Fb from"bn.js";function Ue(l){let e=`global:${l}`;return Buffer.from(ou.digest(e)).slice(0,8)}Or.span;var Xr=te("Raydium_Clmm"),Ge={createPool:Ue("create_pool"),createCustomizablePool:Ue("create_customizable_pool"),createPermissionedPool:Ue("create_permissioned_pool"),openPositionV2:Ue("open_position_v2"),openPositionWithToken22Nft:Ue("open_position_with_token22_nft"),closePosition:Ue("close_position"),increaseLiquidityV2:Ue("increase_liquidity_v2"),decreaseLiquidityV2:Ue("decrease_liquidity_v2"),initializeReward:Ue("initialize_reward"),setRewardParams:Ue("set_reward_params"),updateRewardInfos:Ue("update_reward_infos"),collectRemainingRewards:Ue("collect_remaining_rewards"),swapV2:Ue("swap_v2"),openLimitOrder:Ue("open_limit_order"),increaseLimitOrder:Ue("increase_limit_order"),decreaseLimitOrder:Ue("decrease_limit_order"),settleLimitOrder:Ue("settle_limit_order"),closeLimitOrder:Ue("close_limit_order")},Yr=[188,37,179,131,82,150,84,73],Hr=[16,72,250,198,14,162,212,19],dt=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g){let y=L([z("sqrtPriceX64"),m("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},...(g!=null?g:[]).map(B=>({pubkey:B,isSigner:!1,isWritable:!1}))],P=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,startTime:U},P);let w=Buffer.from([...Ge.createPool,...P]);return new Ke({keys:b,programId:e,data:w})}static createCustomizablePoolInstruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b){let P=L([z("sqrtPriceX64"),O("collectFeeOn"),Be("enableDynamicFee")]),w=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},...y.map(A=>({pubkey:A,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],B=Buffer.alloc(P.span);P.encode({sqrtPriceX64:p,collectFeeOn:g,enableDynamicFee:b!==void 0},B);let I=Buffer.from([...Ge.createCustomizablePool,...B]);return new Ke({keys:w,programId:e,data:I})}static createPermissionedPoolInstruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B){let I=L([z("sqrtPriceX64"),O("collectFeeOn"),Be("enableDynamicFee"),Re("seedIndex")]),A=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},...w.map(K=>({pubkey:K,isSigner:!1,isWritable:!1})),...B?[{pubkey:B,isSigner:!1,isWritable:!1}]:[]],k=Buffer.alloc(I.span);I.encode({sqrtPriceX64:y,collectFeeOn:b,enableDynamicFee:B!==void 0,seedIndex:P},k);let T=Buffer.from([...Ge.createPermissionedPool,...k]);return new Ke({keys:A,programId:e,data:T})}static initializeRewardInstruction(e,t,n,o,i,r,a,c,u,s,f,d){let p=L([m("openTime"),m("endTime"),z("emissionsPerSecondX64")]),g=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:s,endTime:f,emissionsPerSecondX64:d},y);let b=Buffer.from([...Ge.initializeReward,...y]);return new Ke({keys:g,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Ge.updateRewardInfos]);return new Ke({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,i,r,a,c,u,s,f,d){let p=L([O("rewardIndex"),z("emissionsPerSecondX64"),m("openTime"),m("endTime")]),g=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:s,endTime:f},y);let b=Buffer.from([...Ge.setRewardParams,...y]);return new Ke({keys:g,programId:e,data:b})}static closePositionInstruction(e,t,n,o,i,r,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:r?Oe:de,isSigner:!1,isWritable:!1}];a&&c.push({pubkey:a,isSigner:!1,isWritable:!0});let u=Buffer.from([...Ge.closePosition]);return new Ke({keys:c,programId:e,data:u})}static openPositionV2Instruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B,I,A,k,T,K,S,x,V){let F=L([Ne("tickLower"),Ne("tickUpper"),Ne("tickArrayLowerStart"),Ne("tickArrayUpperStart"),z("liquidity"),m("amountMaxA"),m("amountMaxB"),Be("withMetadata"),O("optionBaseFlag"),Be("baseFlag")]),N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:wi,isSigner:!1,isWritable:!1},{pubkey:Rt,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},...V?[{pubkey:V,isSigner:!1,isWritable:!0}]:[]],q=Buffer.alloc(F.span);F.encode({tickLower:w,tickUpper:B,tickArrayLowerStart:I,tickArrayUpperStart:A,liquidity:k,amountMaxA:T,amountMaxB:K,withMetadata:S,optionBaseFlag:x!==null?1:0,baseFlag:x!=null?x:!1},q);let W=Buffer.from([...Ge.openPositionV2,...q]);return new Ke({keys:N,programId:e,data:W})}static increaseLiquidityV2Instruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B){let I=L([z("liquidity"),m("amountMaxA"),m("amountMaxB"),O("optionBaseFlag"),Be("baseFlag")]),A=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],k=Buffer.alloc(I.span);I.encode({liquidity:y,amountMaxA:b,amountMaxB:P,optionBaseFlag:w!==null?1:0,baseFlag:w!=null?w:!1},k);let T=Buffer.from([...Ge.increaseLiquidityV2,...k]);return new Ke({keys:A,programId:e,data:T})}static decreaseLiquidityV2Instruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B){let I=L([z("liquidity"),m("amountMinA"),m("amountMinB")]),A=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:It,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=Buffer.alloc(I.span);I.encode({liquidity:b,amountMinA:P,amountMinB:w},k);let T=Buffer.from([...Ge.decreaseLiquidityV2,...k]);return new Ke({keys:A,programId:e,data:T})}static swapV2Instruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P){let w=L([m("amount"),m("otherAmountThreshold"),z("sqrtPriceLimitX64"),Be("isBaseInput")]),B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:It,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(k=>({pubkey:k,isSigner:!1,isWritable:!0}))],I=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:g,sqrtPriceLimitX64:y,isBaseInput:b},I);let A=Buffer.from([...Ge.swapV2,...I]);return new Ke({keys:B,programId:e,data:A})}static collectRemainingRewardsInstruction(e,t,n,o,i,r,a){let c=L([O("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:It,isSigner:!1,isWritable:!1}],s=Buffer.alloc(c.span);c.encode({rewardIndex:a},s);let f=Buffer.from([...Ge.collectRemainingRewards,...s]);return new Ke({keys:u,programId:e,data:f})}static openPositionWithToken22NftInstruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B,I,A,k,T,K,S,x){let V=L([Ne("tickLower"),Ne("tickUpper"),Ne("tickArrayLowerStart"),Ne("tickArrayUpperStart"),z("liquidity"),m("amountMaxA"),m("amountMaxB"),Be("withMetadata"),O("optionBaseFlag"),Be("baseFlag")]),F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:wi,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],N=Buffer.alloc(V.span);V.encode({tickLower:P,tickUpper:w,tickArrayLowerStart:B,tickArrayUpperStart:I,liquidity:A,amountMaxA:k,amountMaxB:T,withMetadata:K,optionBaseFlag:S!==null?1:0,baseFlag:S!=null?S:!1},N);let q=Buffer.from([...Ge.openPositionWithToken22Nft,...N]);return new Ke({keys:F,programId:e,data:q})}static openLimitOrderInstruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w){let B=L([O("nonceIndex"),Be("zeroForOne"),Ne("tickIndex"),m("amount")]),I=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1},...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],A=Buffer.alloc(B.span);B.encode({nonceIndex:g,zeroForOne:y,tickIndex:b,amount:P},A);let k=Buffer.from([...Ge.openLimitOrder,...A]);return new Ke({keys:I,programId:e,data:k})}static increaseLimitOrderInstruction(e,t,n,o,i,r,a,c,u,s){let f=L([m("amount")]),d=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1}],p=Buffer.alloc(f.span);f.encode({amount:s},p);let g=Buffer.from([...Ge.increaseLimitOrder,...p]);return new Ke({keys:d,programId:e,data:g})}static decreaseLimitOrderInstruction(e,t,n,o,i,r,a,c,u,s,f,d,p,g){let y=L([m("amount"),m("amountMin")]),b=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[]],P=Buffer.alloc(y.span);y.encode({amount:d,amountMin:p},P);let w=Buffer.from([...Ge.decreaseLimitOrder,...P]);return new Ke({keys:b,programId:e,data:w})}static settleLimitOrderInstruction(e,t,n,o,i,r,a,c,u){let s=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1}],f=Buffer.from([...Ge.settleLimitOrder]);return new Ke({keys:s,programId:e,data:f})}static closeLimitOrderInstruction(e,t,n,o){let i=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0}],r=Buffer.from([...Ge.closeLimitOrder]);return new Ke({keys:i,programId:e,data:r})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,s]=[new v(o.address),new v(i.address)],[f,d]=[new v(o.programId||de),new v(i.programId||de)],{publicKey:p}=vr(t,r,u,s),{publicKey:g}=fi(t,p),{publicKey:y}=cn(t,p,u),{publicKey:b}=cn(t,p,s),P=xe(t,p).publicKey,w=[this.createPoolInstruction(t,p,n,r,g,u,y,f,s,b,d,P,a,c)];return{signers:[],instructions:w,instructionTypes:[$.CreateAccount,$.ClmmCreatePool],address:{poolId:p,observationId:g,exBitmapAccount:P,mintA:u,mintB:s,mintAProgram:f,mintBProgram:d,mintAVault:y,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c,payer:u,seedIndex:s}=e,[f,d]=[new v(o.address),new v(i.address)],[p,g]=[new v(o.programId||de),new v(i.programId||de)],{publicKey:y}=Vr(t,r,f,d,s),{publicKey:b}=_r(t,u),{publicKey:P}=fi(t,y),{publicKey:w}=cn(t,y,f),{publicKey:B}=cn(t,y,d),I=xe(t,y).publicKey,A=[this.createPoolInstruction(t,y,n,r,P,f,w,p,d,B,g,I,a,c)];return{signers:[],instructions:A,instructionTypes:[$.CreateAccount,$.ClmmCreatePool],address:{poolId:y,observationId:P,exBitmapAccount:I,mintA:f,mintB:d,mintAProgram:p,mintBProgram:g,mintAVault:w,mintBVault:B,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,base:u,withMetadata:s,getEphemeralSigners:f,nft2022:d}){let p=[],[g,y]=[new v(e.programId),new v(e.id)],b;if(f)b=new v((await f(1))[0]);else{let x=bo.generate();p.push(x),b=x.publicKey}let P=ae.getTickArrayStartIndex(o,e.config.tickSpacing),w=ae.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:B}=Ie(g,y,P),{publicKey:I}=Ie(g,y,w),{publicKey:A}=d?ce(n.wallet,b,Oe):ce(n.wallet,b,de),{publicKey:k}=Gt(b),{publicKey:T}=mt(g,b),{publicKey:K}=St(g,y,o,i),S=d?this.openPositionWithToken22NftInstruction(g,n.feePayer,y,n.wallet,b,A,K,B,I,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,r,a,c,s==="create",u&&u==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0):this.openPositionV2Instruction(g,n.feePayer,y,n.wallet,b,A,k,K,B,I,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,r,a,c,s==="create",null,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0);return{signers:p,instructions:[S],instructionTypes:[$.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:B,tickArrayUpper:I,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:K}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,liquidity:u,withMetadata:s,getEphemeralSigners:f,nft2022:d}){let p=[],[g,y]=[new v(e.programId),new v(e.id)],b;if(f)b=new v((await f(1))[0]);else{let x=bo.generate();p.push(x),b=x.publicKey}let P=ae.getTickArrayStartIndex(o,e.config.tickSpacing),w=ae.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:B}=Ie(g,y,P),{publicKey:I}=Ie(g,y,w),{publicKey:A}=d?ce(n.wallet,b,Oe):ce(n.wallet,b,de),{publicKey:k}=Gt(b),{publicKey:T}=mt(g,b),{publicKey:K}=St(g,y,o,i),S=d?this.openPositionWithToken22NftInstruction(g,n.feePayer,y,n.wallet,b,A,K,B,I,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,u,!r||r==="MintA"?a:c,!r||r==="MintA"?c:a,s==="create",r&&r==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0):this.openPositionV2Instruction(g,n.feePayer,y,n.wallet,b,A,k,K,B,I,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,i,P,w,U,r==="MintA"?a:c,r==="MintA"?c:a,s==="create",r==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(g,y).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:B,tickArrayUpper:I,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:K},instructions:[S],signers:p,instructionTypes:[$.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,base:u,withMetadata:s,getEphemeralSigners:f,nft2022:d}){let p,g=[];if(f)p=new v((await f(1))[0]);else{let x=bo.generate();g.push(x),p=x.publicKey}let[y,b]=[new v(e.programId),new v(e.id)],P=ae.getTickArrayStartIndex(o,e.config.tickSpacing),w=ae.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:B}=Ie(y,b,P),{publicKey:I}=Ie(y,b,w),{publicKey:A}=d?ce(n.wallet,p,Oe):ce(n.wallet,p,de),{publicKey:k}=Gt(p),{publicKey:T}=mt(y,p),{publicKey:K}=St(y,b,o,i),S=d?this.openPositionWithToken22NftInstruction(y,n.wallet,b,n.wallet,p,A,K,B,I,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),o,i,P,w,r,a,c,s==="create",u&&u==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(y,b).publicKey:void 0):this.openPositionV2Instruction(y,n.wallet,b,n.wallet,p,A,k,K,B,I,T,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),o,i,P,w,r,a,c,s==="create",null,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[P,w]})?xe(y,b).publicKey:void 0);return{address:{nftMint:p,tickArrayLower:B,tickArrayUpper:I,positionNftAccount:A,metadataAccount:k,personalPosition:T,protocolPosition:K},instructions:[S],signers:g,instructionTypes:[$.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new v(e.programId),a=i?ce(n.wallet,o.nftMint,Oe).publicKey:ce(n.wallet,o.nftMint,de).publicKey,{publicKey:c}=mt(r,o.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,c,!!i,new v(e.id))),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[$.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,s]=[new v(e.programId),new v(e.id)],f=ae.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),d=ae.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,s,f),{publicKey:g}=Ie(u,s,d),{publicKey:y}=c?ce(o.wallet,n.nftMint,Oe):ce(o.wallet,n.nftMint,de),{publicKey:b}=mt(u,n.nftMint),{publicKey:P}=St(u,s,n.tickLower,n.tickUpper),w=this.increaseLiquidityV2Instruction(u,o.wallet,y,b,s,P,p,g,o.tokenAccountA,o.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),i,r,a,null,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[f,d]})?xe(u,s).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:g,positionNftAccount:y,personalPosition:b,protocolPosition:P},signers:[],instructions:[w],instructionTypes:[$.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:c}){let[u,s]=[new v(e.programId),new v(e.id)],f=ae.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),d=ae.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,s,f),{publicKey:g}=Ie(u,s,d),{publicKey:y}=c?ce(o.wallet,n.nftMint,Oe):ce(o.wallet,n.nftMint,de),{publicKey:b}=mt(u,n.nftMint),{publicKey:P}=St(u,s,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:g,positionNftAccount:y,personalPosition:b,protocolPosition:P},instructions:[this.increaseLiquidityV2Instruction(u,o.wallet,y,b,s,P,p,g,o.tokenAccountA,o.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),U,i==="MintA"?r:a,i==="MintA"?a:r,i==="MintA",et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[f,d]})?xe(u,s).publicKey:void 0)],signers:[],instructionTypes:[$.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[s,f]=[new v(e.programId),new v(e.id)],d=ae.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),p=ae.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:g}=Ie(s,f,d),{publicKey:y}=Ie(s,f,p),{publicKey:b}=u?ce(o.wallet,n.nftMint,Oe):ce(o.wallet,n.nftMint,c),{publicKey:P}=mt(s,n.nftMint),{publicKey:w}=St(s,f,n.tickLower,n.tickUpper),B=new Map;for(let T=0;T<t.rewardInfos.length;T++)B.set(t.rewardInfos[T].mint.address,o.rewardAccounts[T]);let I=[];for(let T=0;T<t.rewardInfos.length;T++){let K=t.rewardInfos[T].mint.address,S=B.get(K);S&&I.push({poolRewardVault:new v(t.rewardInfos[T].vault),ownerRewardVault:S,rewardMint:new v(K)})}let A=[],k=this.decreaseLiquidityV2Instruction(s,o.wallet,b,P,f,w,g,y,o.tokenAccountA,o.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),I,i,r,a,et.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,p]})?xe(s,f).publicKey:void 0);return A.push(k),{address:{tickArrayLower:g,tickArrayUpper:y,positionNftAccount:b,personalPosition:P,protocolPosition:w},signers:[],instructions:A,instructionTypes:[$.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[s,f]=[new v(e.programId),new v(e.id)],[d,p]=[new v(t.vault.A),new v(t.vault.B)],[g,y]=[new v(e.mintA.address),new v(e.mintB.address)],b=e.mintA.address.toString()===i.toString(),P=[this.swapV2Instruction(s,o.wallet,f,new v(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?g:y,b?y:g,u,n,r,a,c,!0,xe(s,f).publicKey)];return{signers:[],instructions:P,instructionTypes:[$.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[s,f]=[new v(e.programId),new v(e.id)],[d,p]=[new v(t.vault.A),new v(t.vault.B)],[g,y]=[new v(e.mintA.address),new v(e.mintB.address)],b=e.mintB.address.toString()===i.toBase58(),P=[this.swapV2Instruction(s,o.wallet,f,new v(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?g:y,b?y:g,u,n,r,a,c,!1,xe(s,f).publicKey)];return{signers:[],instructions:P,instructionTypes:[$.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new v(e.programId),new v(e.id)],a=Er(i,r,o.mint).publicKey,c=po(i).publicKey,u=[this.initializeRewardInstruction(i,n.wallet,r,c,new v(e.config.id),n.tokenAccount,o.programId,o.mint,a,new go(o.openTime),new go(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[$.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new v(e.programId),new v(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new v(t.rewardInfos[d].vault),u=new v(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Xr.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let s=po(i).publicKey,f=[this.setRewardParamsInstruction(i,n.wallet,r,s,new v(e.config.id),n.tokenAccount,c,u,a,new go(o.openTime),new go(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:s},signers:[],instructions:f,instructionTypes:[$.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new v(e.programId),new v(e.id)],a,c;for(let s=0;s<e.rewardDefaultInfos.length;s++)e.rewardDefaultInfos[s].mint.address===o.toString()&&(a=s,c=new v(t.rewardInfos[s].vault));(a===void 0||c===void 0)&&Xr.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRemainingRewardsInstruction(i,n.wallet,r,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[$.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:c}){let u=[],s;if(c)s=new v((await c(1))[0]);else{let P=bo.generate();u.push(P),s=P.publicKey}let f=a?ce(i,r,Oe).publicKey:ce(i,r,de).publicKey,{publicKey:d}=mt(n,r),p=bi(e,s).publicKey,g=ce(i,s,de).publicKey,y=Gt(s).publicKey,b=dt.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:f,positionId:d,lockPositionId:p,lockNftMint:s,lockNftAccount:g,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:ce(t,r,a?Oe:de).publicKey,positionNftProgram:a?Oe:de});return{address:{positionId:d,lockPositionId:p,lockNftAccount:g,lockNftMint:s,positionNftAccount:f,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[$.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:s,lockPositionId:f,lockNftMint:d,lockNftAccount:p,metadataAccount:g,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Rt,isSigner:!1,isWritable:!1},{pubkey:wi,isSigner:!1,isWritable:!1},{pubkey:ut,isSigner:!1,isWritable:!1},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1}],P=L([Be("withMetadata")]),w=Buffer.alloc(P.span);P.encode({withMetadata:y},w);let B=Buffer.from([...Yr,...w]);return new Ke({keys:b,programId:e,data:B})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ce(o,i,de),{publicKey:a}=mt(n,i),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:yi(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:kt.programId,isSigner:!1,isWritable:!1}];return new Ke({keys:c,programId:e,data:Buffer.from(Yr)})}static harvestLockPositionInstruction(e){let[t,n]=[new v(e.poolKeys.programId),new v(e.poolKeys.id)],o=ae.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=ae.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=Ie(t,n,o),{publicKey:a}=Ie(t,n,i),{publicKey:c}=ce(e.owner,e.ownerPosition.nftMint,de),{publicKey:u}=mt(t,e.ownerPosition.nftMint),{publicKey:s}=St(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),f=[];for(let g=0;g<e.poolKeys.rewardInfos.length;g++)f.push({poolRewardVault:new v(e.poolKeys.rewardInfos[g].vault),ownerRewardVault:e.ownerRewardAccounts[g],rewardMint:new v(e.poolKeys.rewardInfos[g].mint.address)});let d=[...f.map(g=>[{pubkey:g.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:g.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:g.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:yi(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:new v(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new v(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:It,isSigner:!1,isWritable:!1},{pubkey:new v(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new v(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new Ke({keys:p,programId:e.programId,data:Buffer.from(Hr)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:s,protocolPosition:f,vaultA:d,vaultB:p,tickArrayLower:g,tickArrayUpper:y,userVaultA:b,userVaultB:P,mintA:w,mintB:B,rewardAccounts:I,exTickArrayBitmap:A}){let k=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...I.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:P,isSigner:!1,isWritable:!0},{pubkey:de,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:It,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:B,isSigner:!1,isWritable:!1},...k];return new Ke({keys:T,programId:e,data:Buffer.from(Hr)})}};import{PublicKey as ki}from"@solana/web3.js";var ru=L([O("instruction")]),au=L([O("instruction")]),su=L([m("rewardState"),m("rewardOpenTime"),m("rewardEndTime"),m("rewardLastUpdateTime"),m("totalReward"),m("totalRewardEmissioned"),m("rewardClaimed"),m("rewardPerSecond"),z("accRewardPerShare"),h("rewardVault"),h("rewardMint"),h("rewardSender"),m("rewardType"),D(m(),15,"padding")]),uu=L([m("state"),m("nonce"),h("lpVault"),h("rewardVault"),h(),h(),m(),m(),m("totalReward"),z("perShareReward"),m("lastSlot"),m("perSlotReward")]),cu=L([m("state"),m("nonce"),h("lpVault"),h("rewardVaultA"),m("totalRewardA"),z("perShareRewardA"),m("perSlotRewardA"),O("option"),h("rewardVaultB"),J(7),m("totalRewardB"),z("perShareRewardB"),m("perSlotRewardB"),m("lastSlot"),h()]),lu=L([m(),m("state"),m("nonce"),m("validRewardTokenNum"),z("rewardMultiplier"),m("rewardPeriodMax"),m("rewardPeriodMin"),m("rewardPeriodExtend"),h("lpMint"),h("lpVault"),D(su,5,"rewardInfos"),h("creator"),h(),D(m(),32,"padding")]),mu=new Proxy(uu,{get(l,e,t){return e==="decode"?(...n)=>{let o=l.decode(...n);return E(_({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(l,e,t)}}),du=new Proxy(cu,{get(l,e,t){return e==="decode"?(...n)=>{let o=l.decode(...n);return E(_({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(l,e,t)}}),Zr=new Proxy(lu,{get(l,e,t){return e==="decode"?(...n)=>{let o=l.decode(...n);return E(_({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return E(_({},i),{rewardType:((r=Object.entries(Fn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(l,e,t)}}),pu=L([m("isSet"),m("rewardPerSecond"),m("rewardOpenTime"),m("rewardEndTime"),m("rewardType")]),fu=L([O("instruction"),m("nonce"),D(pu,5,"rewardTimeInfo")]),yu=L([O("instruction"),m("rewardReopenTime"),m("rewardEndTime"),m("rewardPerSecond")]),bu=L([O("instruction"),m("isSet"),m("rewardPerSecond"),m("rewardOpenTime"),m("rewardEndTime"),m("rewardType")]),cP=L([m("state"),h("id"),h("owner"),m("deposited"),D(m(),1,"rewardDebts")]),$r=L([m("state"),h("id"),h("owner"),m("deposited"),D(z(),1,"rewardDebts"),m(""),m("voteLockedBalance"),D(m(),15)]),lP=L([m("state"),h("id"),h("owner"),m("deposited"),D(m(),2,"rewardDebts")]),gu=L([m("state"),h("id"),h("owner"),m("deposited"),D(z(),2,"rewardDebts"),D(m(),17)]),Pu=L([m(),m("state"),h("id"),h("owner"),m("deposited"),D(z(),5,"rewardDebts"),D(m(),16)]),Au=L([O("instruction"),m("amount")]),wu=L([h("mint"),h("grantAuthority"),m("baselineVoteWeightScaledFactor"),m("maxExtraLockupVoteWeightScaledFactor"),m("lockupSaturationSecs"),yr("digitShift"),D(O(),7,"reserved1"),D(m(),7,"reserved2")]),ku=L([J(8),h("governanceProgramId"),h("realm"),h("realmGoverningTokenMint"),h("realmAuthority"),D(O(),32,"reserved1"),D(wu,4,"votingMints"),tn("timeOffset"),O("bump"),D(O(),7,"reserved2"),D(m(),11,"reserved3")]),Tu=L([tn("startTime"),tn("endTime"),O("kind"),D(O(),15,"reserved")]),hu=L([D(Tu,1,"lockup"),m("amountDeposited_native"),m("amountInitiallyLockedNative"),Be("isUsed"),Be("allowClawback"),O("votingMintConfigIdx"),D(O(),29,"reserved")]),Bu=L([J(8),h("voterAuthority"),h("registrar"),D(hu,32,"deposits"),O("voterBump"),O("voterWweightRecordBump"),D(O(),94,"reserved")]);import{NATIVE_MINT as AP}from"@solana/spl-token";var wP=te("Raydium_farm_config"),Iu=new ki("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),xu=new ki("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var kP=new ki("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Fn={"Standard SPL":0,"Option tokens":1},jr={[Pr.toString()]:3,[Ar.toString()]:4,[wr.toString()]:5,[ai.toString()]:6,[Nt.FARM_PROGRAM_ID_V3.toString()]:3,[Nt.FARM_PROGRAM_ID_V4.toString()]:4,[Nt.FARM_PROGRAM_ID_V5.toString()]:5,[Nt.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as iA,SystemProgram as rA,SYSVAR_CLOCK_PUBKEY as aA,SYSVAR_RENT_PUBKEY as sA,TransactionInstruction as uA}from"@solana/web3.js";import lA from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as dA,createAssociatedTokenAccountIdempotentInstruction as pA,TOKEN_PROGRAM_ID as fA}from"@solana/spl-token";import MP from"bn.js";import{PublicKey as Su}from"@solana/web3.js";import Ku from"bn.js";function Cu(l){return typeof l=="object"&&l!==null&&![Ce,fe,Su,ue,Ku,$e,yt].some(e=>typeof e=="object"&&l instanceof e)}function Ct(l){return typeof l=="string"?Do(l):Array.isArray(l)?l.map(e=>Ct(e)):Cu(l)?Object.fromEntries(Object.entries(l).map(([e,t])=>[e,Ct(t)])):l}var YP=te("Raydium.farm.util");var IA=te("Raydium_farm_instruction"),xA={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};import pw from"bn.js";import{PublicKey as mT}from"@solana/web3.js";import{AccountLayout as fT,MintLayout as yT,NATIVE_MINT as bT,TOKEN_PROGRAM_ID as PT}from"@solana/spl-token";import Pe from"bn.js";var Tt=1e4;function rt(l,e,t,n){if(e===void 0)return{amount:l,fee:void 0,expirationTime:void 0};let o=E(_({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,r=new Pe(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Tt){let c=new Pe(i.maximumFee.toString());return{amount:l.add(c),fee:c,expirationTime:a}}else{let c=zt(l.mul(new Pe(Tt)),new Pe(Tt-i.transferFeeBasisPoints)),u=new Pe(i.maximumFee.toString()),s=c.sub(l).gt(u)?l.add(u):c,f=zt(s.mul(new Pe(i.transferFeeBasisPoints)),new Pe(Tt)),d=f.gt(r)?r:f;return{amount:s,fee:d,expirationTime:a}}else{let c=zt(l.mul(new Pe(i.transferFeeBasisPoints)),new Pe(Tt)),u=c.gt(r)?r:c;return{amount:l,fee:u,expirationTime:a}}}function Kt(l,e){return l===void 0?e:e===void 0?l:Math.min(l,e)}function zt(l,e){let{div:t,mod:n}=l.divmod(e);return n.gt(new Pe(0))?t.add(new Pe(1)):t}function Xt(l,e){if(l.isZero())return new Pe(0);let t=l.div(e);return t.isZero()?new Pe(1):l.mod(e).gt(new Pe(0))?t.add(new Pe(1)):t}function vn(l,e,t){if(e===void 0)return{amount:l,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Pe(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=zt(l.mul(new Pe(o.transferFeeBasisPoints)),new Pe(Tt)),c=a.gt(i)?i:a;return{amount:l,fee:c,expirationTime:r}}function pn(l,e,t){if(e===void 0)return{amount:l,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new Pe(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Tt){let a=new Pe(o.maximumFee.toString());return{amount:l.add(a),fee:a,expirationTime:r}}else{let a=zt(l.mul(new Pe(Tt)),new Pe(Tt-o.transferFeeBasisPoints)),c=new Pe(o.maximumFee.toString()),u=a.sub(l).gt(c)?l.add(c):a,s=zt(u.mul(new Pe(o.transferFeeBasisPoints)),new Pe(Tt)),f=s.gt(i)?i:s;return{amount:u,fee:f,expirationTime:r}}}import ea from"bn.js";var _u=new ea(25),Vu=new ea(1e4);import{ASSOCIATED_TOKEN_PROGRAM_ID as _w,TOKEN_PROGRAM_ID as wo}from"@solana/spl-token";import{PublicKey as ht,SystemProgram as Ew,SYSVAR_RENT_PUBKEY as Dw,TransactionInstruction as ko}from"@solana/web3.js";import Po from"bn.js";var Ti=L([O("instruction"),m("amountIn"),m("minAmountOut")]),hi=L([O("instruction"),m("maxAmountIn"),m("amountOut")]),Nw=L([O("instruction"),O("nonce")]),Eu=L([O("instruction"),O("nonce"),m("startTime")]),Bi=L([m("status"),m("nonce"),m("maxOrder"),m("depth"),m("baseDecimal"),m("quoteDecimal"),m("state"),m("resetFlag"),m("minSize"),m("volMaxCutRatio"),m("amountWaveRatio"),m("baseLotSize"),m("quoteLotSize"),m("minPriceMultiplier"),m("maxPriceMultiplier"),m("systemDecimalValue"),m("minSeparateNumerator"),m("minSeparateDenominator"),m("tradeFeeNumerator"),m("tradeFeeDenominator"),m("pnlNumerator"),m("pnlDenominator"),m("swapFeeNumerator"),m("swapFeeDenominator"),m("baseNeedTakePnl"),m("quoteNeedTakePnl"),m("quoteTotalPnl"),m("baseTotalPnl"),m("poolOpenTime"),m("punishPcAmount"),m("punishCoinAmount"),m("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),m("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),m("swapQuote2BaseFee"),h("baseVault"),h("quoteVault"),h("baseMint"),h("quoteMint"),h("lpMint"),h("openOrders"),h("marketId"),h("marketProgramId"),h("targetOrders"),h("withdrawQueue"),h("lpVault"),h("owner"),m("lpReserve"),D(m(),3,"padding")]),Mw=L([m("accountType"),m("status"),m("nonce"),m("maxOrder"),m("depth"),m("baseDecimal"),m("quoteDecimal"),m("state"),m("resetFlag"),m("minSize"),m("volMaxCutRatio"),m("amountWaveRatio"),m("baseLotSize"),m("quoteLotSize"),m("minPriceMultiplier"),m("maxPriceMultiplier"),m("systemDecimalsValue"),m("abortTradeFactor"),m("priceTickMultiplier"),m("priceTick"),m("minSeparateNumerator"),m("minSeparateDenominator"),m("tradeFeeNumerator"),m("tradeFeeDenominator"),m("pnlNumerator"),m("pnlDenominator"),m("swapFeeNumerator"),m("swapFeeDenominator"),m("baseNeedTakePnl"),m("quoteNeedTakePnl"),m("quoteTotalPnl"),m("baseTotalPnl"),m("poolOpenTime"),m("punishPcAmount"),m("punishCoinAmount"),m("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),m("swapQuote2BaseFee"),m("swapBase2QuoteFee"),h("baseVault"),h("quoteVault"),h("baseMint"),h("quoteMint"),h("lpMint"),h("modelDataAccount"),h("openOrders"),h("marketId"),h("marketProgramId"),h("targetOrders"),h("owner"),D(m(),64,"padding")]),Du=L([O("instruction"),m("baseAmountIn"),m("quoteAmountIn"),m("fixedSide"),m("otherAmountMin")]),Wu=L([O("instruction"),m("lpAmount"),m("baseAmountMin"),m("quoteAmountMin")]);var qu=L([m("fee")]);var Ao=te("Raydium_liquidity_instruction");function Uu({poolKeys:l,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=so},i){let r=Ct(l),a=Buffer.alloc(Ti.span);Ti.encode({instruction:9,amountIn:ge(t),minAmountOut:ge(n)},a);let c=[M({pubkey:wo,isWritable:!1}),M({pubkey:r.id}),M({pubkey:r.authority,isWritable:!1}),M({pubkey:r.openOrders})];return i===4&&c.push(M({pubkey:r.targetOrders})),c.push(M({pubkey:r.vault.A}),M({pubkey:r.vault.B})),i===5&&c.push(M({pubkey:o})),c.push(M({pubkey:r.marketProgramId,isWritable:!1}),M({pubkey:r.marketId}),M({pubkey:r.marketBids}),M({pubkey:r.marketAsks}),M({pubkey:r.marketEventQueue}),M({pubkey:r.marketBaseVault}),M({pubkey:r.marketQuoteVault}),M({pubkey:r.marketAuthority,isWritable:!1}),M({pubkey:e.tokenAccountIn}),M({pubkey:e.tokenAccountOut}),M({pubkey:e.owner,isWritable:!1,isSigner:!0})),new ko({programId:r.programId,keys:c,data:a})}function Gu({poolKeys:l,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=so},i){let r=Ct(l),a=Buffer.alloc(hi.span);hi.encode({instruction:11,maxAmountIn:ge(t),amountOut:ge(n)},a);let c=[M({pubkey:wo,isWritable:!1}),M({pubkey:r.id}),M({pubkey:r.authority,isWritable:!1}),M({pubkey:r.openOrders}),M({pubkey:r.targetOrders}),M({pubkey:r.vault.A}),M({pubkey:r.vault.B})];return i===5&&c.push(M({pubkey:o})),c.push(M({pubkey:r.marketProgramId,isWritable:!1}),M({pubkey:r.marketId}),M({pubkey:r.marketBids}),M({pubkey:r.marketAsks}),M({pubkey:r.marketEventQueue}),M({pubkey:r.marketBaseVault}),M({pubkey:r.marketQuoteVault}),M({pubkey:r.marketAuthority,isWritable:!1}),M({pubkey:e.tokenAccountIn}),M({pubkey:e.tokenAccountOut}),M({pubkey:e.owner,isWritable:!1,isSigner:!0})),new ko({programId:r.programId,keys:c,data:a})}function zu(l,e,t,n,o,i,r,a,c,u){let s=L([O("instructionId"),m("amountIn"),m("minAmountOut")]),f=Buffer.alloc(s.span);s.encode({instructionId:16,amountIn:c,minAmountOut:u},f);let d=[{pubkey:wo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new ko({programId:l,keys:d,data:f})}function Xu(l,e,t,n,o,i,r,a,c,u){let s=L([O("instructionId"),m("maxAmountIn"),m("amountOut")]),f=Buffer.alloc(s.span);s.encode({instructionId:17,maxAmountIn:c,amountOut:u},f);let d=[{pubkey:wo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new ko({programId:l,keys:d,data:f})}function Ii(l){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=l;if(t===4){if(r==="in")return zu(new ht(e.programId),new ht(e.id),new ht(e.authority),new ht(e.vault.A),new ht(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Po(o.toString()),new Po(i.toString()));if(r==="out")return Xu(new ht(e.programId),new ht(e.id),new ht(e.authority),new ht(e.vault.A),new ht(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Po(o.toString()),new Po(i.toString()));Ao.logWithError("invalid params","params",l)}throw Ao.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function xi(l){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=l;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return Uu(E(_({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Gu(E(_({},a),{maxAmountIn:o,amountOut:i}),t);Ao.logWithError("invalid params","params",l)}throw Ao.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var Yu=5e4,Hu=L([m("x"),m("y"),m("price")]),Jw=L([m("accountType"),m("status"),m("multiplier"),m("validDataCount"),D(Hu,Yu,"DataElement")]);import{PublicKey as mk}from"@solana/web3.js";import To from"decimal.js";import{TOKEN_PROGRAM_ID as Qu}from"@solana/spl-token";import{PublicKey as ok}from"@solana/web3.js";var ak=te("Raydium_liquidity_serum");function ta({programId:l}){let{publicKey:e}=ie([Buffer.from("amm_config_account_seed","utf-8")],l);return e}function na({programId:l}){return ie([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],l)}var Si={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Ki=l=>{let e={},t=Qu.toBase58();return Object.keys(l).map(n=>{let o=l[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:At({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:At({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new To(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new To(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new To(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:Si,week:Si,month:Si,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:ta({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new To(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:At({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0,feeOn:"Both",hasDynamicFee:!1,tips:[],launchMigratePool:!1}}),e};import VT from"bn.js";import DT from"decimal.js";import{TOKEN_PROGRAM_ID as Dk}from"@solana/spl-token";import{PublicKey as qk}from"@solana/web3.js";import Gk from"bn.js";import{SystemProgram as Sk,SYSVAR_RENT_PUBKEY as Kk,Transaction as Ck,TransactionInstruction as Rk}from"@solana/web3.js";import{createInitializeAccountInstruction as Ok,TOKEN_PROGRAM_ID as Nk}from"@solana/spl-token";function Zu(l="accountFlags"){let e=new ro(l);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var $u=L([J(5),Zu("accountFlags"),h("ownAddress"),m("vaultSignerNonce"),h("baseMint"),h("quoteMint"),h("baseVault"),m("baseDepositsTotal"),m("baseFeesAccrued"),h("quoteVault"),m("quoteDepositsTotal"),m("quoteFeesAccrued"),m("quoteDustThreshold"),h("requestQueue"),h("eventQueue"),h("bids"),h("asks"),m("baseLotSize"),m("quoteLotSize"),m("feeRateBps"),m("referrerRebatesAccrued"),J(7)]);import{PublicKey as lB}from"@solana/web3.js";import{AccountLayout as dB,NATIVE_MINT as pB,TOKEN_2022_PROGRAM_ID as fB,TOKEN_PROGRAM_ID as yB,createAssociatedTokenAccountIdempotentInstruction as bB}from"@solana/spl-token";import lh from"bn.js";import ec from"bn.js";var ZT=new ec(0);import nh from"bn.js";import tc from"bn.js";var We=new tc(1e6);import BB from"bn.js";import xB from"decimal.js";import{PublicKey as Kh,TransactionInstruction as rc,Keypair as Rh,SystemProgram as Lh}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Nh,TOKEN_2022_PROGRAM_ID as Mh,TOKEN_PROGRAM_ID as Fh}from"@solana/spl-token";var nc=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),yh=Buffer.from("amm_config","utf8"),bh=Buffer.from("pool","utf8"),gh=Buffer.from("pool_lp_mint","utf8"),Ph=Buffer.from("pool_vault","utf8"),oc=Buffer.from("observation","utf8"),Ah=Buffer.from("permission","utf8"),wh=Buffer.from("support_mint","utf8"),kh=Buffer.from("creator_fee_share","utf8");function Ri(l){return ie([nc],l)}function Li(l,e){return ie([oc,e.toBuffer()],l)}var Th=Buffer.from("locked_liquidity","utf8");var qh=te("Raydium_cpmm"),ac={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133],createPermissionPda:Buffer.from([135,136,2,216,137,169,181,202]),closePermissionPda:Buffer.from([156,84,32,118,69,135,70,123]),initializeWithPermission:Buffer.from([63,55,254,65,49,178,89,121]),collectCreatorFee:Buffer.from([20,22,86,123,198,28,219,132]),collectCreatorFeePermissionless:Buffer.from([202,202,34,83,226,122,145,229])};function _n(l,e,t,n,o,i,r,a,c,u,s,f,d,p,g,y){let b=L([m("amountIn"),m("amounOutMin")]),P=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],w=Buffer.alloc(b.span);return b.encode({amountIn:g,amounOutMin:y},w),new rc({keys:P,programId:l,data:Buffer.from([...ac.swapBaseInput,...w])})}var sc=L([J(8),O("bump"),Be("disableCreatePool"),Re("index"),m("tradeFeeRate"),m("protocolFeeRate"),m("fundFeeRate"),m("createPoolFee"),h("protocolOwner"),h("fundOwner"),m("creatorFeeRate"),m("creatorFeeShareRate"),D(m(),14)]),Oi=L([J(8),h("configId"),h("poolCreator"),h("vaultA"),h("vaultB"),h("mintLp"),h("mintA"),h("mintB"),h("mintProgramA"),h("mintProgramB"),h("observationId"),O("bump"),O("status"),O("lpDecimals"),O("mintDecimalA"),O("mintDecimalB"),m("lpAmount"),m("protocolFeesMintA"),m("protocolFeesMintB"),m("fundFeesMintA"),m("fundFeesMintB"),m("openTime"),m("epoch"),O("feeOn"),Be("enableCreatorFee"),D(O(),6),m("creatorFeesMintA"),m("creatorFeesMintB"),D(m(),28)]),zh=L([J(8),h("configId"),D(m(),30)]),Xh=L([J(8),O("bump"),h("creator"),h("ammConfig"),m("shareRate"),D(m(),8)]);import{PublicKey as uc,Transaction as Ni,TransactionInstruction as cc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as lc}from"@solana/spl-token";import oa from"bn.js";var Ze=class extends je{static getPdaPoolId(e,t){return ie([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ie([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new oa(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let r=n.map(s=>Ze.getPdaPoolId(t,s).publicKey),a=[];for(let s=0;s<Ze.VERSION_PROJECT.length;s++)a.push(...r.map(f=>Ze.getPdaOwnerId(t,f,o,s).publicKey));let c=await st(e,[...r,...a]),u=[];for(let s=0;s<c.length;s++){let f=Math.floor(s/n.length),d=s%n.length,p=r[d],g=a[s],y=c[d],b=c[n.length+s];if(!(y&&b)||y.data.length!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let P=Ze.POOL_LAYOUT.decode(y.data),w=Ze.OWNER_LAYOUT.decode(b.data),B=P.openTime.toNumber(),I=P.endTime.toNumber(),A=w.tokenInfo.map(K=>K.debtAmount.gt(new oa(0))).filter(K=>!K).length!==3,k=i>B&&i<I&&P.status===1,T=A&&k;u.push({programId:t,poolId:p,ammId:P.ammId,ownerAccountId:g,snapshotLpAmount:w.lpAmount,project:Ze.VERSION_PROJECT[f],openTime:B,endTime:I,canClaim:T,canClaimErrorType:A?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:P.tokenInfo.map((K,S)=>({mintAddress:K.mintAddress,mintVault:K.mintVault,mintDecimals:K.mintDecimals,perLpLoss:K.perLpLoss,debtAmount:w.tokenInfo[S].debtAmount.add(w.tokenInfo[S].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:s,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(Ce.WSOL.mint),associatedOnly:u.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),r.push(s)}o.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let s of e){let f=[];for(let d of s.tokenInfo){let{account:p,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(Ce.WSOL.mint),associatedOnly:d.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});g&&o.addInstruction(g),p&&(r[d.mintAddress.toString()]=p,f.push(p))}o.addInstruction({instructions:[Ze.makeClaimInstruction({programId:s.programId,poolInfo:s,ownerInfo:{wallet:i,ownerPda:s.ownerAccountId,claimAddress:f}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return Qo(u,[i,...c.map(s=>s.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ni().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Ni().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ni().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=L([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:lc,isSigner:!1,isWritable:!1}],r=Buffer.alloc(o.span);o.encode({},r);let a=Buffer.from([10,66,208,184,161,6,191,98,...r]);return new cc({keys:i,programId:e,data:a})}},Pt=Ze;Pt.CLAIMED_NUM=3,Pt.POOL_LAYOUT=L([J(8),O("bump"),O("status"),m("openTime"),m("endTime"),h("ammId"),D(L([O("mintDecimals"),h("mintAddress"),h("mintVault"),m("perLpLoss"),m("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),D(m(),10,"padding")]),Pt.OWNER_LAYOUT=L([J(8),O("bump"),O("version"),h("poolId"),h("owner"),m("lpAmount"),D(L([h("mintAddress"),m("debtAmount"),m("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),D(m(),4,"padding")]),Pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new uc(e)),Pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];var mc=Buffer.from("vault_auth_seed","utf8"),gI=Buffer.from("global_config","utf8"),PI=Buffer.from("pool_vesting","utf8"),AI=Buffer.from("platform_config","utf8"),wI=Buffer.from("platform_fee_vault_auth_seed","utf8"),kI=Buffer.from("creator_fee_vault_auth_seed","utf8"),TI=Buffer.from("platform_global_access","utf8"),hI=Buffer.from("platform_allow_config","utf8"),BI=Buffer.from("platform_curve_rule","utf8");function fn(l){return ie([mc],l)}function Mi(l){return ie([Buffer.from("__event_authority","utf8")],l)}function Vn(l,e,t){return ie([e.toBuffer(),t.toBuffer()],l)}function En(l,e,t){return ie([e.toBuffer(),t.toBuffer()],l)}import{ASSOCIATED_TOKEN_PROGRAM_ID as RI,TOKEN_2022_PROGRAM_ID as LI,TOKEN_PROGRAM_ID as OI}from"@solana/spl-token";import{SystemProgram as ia,TransactionInstruction as ra}from"@solana/web3.js";import Fi from"bn.js";var aa={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106]),createPlatformAllowConfig:Buffer.from([69,71,168,7,214,250,107,102]),closePlatformAllowConfig:Buffer.from([82,205,36,216,16,6,240,215]),createPlatformCurveRule:Buffer.from([148,71,180,136,122,144,59,21]),updatePlatformCurveRule:Buffer.from([90,100,206,196,54,117,120,139]),removePlatformCurveRule:Buffer.from([236,77,154,138,32,145,127,219]),closePlatformCurveRule:Buffer.from([194,114,82,45,136,88,169,159])};function ho(l,e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B){let I=L([m("amountB"),m("minAmountA"),m("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Mi(l).publicKey,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1}];B&&A.push({pubkey:B,isSigner:!1,isWritable:!0}),A.push({pubkey:ia.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:g,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountB:b,minAmountA:P,shareFeeRate:w!=null?w:new Fi(0)},k),new ra({keys:A,programId:l,data:Buffer.from([...aa.buyExactIn,...k])})}function vi(l,e,t,n,o,i,r,a,c,u,s,f,d,p,g,y,b,P,w,B){let I=L([m("amountA"),m("minAmountB"),m("shareFeeRate")]),A=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Mi(l).publicKey,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1}];B&&A.push({pubkey:B,isSigner:!1,isWritable:!0}),A.push({pubkey:ia.programId,isSigner:!1,isWritable:!1}),A.push({pubkey:g,isSigner:!1,isWritable:!0}),A.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(I.span);return I.encode({amountA:b,minAmountB:P,shareFeeRate:w!=null?w:new Fi(0)},k),new ra({keys:A,programId:l,data:Buffer.from([...aa.sellExactIn,...k])})}var VI=new Fi("18446744073709551615");import{NATIVE_MINT as OS,TOKEN_2022_PROGRAM_ID as NS,TOKEN_PROGRAM_ID as MS,createAssociatedTokenAccountIdempotentInstruction as vS,createSyncNativeInstruction as _S,getTransferFeeConfig as VS,unpackMint as ES}from"@solana/spl-token";import Ve from"bn.js";import{PublicKey as Tc,SystemProgram as qS}from"@solana/web3.js";var dc=L([m(),m("epoch"),O("curveType"),Re("index"),m("migrateFee"),m("tradeFeeRate"),m("maxShareFeeRate"),m("minSupplyA"),m("maxLockRate"),m("minSellRateA"),m("minMigrateRateA"),m("minFundRaisingB"),h("mintB"),h("protocolFeeOwner"),h("migrateFeeOwner"),h("migrateToAmmWallet"),h("migrateToCpmmWallet"),D(m(),16)]),pc=L([m("totalLockedAmount"),m("cliffPeriod"),m("unlockPeriod"),m("startTime"),m("totalAllocatedShare")]),fc=L([m(),m("epoch"),O("bump"),O("status"),O("mintDecimalsA"),O("mintDecimalsB"),O("migrateType"),m("supply"),m("totalSellA"),m("virtualA"),m("virtualB"),m("realA"),m("realB"),m("totalFundRaisingB"),m("protocolFee"),m("platformFee"),m("migrateFee"),pc.replicate("vestingSchedule"),h("configId"),h("platformId"),h("mintA"),h("mintB"),h("vaultA"),h("vaultB"),h("creator"),O("mintProgramFlag"),O("cpmmCreatorFeeOn"),m("platformVestingShare"),D(O(),54)]),WI=L([m(),m("epoch"),h("poolId"),h("beneficiary"),m("claimedAmount"),m("tokenShareAmount"),D(m(),8)]),yc=L([O("migrateType"),O("migrateCpmmFeeOn"),m("supply"),m("totalSellA"),m("totalFundRaisingB"),m("totalLockedAmount"),m("cliffPeriod"),m("unlockPeriod")]),qI=L([m("epoch"),O("index"),h("configId"),yc.replicate("bondingCurveParam"),D(m(),50)]),yn=L([m(),m("epoch"),h("platformClaimFeeWallet"),h("platformLockNftWallet"),m("platformScale"),m("creatorScale"),m("burnScale"),m("feeRate"),D(O(),64,"name"),D(O(),256,"web"),D(O(),256,"img"),h("cpConfigId"),m("creatorFeeRate"),h("transferFeeExtensionAuth"),h("platformVestingWallet"),m("platformVestingScale"),h("platformCpCreator"),O("restrictGlobalConfig"),O("restrictCurveParam"),h("curveRuleManager"),D(O(),78)]),bc=L([O("field"),O("op"),z("value")]),gc=L([Re("groupId"),m("epoch"),ri(bc,"constraints")]),Pc=L([m(),O("bump"),O("version"),h("platformId"),h("configId"),m("epoch"),D(m(),8),ri(gc,"groups")]);import ot from"bn.js";import ua from"decimal.js";import Bo from"bn.js";import Dn from"decimal.js";var Ft=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var Io=class extends Ft{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Dn(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Dn(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Dn(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Dn(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Dn(e.virtualB.add(e.realB.add(i)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new Bo(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new Bo(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(r),u=a.mul(n).div(r).sub(t),s=c.div(u),f=t.mul(t).div(u);if(s.lt(new Bo(0))||f.lt(new Bo(0)))throw Error("invalid input 0");return{a:s,b:f,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return Xt(o,i)}};import xo from"bn.js";import Wn from"decimal.js";var So=class extends Ft{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Wn(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Wn(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Wn(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Wn(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Wn(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new xo(0)))throw Error("invalid input 1");let a=new xo(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new xo(0))||t.lt(new xo(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return Xt(o,n)}};import nt from"bn.js";import Yt from"decimal.js";import sa from"bn.js";import _i from"decimal.js";var qn=class{static _multipler(e){return new _i(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new _i(e.toString()).div(this._Q64).mul(this._multipler(t)).div(this._multipler(n))}static getPriceX64({price:e,decimalA:t,decimalB:n}){let o=e.mul(this._multipler(n)).div(this._multipler(t));return new sa(o.mul(this._Q64).toFixed(0))}};qn._Q64=new _i(new sa(1).shln(64).toString());var Ko=class extends Ft{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new Yt(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new Yt(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new Yt(e.virtualA.mul(e.realA).toString()).div(qn._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new Yt(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new Yt(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new nt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new nt(3)).sub(i),u=t.mul(new nt(2)).mul(r).div(a),s=u.mul(u),f=t.mul(new nt(2)).mul(le).div(s);if(!f.gt(new nt(0)))throw Error("a need gt 0");if(!wt.gt(f))throw Error("a need lt u64 max");if(f.lt(new nt(0))||u.lt(new nt(0)))throw Error("invalid input 0");return{a:f,b:new nt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new nt(2).mul(n).mul(le).div(e.virtualA);return new nt(new Yt(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return Xt(e.virtualA.mul(o),new nt(2).mul(le)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=Xt(e.virtualA.mul(o),new nt(2).mul(le));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new nt(2).mul(n).mul(le).div(e.virtualA),i=new nt(new Yt(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Bt=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let s=this.getCurve(e),f=s.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),d=s.getPoolInitPriceByInit(E(_({},f),{decimalA:c,decimalB:u})),p=o.div(new ot(t-1)),g=new ot(0),y=[{price:d,totalSellSupply:0}],{a:b,b:P}=f,w=g,B=g;for(let I=1;I<t;I++){let A=I!==t-1?p:o.sub(B),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:P,realA:w,realB:B,totalFundRaisingB:o,totalSellA:i},amountB:A,protocolFeeRate:g,platformFeeRate:g,curveType:e,shareFeeRate:g,creatorFeeRate:g,transferFeeConfigA:void 0,transferFeeConfigB:void 0,slot:0});w=w.add(k.amountA.amount),B=B.add(k.amountB);let T=this.getPrice({poolInfo:{virtualA:b,virtualB:P,realA:w,realB:B},decimalA:c,decimalB:u,curveType:e});y.push({price:T,totalSellSupply:new ua(w.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:i}){return this.getCurve(i).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(We).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new ot(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(We);if(n.lt(u))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let s=e.sub(n).sub(o),f=e.mul(r.minMigrateRateA).div(We);if(s.lt(f))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new ot(new ua(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let g=new ot(10).pow(new ot(i));if(p.lte(g))throw Error("check migrate lp error")}else if(a==="cpmm"){let g=new ot(100);if(p.lte(g))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){var K;let f=vn(t,u,s),d=t.sub((K=f.fee)!=null?K:new ot(0)),p=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),g=this.calculateFee({amount:d,feeRate:p}),y=d.sub(g),b=this.getCurve(i),P=b.buyExactIn({poolInfo:e,amount:y}),w=e.totalSellA.sub(e.realA),B,I,A,k;if(P.gt(w)){B=w;let S=b.buyExactOut({poolInfo:e,amount:B}),x=this.calculatePreFee({postFeeAmount:S,feeRate:p});A=x.sub(S);let V=pn(x,u,s);I=V.amount,k=V.fee}else B=P,I=t,A=g,k=f.fee;let T=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:vn(B,c,s),amountB:I,splitFee:T,transferFeeB:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){let f=e.totalSellA.sub(e.realA),d=pn(t,c,s),p=d.fee?d.amount.add(d.fee):d.amount;t.gt(f)&&(p=f);let y=this.getCurve(i).buyExactOut({poolInfo:e,amount:p}),b=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),P=this.calculatePreFee({postFeeAmount:y,feeRate:b}),w=P.sub(y),B=pn(P,u,s),I=this.splitFee({totalFee:w,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:d,amountB:B.amount,splitFee:I,transferFeeB:B.fee}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){var B;let f=this.getCurve(i),d=vn(t,c,s),p=d.fee?d.amount.sub(d.fee):d.amount,g=f.sellExactIn({poolInfo:e,amount:p}),y=this.calculateFee({amount:g,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),b=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),P=g.sub(y),w=vn(P,u,s);return{amountA:d,amountB:P.sub((B=w.fee)!=null?B:new ot(0)),splitFee:b,transferFeeB:w.fee}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,transferFeeConfigB:u,slot:s}){let f=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),d=pn(t,u,s),p=d.amount,g=this.calculatePreFee({postFeeAmount:p,feeRate:f});if(e.realB.lt(g))throw Error("Insufficient liquidity");let y=g.sub(p),P=Bt.getCurve(i).sellExactOut({poolInfo:e,amount:g});if(P.gt(e.realA))throw Error();let w=this.splitFee({totalFee:y,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:pn(P,c,s),amountB:t,splitFee:w,transferFeeB:d.fee}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new ot(0):e.mul(n).div(r),c=r.isZero()?new ot(0):e.mul(o).div(r),u=r.isZero()?new ot(0):e.mul(i).div(r),s=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:s,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return Ci(e,t,We)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(We),o=We.sub(t);return n.add(o).sub(new ot(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new ot(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return Io;case 1:return So;case 2:return Ko}throw Error("find curve error")}};import{TOKEN_2022_PROGRAM_ID as Ac,TOKEN_PROGRAM_ID as wc}from"@solana/spl-token";function kc(l,e){return l>>e&1?Ac:wc}function Co(l){return kc(l,0)}import QS from"decimal.js";var ZS={initPriceX64:new Ve("515752397214619"),supply:new Ve(1e15),totalSellA:new Ve(7931e11),totalFundRaisingB:new Ve(85e9),totalFundRaisingBUSD:new Ve(125e8),totalLockedAmount:new Ve("0"),cliffPeriod:new Ve("0"),unlockPeriod:new Ve("0"),decimals:6,virtualA:new Ve("1073471847374405"),virtualB:new Ve("30050573465"),realA:new Ve(0),realB:new Ve(0),protocolFee:new Ve(0),platformId:new Tc("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new Ve(0),cliffPeriod:new Ve(0),unlockPeriod:new Ve(0),startTime:new Ve(0),totalAllocatedShare:new Ve(0)}},$S=new Ve(1e4);import{PublicKey as tK}from"@solana/web3.js";import{getTransferFeeConfig as oK,MintLayout as iK,TOKEN_2022_PROGRAM_ID as rK,TOKEN_PROGRAM_ID as aK,unpackMint as sK}from"@solana/spl-token";import{ASSOCIATED_TOKEN_PROGRAM_ID as hc,TOKEN_2022_PROGRAM_ID as Bc,TOKEN_PROGRAM_ID as Ic}from"@solana/spl-token";import{PublicKey as H,SystemProgram as xc,TransactionInstruction as Sc}from"@solana/web3.js";import vt from"bn.js";function Kc(l,e,t,n,o,i,r,a,c,u,s,f,d,p,g){var k;let y=[],b=[M({pubkey:Ic,isWritable:!1}),M({pubkey:Bc,isWritable:!1}),M({pubkey:hc,isWritable:!1}),M({pubkey:xc.programId,isWritable:!1}),M({pubkey:e,isSigner:!0})];b.push(M({pubkey:t})),b.push(M({pubkey:o}));let P=[c,u],w=[s,f],B=[i,r,a];for(let T=0;T<P.length;T++){let K=P[T],S=B[T]===K.mintA.address;if(b.push(M({pubkey:new H(K.programId),isWritable:!1})),T===P.length-1?b.push(M({pubkey:o})):b.push(M({pubkey:n})),b.push(M({pubkey:new H(B[T])})),b.push(M({pubkey:new H(B[T+1])})),K.version===6){let x=w[T];b.push(M({pubkey:new H(x.config.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(S?x.vault.A:x.vault.B)})),b.push(M({pubkey:new H(S?x.vault.B:x.vault.A)})),b.push(M({pubkey:new H(K.observationId)})),b.push(M({pubkey:It})),b.push(M({pubkey:xe(new H(K.programId),new H(K.id)).publicKey})),y.push(Cc(K.sqrtPriceX64.toString(),S));for(let V of(k=g[T])!=null?k:[])b.push(M({pubkey:new H(V)}))}else if(K.version===5){let x=w[T];b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.authority),isWritable:!1})),b.push(M({pubkey:new H(x.marketProgramId)})),b.push(M({pubkey:new H(x.marketAuthority)})),b.push(M({pubkey:kr,isWritable:!1})),b.push(M({pubkey:new H(x.openOrders)})),b.push(M({pubkey:new H(x.vault.A)})),b.push(M({pubkey:new H(x.vault.B)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.marketId)})),b.push(M({pubkey:new H(x.marketBids)})),b.push(M({pubkey:new H(x.marketAsks)})),b.push(M({pubkey:new H(x.marketEventQueue)})),b.push(M({pubkey:new H(x.marketBaseVault)})),b.push(M({pubkey:new H(x.marketQuoteVault)}))}else if(K.version===4){let x=w[T],V=K.status!==1;b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(x.authority),isWritable:!1})),b.push(M({pubkey:new H(V?x.id:x.marketProgramId)})),b.push(M({pubkey:new H(V?x.id:x.marketAuthority)})),b.push(M({pubkey:new H(V?x.id:x.openOrders)})),b.push(M({pubkey:new H(x.vault.A)})),b.push(M({pubkey:new H(x.vault.B)})),b.push(M({pubkey:new H(V?x.id:x.marketId)})),b.push(M({pubkey:new H(V?x.id:x.marketBids)})),b.push(M({pubkey:new H(V?x.id:x.marketAsks)})),b.push(M({pubkey:new H(V?x.id:x.marketEventQueue)})),b.push(M({pubkey:new H(V?x.id:x.marketBaseVault)})),b.push(M({pubkey:new H(V?x.id:x.marketQuoteVault)}))}else if(K.version===7){let x=w[T];b.push(M({pubkey:new H(x.authority)})),b.push(M({pubkey:new H(x.config.id)})),b.push(M({pubkey:new H(x.id)})),b.push(M({pubkey:new H(S?x.vault.A:x.vault.B)})),b.push(M({pubkey:new H(S?x.vault.B:x.vault.A)})),b.push(M({pubkey:new H(K.observationId)}))}else throw Error("pool type error")}let I=L([O("insId"),m("amountIn"),m("amountOut"),D(z(),y.length,"clmmPriceLimit")]),A=Buffer.alloc(I.span);return I.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},A),new Sc({keys:b,programId:l,data:A})}function Cc(l,e){if(l)if(e){let t=new vt(l).div(new vt(25));return t.gt(Ye.add(De))?t:Ye.add(De)}else{let t=new vt(l).mul(new vt(25));return t.lt(He.sub(De))?t:He.sub(De)}else return e?Ye.add(De):He.sub(De)}function ca({routeProgram:l,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,s,f,d;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],g=Ct(p),y=t.equals(g.mintA.address)?Ye.add(De):He.sub(De);return dt.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:g.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:g.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new vt(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],g=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[_n(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,g?p.vaultA:p.vaultB,g?p.vaultB:p.vaultA,g?p.mintProgramA:p.mintProgramB,g?p.mintProgramB:p.mintProgramA,new H(p[g?"mintA":"mintB"].address),new H(p[g?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[g?$.CpmmSwapBaseIn:$.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?xi({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new vt(0)),fixedSide:"in"}):Ii({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((s=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?s:new vt(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?$.AmmV5SwapBaseIn:$.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=n.poolInfo[0],g=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Kc(l,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,g,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((d=(f=n.minAmountOut.fee)==null?void 0:f.raw)!=null?d:new vt(0)),n.remainingAccounts)],instructionTypes:[$.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(P=>P!==void 0),address:{}}}else throw Error("route type error")}var la={[si.toBase58()]:3},ma={3:si};var Vi=L([J(5),J(8),h("ownAddress"),m("vaultSignerNonce"),h("baseMint"),h("quoteMint"),h("baseVault"),m("baseDepositsTotal"),m("baseFeesAccrued"),h("quoteVault"),m("quoteDepositsTotal"),m("quoteFeesAccrued"),m("quoteDustThreshold"),h("requestQueue"),h("eventQueue"),h("bids"),h("asks"),m("baseLotSize"),m("quoteLotSize"),m("feeRateBps"),m("referrerRebatesAccrued"),J(7)]),da={3:Vi};import{PublicKey as pa}from"@solana/web3.js";var Lo=te("Serum"),Oo=class{static getProgramId(e){let t=ma[e];return t||Lo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=la[t];return n||Lo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=da[e];return t||Lo.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=pa.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Lo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:pa.default,nonce:o}}};import Rc from"bn.js";var jC=new Rc(1e6);var HR=new _t(2),QR=new _t(3),ZR=new _t(5),Vo=new _t(10),$R=new _t(100),jR=new _t(1e3),JR=new _t(1e4);function Go(l){return Vo.pow(ge(l))}function Ci(l,e,t){return l.mul(e).add(t).sub(new _t(1)).div(t)}function vo(l,e=1,t=[]){let n=[...l];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var ze=new j(0);function Vt(l,e){var n,o,i,r,a;let t=(n=l.extensions)==null?void 0:n.feeConfig;if(!!t)return{transferFeeConfigAuthority:Z.default,withdrawWithheldAuthority:Z.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((i=(o=t.olderTransferFee.epoch)!=null?o:e)!=null?i:0),maximumFee:BigInt(t.olderTransferFee.maximumFee),transferFeeBasisPoints:t.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((a=(r=t.newerTransferFee.epoch)!=null?r:e)!=null?a:0),maximumFee:BigInt(t.newerTransferFee.maximumFee),transferFeeBasisPoints:t.newerTransferFee.transferFeeBasisPoints}}}function No(l){return l.programId?new Z(l.programId):be}var Ro=class extends je{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Ae));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ge(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[rn({tokenAccount:r[u].publicKey,destination:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[rn({tokenAccount:r[u].publicKey,destination:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await ao({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,s=e.amountOut,f=u.amount.token.mint.equals(Ae),d=s.amount.token.mint.equals(Ae),p=u.amount.token.mint,g=s.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?bn:be,mint:p,notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:f?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let P;if(e.routeType==="route"&&!d)P=this.scope.account.getAssociatedTokenAccount(g,s.amount.token.isToken2022?bn:be);else{let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:s.amount.token.isToken2022?bn:be,mint:g,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});P=A,k&&c.addInstruction(k)}d&&c.addInstruction({endInstructions:[rn({owner:this.scope.ownerPubKey,destination:this.scope.ownerPubKey,tokenAccount:P,programId:be})],endInstructionTypes:[$.CloseAccount]});let w;if(e.routeType==="route"){let A=e.middleToken;w=this.scope.account.getAssociatedTokenAccount(A.mint,A.isToken2022?bn:be)}let B=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),I=ca({routeProgram:i,inputMint:p,swapInfo:E(_({},e),{poolInfo:[...e.poolInfoList],poolKey:B,outputMint:g}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:w,destinationToken:P}});if(e.feeConfig!==void 0){let A=this.createTxBuilder(),k=u.amount.token.isToken2022?Lc(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],bn):ya(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());A.addInstruction({instructions:[k],instructionTypes:[$.TransferAmount]}),A.addInstruction(I);let{transactions:T}=r===0?await A.sizeCheckBuildV0():await A.sizeCheckBuild();T.length<2&&c.addInstruction({instructions:[ya(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[$.TransferAmount]})}return c.addInstruction(I),r===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:I.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:I.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:c=new j(0),shareFeeReceiver:u,launchPlatformInfo:s,slot:f,mintInfo:d,epochInfo:p,ownerInfo:g={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:P,blockTimestamp:w}){let B=(g==null?void 0:g.feePayer)||this.scope.ownerPubKey,I=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:A,clmmComputeAmount:{maxClmmAmountIn:k,clmmAmountOut:T,remainingAccounts:K},launchPoolInfo:S,launchAuthProgramId:x,launchSwapInfo:V,launchMintProgramB:F,outAmount:N,minOutAmount:q}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:I,shareFeeRate:c,launchPlatformInfo:s,slot:f,mintInfo:d,blockTimestamp:w}),W=e.toString()===A.poolInfo.mintA.address,X=g.useSOLBalance&&A.poolInfo.mintA.address===Ae.toBase58(),G=g.useSOLBalance&&A.poolInfo.mintB.address===Ae.toBase58(),oe={},ye;!r||r.equals(new se(0))?ye=W?Ye.add(new j(1)):He.sub(new j(1)):ye=Q.priceToSqrtPriceX64(r,A.poolInfo.mintA.decimals,A.poolInfo.mintB.decimals);let pe=this.createTxBuilder(B),[ke,me]=[new Z(A.poolInfo.mintA.address),new Z(A.poolInfo.mintB.address)],[ee,ve]=[new Z(A.poolInfo.mintA.programId),new Z(A.poolInfo.mintB.programId)],Ee=this.scope.account.getAssociatedTokenAccount(ke,ee),Xe=this.scope.account.getAssociatedTokenAccount(me,ve);pe.addInstruction({instructions:[gn(this.scope.ownerPubKey,Ee,this.scope.ownerPubKey,ke,ee),gn(this.scope.ownerPubKey,Xe,this.scope.ownerPubKey,me,ve)]}),(W&&X||!W&&G)&&pe.addInstruction({instructions:[fa.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:W?Ee:Xe,lamports:BigInt(k.toString())}),ba(W?Ee:Xe)]}),oe[A.poolInfo.mintA.address]=Ee,oe[A.poolInfo.mintB.address]=Xe,(!Ee||!Xe)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:Ee,ownerTokenAccountB:Xe}),pe.addInstruction(n?dt.makeSwapBaseOutInstructions({poolInfo:A.poolInfo,poolKeys:A.poolKeys,observationId:A.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:Ee,tokenAccountB:Xe},outputMint:W?me:ke,amountOut:T,amountInMax:k,sqrtPriceLimitX64:ye,remainingAccounts:K}):dt.makeSwapBaseInInstructions({poolInfo:A.poolInfo,poolKeys:A.poolKeys,observationId:A.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:Ee,tokenAccountB:Xe},inputMint:new Z(e),amountIn:t,amountOutMin:T,sqrtPriceLimitX64:ye,remainingAccounts:K}));let Et=Co(S.mintProgramFlag),Ht=this.scope.account.getAssociatedTokenAccount(S.mintA,Et),Pn=oe[S.mintB.toBase58()];if(pe.addInstruction({instructions:[gn(this.scope.ownerPubKey,Ht,this.scope.ownerPubKey,S.mintA,Et)]}),!Pn){let Qt=S.mintB.equals(Ae),{account:ga,instructionParams:Ei}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F,mint:S.mintB,notUseTokenAccount:Qt,owner:this.scope.ownerPubKey,skipCloseAccount:!Qt,createInfo:Qt?{payer:this.scope.ownerPubKey,amount:T}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Pn=ga,Ei&&pe.addInstruction(Ei)}return pe.addInstruction({instructions:[ho(S.programId,this.scope.ownerPubKey,x,S.configId,S.platformId,new Z(i),Ht,Pn,S.vaultA,S.vaultB,S.mintA,S.mintB,Et,F,Vn(S.programId,S.platformId,S.mintB).publicKey,En(S.programId,S.creator,S.mintB).publicKey,V.amountB.lt(T)?V.amountB:T,q,c,u)]}),pe.addCustomComputeBudget(b),pe.versionBuild({txVersion:P,extInfo:{routes:[{mint:new Z(e),amount:n?k:t,decimal:A.poolInfo[W?"mintA":"mintB"].decimals},{mint:W?me:ke,amount:T,decimal:A.poolInfo[W?"mintB":"mintA"].decimals},{mint:S.mintA,amount:N,decimal:S.mintDecimalsA}],outAmount:N,minOutAmount:q}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new j(0),clmmPoolData:u,launchPoolInfo:s,launchPlatformInfo:f,slot:d,mintInfo:p,blockTimestamp:g}){var G,oe;let y=r>0?new se(r).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():r,b=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==b.poolInfo.mintA.address&&e.toString()!==b.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let P=e.toString()===b.poolInfo.mintA.address,w=b.poolInfo[P?"mintB":"mintA"],B=s;if(B||(B=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(i)})),w.address!==B.mintB.toBase58())throw new Error(`clmm swap mint(${w.address}) != launch pool mintB(${B.mintB.toBase58()})`);let I=n?await Qe.computeAmountIn({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountOut:t,baseMint:new Z(b.poolInfo[P?"mintB":"mintA"].address),slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:g}):await Qe.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickarrayBitmapExtension:b.computePoolInfo.exBitmapInfo,tickArrayCache:b.tickData[o.toString()],amountIn:t,tokenOut:w,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:g}),A=f;if(!A){let ye=await this.scope.connection.getAccountInfo(B.platformId);A=yn.decode(ye.data)}let k=p!=null?p:await this.scope.token.getTokenInfo(B.mintA),T=fn(B.programId).publicKey,K=Vt(k,a==null?void 0:a.epoch),S=No(w),x=Vt(w,a==null?void 0:a.epoch),V=n?t:I.minAmountOut.amount.raw,F=Bt.buyExactIn({poolInfo:B,amountB:V,protocolFeeRate:B.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:B.configInfo.curveType,shareFeeRate:c,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:K,transferFeeConfigB:x,slot:d!=null?d:await this.scope.connection.getSlot()}),N=F.amountA.amount.sub((G=F.amountA.fee)!=null?G:new j(0)),q=new se(N.toString()),W=new j(1e4),X=y?new se(W.sub(new j(y*1e4)).toNumber()/W.toNumber()).clampedTo(0,1):new se(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:n?I.maxAmountIn.amount:t,clmmAmountOut:V,remainingAccounts:I.remainingAccounts},clmmComputeInfo:I,launchPoolInfo:B,launchAuthProgramId:T,launchMintTransferFeeConfig:K,launchMintProgramB:S,launchMintTransferFeeConfigB:x,launchSwapInfo:F,outAmount:F.amountA.amount.sub((oe=F.amountA.fee)!=null?oe:new j(0)),minOutAmount:new j(q.mul(X).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new j(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:s,txVersion:f,blockTimestamp:d}){let p=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,g=await this.scope.fetchEpochInfo(),{clmmPoolData:y,clmmComputeAmount:{remainingAccounts:b},launchPoolInfo:P,launchAuthProgramId:w,launchSwapInfo:B,launchMintProgramB:I,minLaunchOutAmount:A,outAmount:k,minOutAmount:T}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:g,shareFeeRate:r,blockTimestamp:d}),K=this.createTxBuilder(p),S={},x=Co(P.mintProgramFlag),{account:V}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:P.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!V)throw new Error(`do not have launch mint(${P.mintA.toString()}) token account`);let F=P.mintB.equals(Ae),{account:N,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I,mint:P.mintB,notUseTokenAccount:F,owner:this.scope.ownerPubKey,skipCloseAccount:!F,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(q&&K.addInstruction(q),!N)throw new Error(`do not have launch mint(${P.mintA.toString()}) token account`);S[P.mintB.toBase58()]=N,K.addInstruction({instructions:[vi(P.programId,this.scope.ownerPubKey,w,P.configId,P.platformId,new Z(n),V,N,P.vaultA,P.vaultB,P.mintA,P.mintB,x,I,Vn(P.programId,P.platformId,P.mintB).publicKey,En(P.programId,P.creator,P.mintB).publicKey,B.amountA.amount.lt(e)?B.amountA.amount:e,A,r,a)]});let W=P.mintB.toString()===y.poolInfo.mintA.address,X=c.useSOLBalance&&y.poolInfo.mintA.address===Ae.toBase58(),G=c.useSOLBalance&&y.poolInfo.mintB.address===Ae.toBase58(),oe;!o||o.equals(new se(0))?oe=W?Ye.add(new j(1)):He.sub(new j(1)):oe=Q.priceToSqrtPriceX64(o,y.poolInfo.mintA.decimals,y.poolInfo.mintB.decimals);let[ye,pe]=[new Z(y.poolInfo.mintA.address),new Z(y.poolInfo.mintB.address)],[ke,me]=[new Z(y.poolInfo.mintA.programId),new Z(y.poolInfo.mintB.programId)],ee=X?void 0:this.scope.account.getAssociatedTokenAccount(ye,ke),ve=G?void 0:this.scope.account.getAssociatedTokenAccount(pe,me);if(!ee){let{account:Ee,instructionParams:Xe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ke,mint:ye,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:W?e:0},associatedOnly:!1,checkCreateATAOwner:u});ee=Ee,Xe&&K.addInstruction(Xe)}if(!ve){let{account:Ee,instructionParams:Xe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:me,mint:pe,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:W?0:e},associatedOnly:!1,checkCreateATAOwner:u});ve=Ee,Xe&&K.addInstruction(Xe)}return S[y.poolInfo.mintA.address]=ee,S[y.poolInfo.mintB.address]=ve,(!ee||!ve)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ee,ownerTokenAccountB:ve}),K.addInstruction(dt.makeSwapBaseInInstructions({poolInfo:y.poolInfo,poolKeys:y.poolKeys,observationId:y.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ee,tokenAccountB:ve},inputMint:new Z(y.poolKeys[W?"mintA":"mintB"].address),amountIn:A,amountOutMin:T,sqrtPriceLimitX64:oe,remainingAccounts:b})),K.addCustomComputeBudget(s),K.versionBuild({txVersion:f,extInfo:{routes:[{mint:P.mintA,amount:e,decimal:P.mintDecimalsA},{mint:P.mintB,amount:A,decimal:P.mintDecimalsB},{mint:new Z(y.poolKeys[W?"mintB":"mintA"].address),amount:k,decimal:y.poolKeys[W?"mintB":"mintA"].decimals}],outAmount:k,minOutAmount:T}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new j(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u,blockTimestamp:s}){let f=o>0?new se(o).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():o,d=c;d||(d=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(n)}));let p=d.mintB,g=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(p.toString()!==g.poolInfo.mintA.address&&p.toString()!==g.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=p.toString()===g.poolInfo.mintA.address,b=g.poolInfo[y?"mintB":"mintA"],P=g.poolInfo[y?"mintA":"mintB"],w=u;if(!w){let W=await this.scope.connection.getAccountInfo(d.platformId);w=yn.decode(W.data)}let B=await this.scope.token.getTokenInfo(d.mintA),I=fn(d.programId).publicKey,A=Vt(B,i==null?void 0:i.epoch),k=No(P),T=Vt(P,i==null?void 0:i.epoch),K=Bt.sellExactIn({poolInfo:d,amountA:e,protocolFeeRate:d.configInfo.tradeFeeRate,platformFeeRate:w.feeRate,curveType:d.configInfo.curveType,shareFeeRate:r,creatorFeeRate:w.creatorFeeRate,transferFeeConfigA:A,transferFeeConfigB:T,slot:await this.scope.connection.getSlot()}),S=K.amountB,x=new se(S.toString()),V=new j(1e4),F=f?new se(V.sub(new j(f*1e4)).toNumber()/V.toNumber()).clampedTo(0,1):new se(1),N=new j(x.mul(F).toFixed(0)),q=await Qe.computeAmountOutFormat({poolInfo:g.computePoolInfo,tickarrayBitmapExtension:g.computePoolInfo.exBitmapInfo,tickArrayCache:g.tickData[t.toString()],amountIn:N,tokenOut:b,slippage:f,epochInfo:i!=null?i:await this.scope.fetchEpochInfo(),blockTimestamp:s});return{clmmPoolData:g,clmmComputeAmount:q,launchPoolInfo:d,launchAuthProgramId:I,launchMintTransferFeeConfig:A,launchMintProgramB:k,launchMintTransferFeeConfigB:T,launchSwapInfo:K,minLaunchOutAmount:N,outAmount:q.amountOut.amount.raw,minOutAmount:q.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:i,slippage:r=.01,shareFeeRate:a=new j(0),shareFeeReceiver:c,launchPlatformInfo:u,slot:s,mintInfo:f,epochInfo:d,ownerInfo:p={useSOLBalance:!0},checkCreateATAOwner:g=!1,computeBudgetConfig:y,txVersion:b}){let P=(p==null?void 0:p.feePayer)||this.scope.ownerPubKey,w=d!=null?d:await this.scope.fetchEpochInfo(),{computePoolInfo:B,poolKeys:I}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:A,cpmmPoolData:k,launchPoolInfo:T,launchAuthProgramId:K,launchSwapInfo:S,launchMintProgramB:x,outAmount:V,minOutAmount:F}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:B,launchPoolId:o,slippage:r,epochInfo:w,shareFeeRate:a,launchPlatformInfo:u,slot:s,mintInfo:f}),N=e.toString()===k.mintA.address,q=p.useSOLBalance&&k.mintA.address===Ae.toBase58(),W=p.useSOLBalance&&k.mintB.address===Ae.toBase58(),X={},G=this.createTxBuilder(P),[oe,ye]=[new Z(k.mintA.address),new Z(k.mintB.address)],[pe,ke]=[new Z(k.mintA.programId),new Z(k.mintB.programId)],me=this.scope.account.getAssociatedTokenAccount(oe,pe),ee=this.scope.account.getAssociatedTokenAccount(ye,ke);G.addInstruction({instructions:[gn(this.scope.ownerPubKey,me,this.scope.ownerPubKey,oe,pe),gn(this.scope.ownerPubKey,ee,this.scope.ownerPubKey,ye,ke)]}),(N&&q||!N&&W)&&G.addInstruction({instructions:[fa.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?me:ee,lamports:BigInt(A.amountIn.toString())}),ba(N?me:ee)]}),X[k.mintA.address]=me,X[k.mintB.address]=ee,(!me||!ee)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:me,ownerTokenAccountB:ee});let ve=i!=null?i:I;G.addInstruction({instructions:[_n(k.programId,this.scope.ownerPubKey,new Z(ve.authority),new Z(ve.config.id),k.id,N?me:ee,N?ee:me,new Z(ve.vault[N?"A":"B"]),new Z(ve.vault[N?"B":"A"]),new Z(N?pe:ke!=null?ke:be),new Z(N?ke:pe!=null?pe:be),N?oe:ye,N?ye:oe,Li(k.programId,k.id).publicKey,t,A.swapResult.outputAmount)]});let Ee=Co(T.mintProgramFlag),Xe=this.scope.account.getAssociatedTokenAccount(T.mintA,Ee),Et=X[T.mintB.toBase58()];if(G.addInstruction({instructions:[gn(this.scope.ownerPubKey,Xe,this.scope.ownerPubKey,T.mintA,Ee)]}),!Et){let Ht=T.mintB.equals(Ae),{account:Pn,instructionParams:Qt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:T.mintB,notUseTokenAccount:Ht,owner:this.scope.ownerPubKey,skipCloseAccount:!Ht,createInfo:Ht?{payer:this.scope.ownerPubKey,amount:A.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:g});Et=Pn,Qt&&G.addInstruction(Qt)}return G.addInstruction({instructions:[ho(T.programId,this.scope.ownerPubKey,K,T.configId,T.platformId,new Z(o),Xe,Et,T.vaultA,T.vaultB,T.mintA,T.mintB,Ee,x,Vn(T.programId,T.platformId,T.mintB).publicKey,En(T.programId,T.creator,T.mintB).publicKey,S.amountB.lt(A.minAmountOut)?S.amountB:A.minAmountOut,F,a,c)]}),G.addCustomComputeBudget(y),G.versionBuild({txVersion:b,extInfo:{routes:[{mint:new Z(e),amount:t,decimal:k[N?"mintDecimalA":"mintDecimalB"]},{mint:N?ye:oe,amount:A.minAmountOut,decimal:k[N?"mintB":"mintA"].decimals},{mint:T.mintA,amount:V,decimal:T.mintDecimalsA}],outAmount:V,minOutAmount:F}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:i,epochInfo:r,shareFeeRate:a=new j(0),cpmmPoolData:c,launchPoolInfo:u,launchPlatformInfo:s,slot:f,mintInfo:d}){var W,X;let p=i>0?new se(i).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():i,g=c!=null?c:(await this.scope.cpmm.getPoolInfoFromRpc(n.toString())).computePoolInfo;if(e.toString()!==g.mintA.address&&e.toString()!==g.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=e.toString()===g.mintA.address,b=g[y?"mintB":"mintA"],P=u;if(P||(P=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(o)})),b.address!==P.mintB.toBase58())throw new Error(`clmm swap mint(${b.address}) != launch pool mintB(${P.mintB.toBase58()})`);let w=s;if(!w){let G=await this.scope.connection.getAccountInfo(P.platformId);w=yn.decode(G.data)}let B=d!=null?d:await this.scope.token.getTokenInfo(P.mintA),I=fn(P.programId).publicKey,A=Vt(B,r==null?void 0:r.epoch),k=No(b),T=Vt(b,r==null?void 0:r.epoch),K=await this.scope.cpmm.computeSwapAmount({pool:g,amountIn:t,outputMint:new Z(b.address),slippage:p}),S=K.minAmountOut,x=Bt.buyExactIn({poolInfo:P,amountB:S,protocolFeeRate:P.configInfo.tradeFeeRate,platformFeeRate:w.feeRate,curveType:P.configInfo.curveType,shareFeeRate:a,creatorFeeRate:w.creatorFeeRate,transferFeeConfigA:A,transferFeeConfigB:T,slot:f!=null?f:await this.scope.connection.getSlot()}),V=x.amountA.amount.sub((W=x.amountA.fee)!=null?W:new j(0)),F=new se(V.toString()),N=new j(1e4),q=p?new se(N.sub(new j(p*1e4)).toNumber()/N.toNumber()).clampedTo(0,1):new se(1);return{cpmmPoolData:g,cpmmComputInfo:K,launchPoolInfo:P,launchAuthProgramId:I,launchMintTransferFeeConfig:A,launchMintProgramB:k,launchMintTransferFeeConfigB:T,launchSwapInfo:x,outAmount:x.amountA.amount.sub((X=x.amountA.fee)!=null?X:new j(0)),minOutAmount:new j(F.mul(q).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new j(0),cpmmPoolData:u,clmmPoolData:s,launchPoolInfo:f,launchPlatformInfo:d,slot:p,mintInfo:g,blockTimestamp:y}){var ee,ve;let b=r>0?new se(r).div(2).toDecimalPlaces(4,se.ROUND_DOWN).toNumber():r,P=s!=null?s:await this.scope.clmm.getPoolInfoFromRpc(n.toString());if(e.toString()!==P.poolInfo.mintA.address&&e.toString()!==P.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let w=e.toString()===P.poolInfo.mintA.address,B=P.poolInfo[w?"mintB":"mintA"],I=f;if(I||(I=await this.scope.launchpad.getRpcPoolInfo({poolId:new Z(i)})),B.address!==I.mintB.toBase58())throw new Error(`clmm swap mint(${B.address}) != launch pool mintB(${I.mintB.toBase58()})`);let A=d;if(!A){let Ee=await this.scope.connection.getAccountInfo(I.platformId);A=yn.decode(Ee.data)}let k=g!=null?g:await this.scope.token.getTokenInfo(I.mintA),T=fn(I.programId).publicKey,K=Vt(k,a==null?void 0:a.epoch),S=No(B),x=Vt(B,a==null?void 0:a.epoch),V=await Qe.computeAmountOutFormat({poolInfo:P.computePoolInfo,tickArrayCache:P.tickData[n.toString()],amountIn:t,tokenOut:B,slippage:b,epochInfo:a!=null?a:await this.scope.fetchEpochInfo(),blockTimestamp:y,tickarrayBitmapExtension:P.computePoolInfo.exBitmapInfo}),F=u!=null?u:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,N=await this.scope.cpmm.computeSwapAmount({pool:F,amountIn:t,outputMint:new Z(B.address),slippage:b}),[q,W]=[V.minAmountOut.amount.raw,N.minAmountOut],X=q.gte(W)?"clmm":"cpmm",G=q.gte(W)?q:W,oe=Bt.buyExactIn({poolInfo:I,amountB:G,protocolFeeRate:I.configInfo.tradeFeeRate,platformFeeRate:A.feeRate,curveType:I.configInfo.curveType,shareFeeRate:c,creatorFeeRate:A.creatorFeeRate,transferFeeConfigA:K,transferFeeConfigB:x,slot:p!=null?p:await this.scope.connection.getSlot()}),ye=oe.amountA.amount.sub((ee=oe.amountA.fee)!=null?ee:new j(0)),pe=new se(ye.toString()),ke=new j(1e4),me=b?new se(ke.sub(new j(b*1e4)).toNumber()/ke.toNumber()).clampedTo(0,1):new se(1);return{clmmPoolData:P,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:G,remainingAccounts:V.remainingAccounts},clmmComputeInfo:V,cpmmComputInfo:N,swapPoolType:X,launchPoolInfo:I,launchAuthProgramId:T,launchMintTransferFeeConfig:K,launchMintProgramB:S,launchMintTransferFeeConfigB:x,launchSwapInfo:oe,outAmount:oe.amountA.amount.sub((ve=oe.amountA.fee)!=null?ve:new j(0)),minOutAmount:new j(pe.mul(me).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=ui,clmm:n=ci,cpmm:o=uo}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Bi.offsetOf("baseMint"),length:64}}),r=L([h("baseMint"),h("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),c=L([h("mintA"),h("mintB")]),s=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:un.span}],dataSlice:{offset:un.offsetOf("mintA"),length:64}})).map(p=>{let g=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:g.mintA,mintB:g.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Oi.offsetOf("mintA"),length:64}})).map(p=>{let g=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:g.mintA,mintB:g.mintB}});return{clmmPools:s,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===Z.default.toString()?Ae:e,t=t.toString()===Z.default.toString()?Ae:t;let r={},a={},c={},u=[],s={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();s[p]===void 0&&(s[p]={mintProgram:be,in:[],out:[],mDecimals:0}),s[p].out.push(d)}}let f=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),r[d.id.toBase58()]=d,f.push(d)),d.mintA.equals(e)&&(s[d.mintB.toBase58()]===void 0&&(s[d.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(s[d.mintA.toBase58()]===void 0&&(s[d.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(s[d.mintB.toBase58()]===void 0&&(s[d.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(s[d.mintA.toBase58()]===void 0&&(s[d.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(s[d.mintB.toBase58()]===void 0&&(s[d.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(s[d.mintA.toBase58()]===void 0&&(s[d.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(s[d.mintB.toBase58()]===void 0&&(s[d.mintB.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(s[d.mintA.toBase58()]===void 0&&(s[d.mintA.toBase58()]={mintProgram:be,in:[],out:[],mDecimals:0}),s[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(s)){if(s[d].in.length===1&&s[d].out.length===1&&s[d].in[0].id.equals(s[d].out[0].id)){delete s[d];continue}if(s[d].in.length===0||s[d].out.length===0){delete s[d];continue}let p=s[d];for(let g of p.in)for(let y of p.out)g.version===6&&a[g.id.toString()]===void 0?a[g.id.toString()]=g:g.version===7&&c[g.id.toString()]===void 0?c[g.id.toString()]=g:(g.version===4||g.version===5)&&r[g.id.toString()]===void 0&&(r[g.id.toString()]=g),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:f,routePathDict:s,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=Ki(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new Z(y.mintA.address),programId:be,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new Z(y.mintB.address),programId:be,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,P]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(be)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(be)?(o.delete(P),a[P]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(P)}),console.log("fetching mints info, total: ",o.size);let u=await Gn({connection:this.scope.connection,mints:Array.from(o).map(y=>new Z(y))});a=_(_({},a),u);let s=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let f=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:f,mintInfos:a}),g=Object.keys(e.routePathDict).reduce((y,b)=>E(_({},y),{[b]:E(_({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(P=>r[P.id.toBase58()]||d[P.id.toBase58()]||s[P.id.toBase58()]),out:e.routePathDict[b].out.map(P=>r[P.id.toBase58()]||d[P.id.toBase58()]||s[P.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:f,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:s,routePathDict:g}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:c,epochInfo:u,feeConfig:s,blockTimestamp:f}){var w,B,I,A,k,T,K,S,x;let d=s===void 0?new j(0):e.raw.mul(new j(s.feeBps.toNumber())).div(new j(1e4)),p=e.raw.sub(d),g=new fe(e.token,p),y=s===void 0?void 0:{feeAmount:d,feeAccount:s.feeAccount},b=E(_({},t),{address:it(t.address).toString()}),P=[];for(let V of n)try{P.push(E(_({},this.computeAmountOut({itemPool:V,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:g,blockTimestamp:f})),{feeConfig:y}))}catch(F){this.logDebug("direct error",V.version,V.id.toString(),F.message)}this.logDebug("direct done");for(let[V,F]of Object.entries(o)){let N={chainId:101,address:V,programId:F.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:F.mDecimals,tags:[],extensions:{}},q=F.in.map(X=>{try{return{pool:X,data:this.computeAmountOut({itemPool:X,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:N,amountIn:g,blockTimestamp:f})}}catch(G){this.logDebug("route in error",X.version,X.id.toString(),G.message);return}}).sort((X,G)=>{var pe,ke,me,ee;let oe=X===void 0?ze:X.data.amountOut.amount.raw.sub((ke=(pe=X.data.amountOut.fee)==null?void 0:pe.raw)!=null?ke:ze),ye=G===void 0?ze:G.data.amountOut.amount.raw.sub((ee=(me=G.data.amountOut.fee)==null?void 0:me.raw)!=null?ee:ze);return oe.lt(ye)?1:-1})[0];if(q===void 0)continue;let W=new fe(co(N),q.data.amountOut.amount.raw.sub((B=(w=q.data.amountOut.fee)==null?void 0:w.raw)!=null?B:ze));for(let X of F.out)try{let G=this.computeAmountOut({itemPool:X,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:W,blockTimestamp:f});P.push(E(_({},G),{allTrade:!!(q.data.allTrade&&G.allTrade),amountIn:q.data.amountIn,amountOut:G.amountOut,minAmountOut:G.minAmountOut,currentPrice:void 0,executionPrice:new se(new $e({baseToken:q.data.amountIn.amount.token,denominator:q.data.amountIn.amount.raw,quoteToken:G.amountOut.amount.token,numerator:G.amountOut.amount.raw.sub((A=(I=G.amountOut.fee)==null?void 0:I.raw)!=null?A:ze)}).toFixed()),priceImpact:new se(q.data.priceImpact.add(G.priceImpact).toFixed()),fee:[q.data.fee[0],G.fee[0]],routeType:"route",poolInfoList:[q.pool,X],remainingAccounts:[q.data.remainingAccounts[0],G.remainingAccounts[0]],minMiddleAmountFee:(k=G.amountOut.fee)!=null&&k.raw?new fe(q.data.amountOut.amount.token,((K=(T=q.data.amountOut.fee)==null?void 0:T.raw)!=null?K:ze).add((x=(S=G.amountOut.fee)==null?void 0:S.raw)!=null?x:ze)):void 0,middleToken:q.data.amountOut.amount.token,poolReady:q.data.poolReady&&G.poolReady,poolType:[q.data.poolType,G.poolType],feeConfig:y,expirationTime:Kt(q.data.expirationTime,G.expirationTime)}))}catch(G){this.logDebug("route out error",X.version,X.id.toString(),G.message)}}return P.filter(V=>(V.allTrade||this.logDebug(`pool ${V.poolInfoList.map(F=>F.id.toString()).join(",")} filter out since not all trade`),V.allTrade)).sort((V,F)=>V.amountOut.amount.raw.sub(F.amountOut.amount.raw).gt(ze)?-1:1)}getAllRouteComputeAmountIn({outputTokenAmount:e,directPath:t,routePathDict:n,simulateCache:o,tickCache:i,slippage:r,chainTime:a,epochInfo:c,blockTimestamp:u,feeConfig:s}){var p,g,y,b,P,w,B,I,A;let f=At({address:it(e.token.mint).toBase58(),decimals:e.token.decimals,programId:e.token.isToken2022?bn.toBase58():be.toBase58(),extensions:{}}),d=[];for(let k of t)try{let T=this.computeAmountIn({itemPool:k,tickCache:i,simulateCache:o,chainTime:a,epochInfo:c,slippage:r,outputToken:f,amountOut:e.raw,blockTimestamp:u}),K=s===void 0?new j(0):T.amountIn.amount.raw.mul(new j(s.feeBps.toNumber())).div(new j(1e4));d.push(E(_({},T),{feeConfig:s===void 0?void 0:{feeAmount:K,feeAccount:s.feeAccount}}))}catch(T){this.logDebug("direct error",k.version,k.id.toString(),T.message)}this.logDebug("direct done");for(let[k,T]of Object.entries(n)){let K={chainId:101,address:k,programId:T.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:T.mDecimals,tags:[],extensions:{}},S=T.out.map(V=>{try{return{pool:V,data:this.computeAmountIn({itemPool:V,tickCache:i,simulateCache:o,chainTime:a,epochInfo:c,slippage:r,outputToken:f,amountOut:e.raw,blockTimestamp:u})}}catch(F){this.logDebug("route in error",V.version,V.id.toString(),F.message);return}}).sort((V,F)=>{var W,X,G,oe;let N=V===void 0?ze:V.data.amountIn.amount.raw.add((X=(W=V.data.amountIn.fee)==null?void 0:W.raw)!=null?X:ze),q=F===void 0?ze:F.data.amountIn.amount.raw.add((oe=(G=F.data.amountIn.fee)==null?void 0:G.raw)!=null?oe:ze);return N.lt(q)?-1:1})[0];if(S===void 0)continue;let x=new fe(co(K),S.data.amountIn.amount.raw.add((g=(p=S.data.amountIn.fee)==null?void 0:p.raw)!=null?g:ze));for(let V of T.in)try{let F=this.computeAmountIn({itemPool:V,tickCache:i,simulateCache:o,chainTime:a,epochInfo:c,slippage:r,outputToken:K,amountOut:x.raw,blockTimestamp:u}),N=s===void 0?new j(0):F.amountIn.amount.raw.mul(new j(s.feeBps.toNumber())).div(new j(1e4));d.push(E(_({},F),{allTrade:!!(F.allTrade&&S.data.allTrade),amountIn:F.amountIn,amountOut:S.data.amountOut,maxAmountIn:F.maxAmountIn,currentPrice:void 0,executionPrice:new se(new $e({baseToken:S.data.amountIn.amount.token,denominator:S.data.amountIn.amount.raw,quoteToken:F.amountOut.amount.token,numerator:F.amountOut.amount.raw.sub((b=(y=F.amountOut.fee)==null?void 0:y.raw)!=null?b:ze)}).toFixed()),priceImpact:new se(S.data.priceImpact.add(F.priceImpact).toFixed()),fee:[F.fee[0],S.data.fee[0]],routeType:"route",poolInfoList:[S.pool,V],remainingAccounts:[S.data.remainingAccounts[0],F.remainingAccounts[0]],minMiddleAmountFee:(P=F.amountOut.fee)!=null&&P.raw?new fe(S.data.amountOut.amount.token,((B=(w=S.data.amountOut.fee)==null?void 0:w.raw)!=null?B:ze).add((A=(I=F.amountOut.fee)==null?void 0:I.raw)!=null?A:ze)):void 0,middleToken:S.data.amountOut.amount.token,poolReady:S.data.poolReady&&F.poolReady,poolType:[S.data.poolType,F.poolType],feeConfig:s===void 0?void 0:{feeAmount:N,feeAccount:s.feeAccount},expirationTime:Kt(S.data.expirationTime,F.expirationTime)}))}catch(F){this.logDebug("route out error",V.version,V.id.toString(),F.message)}}return d.filter(k=>(k.allTrade||this.logDebug(`pool ${k.poolInfoList.map(T=>T.id.toString()).join(",")} filter out since not all trade`),k.allTrade)).sort((k,T)=>T.amountIn.amount.raw.sub(k.amountIn.amount.raw).gt(ze)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:c,blockTimestamp:u}){if(e.version===6){let{allTrade:s,realAmountIn:f,amountOut:d,minAmountOut:p,expirationTime:g,currentPrice:y,executionPrice:b,priceImpact:P,fee:w,remainingAccounts:B,executionPriceX64:I}=Qe.computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0,blockTimestamp:u});return{allTrade:s,amountIn:f,amountOut:d,minAmountOut:p,currentPrice:new se(y.toFixed()),executionPrice:new se(b.toFixed()),priceImpact:new se(P.toFixed()),fee:[w],remainingAccounts:[B],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[I],expirationTime:Kt(f.expirationTime,g)}}else if(e.version===7){let{allTrade:s,executionPrice:f,amountOut:d,minAmountOut:p,priceImpact:g,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:r});return{allTrade:s,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Me(E(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Me(E(_({},a),{amount:p})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:f,priceImpact:g,fee:[new fe(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:s,minAmountOut:f,currentPrice:d,executionPrice:p,priceImpact:g,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Me(E(_({},a),{amount:s})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Me(E(_({},a),{amount:f})),fee:void 0,expirationTime:void 0},currentPrice:d,executionPrice:p,priceImpact:g,fee:[new fe(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}computeAmountIn({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,amountOut:a,outputToken:c,blockTimestamp:u}){let s=c.address===e.mintB.address?e.mintA:e.mintB;if(e.version===6){let{allTrade:f,realAmountOut:d,amountIn:p,maxAmountIn:g,expirationTime:y,currentPrice:b,executionPrice:P,priceImpact:w,fee:B,remainingAccounts:I}=Qe.computeAmountIn({poolInfo:e,tickarrayBitmapExtension:e.exBitmapInfo,tickArrayCache:t[e.id.toString()],amountOut:a,baseMint:new Z(s.address),slippage:r,epochInfo:i,blockTimestamp:u});return{allTrade:f,amountOut:{amount:Me(E(_({},c),{amount:d.amount})),fee:d.fee?Me(E(_({},c),{amount:d.fee})):void 0,expirationTime:void 0},amountIn:{amount:Me(E(_({},s),{amount:p.amount})),fee:p.fee?Me(E(_({},s),{amount:p.fee})):void 0,expirationTime:p.expirationTime},maxAmountIn:{amount:Me(E(_({},s),{amount:g.amount})),fee:g.fee?Me(E(_({},s),{amount:g.fee})):void 0,expirationTime:g.expirationTime},currentPrice:new se(b.toFixed()),executionPrice:new se(P.toFixed()),priceImpact:new se(w.toFixed()),fee:[Me(E(_({},s),{amount:B}))],remainingAccounts:[I],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[Pi(P)],expirationTime:Kt(d.expirationTime,y)}}else if(e.version===7){let{allTrade:f,executionPrice:d,amountIn:p,amountOut:g,priceImpact:y,fee:b}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:c.address,amountIn:a,swapBaseIn:!1,slippage:r});return{allTrade:f,amountOut:{amount:Me(E(_({},c),{amount:g})),fee:void 0,expirationTime:void 0},amountIn:{amount:Me(E(_({},s),{amount:p})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:Me(E(_({},s),{amount:p.mul(new j((1+r)*1e4)).div(new j(1e4))})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:d,priceImpact:y,fee:[Me(E(_({},s),{amount:b}))],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountIn:f,maxAmountIn:d,currentPrice:p,executionPrice:g,priceImpact:y}=this.scope.liquidity.computeAmountIn({poolInfo:n[e.id.toString()],amountOut:a,mintIn:s.address,mintOut:c.address,slippage:r});return{amountOut:{amount:Me(E(_({},c),{amount:a})),fee:void 0,expirationTime:void 0},amountIn:{amount:Me(E(_({},s),{amount:f})),fee:void 0,expirationTime:void 0},maxAmountIn:{amount:Me(E(_({},s),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:p,executionPrice:g,priceImpact:y,fee:[Me(E(_({},s),{amount:U}))],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(s=>{t[s]=u[s]})}let i=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(s=>{n[s]=u[s]})}let r=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};r.size>0&&(await pt(this.scope.connection,Array.from(r).map(s=>({pubkey:new Z(s)})))).forEach(s=>{if(!s.accountInfo)return;let f=Vi.decode(s.accountInfo.data);a[s.pubkey.toBase58()]={marketId:s.pubkey.toString(),marketProgramId:s.accountInfo.owner.toString(),marketAuthority:Oo.getAssociatedAuthority({programId:s.accountInfo.owner,marketId:s.pubkey}).publicKey.toString(),marketBaseVault:f.baseVault.toString(),marketQuoteVault:f.quoteVault.toString(),marketBids:f.bids.toString(),marketAsks:f.asks.toString(),marketEventQueue:f.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let s=t[u.id.toString()],f={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:s.vaultA.toBase58(),B:s.vaultB.toBase58()},config:E(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(f)}else if(u.version===4){let s=n[u.id.toString()],f=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:s.baseVault.toBase58(),B:s.quoteVault.toBase58()},authority:na({programId:new Z(u.programId)}).publicKey.toString(),openOrders:s.openOrders.toBase58(),targetOrders:s.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]||{marketProgramId:s.marketProgramId.toBase58(),marketId:s.marketId.toBase58(),marketAuthority:Z.default.toBase58(),marketBaseVault:Z.default.toBase58(),marketQuoteVault:Z.default.toBase58(),marketBids:Z.default.toBase58(),marketAsks:Z.default.toBase58(),marketEventQueue:Z.default.toBase58()});c.push(f)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Ri(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:At({address:u.mintLp.toBase58(),programId:be.toBase58(),decimals:u.lpDecimals}),config:E(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};export{Ro as default,Vt as toTransferFeeConfig};
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
//# sourceMappingURL=trade.mjs.map