UNPKG

@raydium-io/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

2 lines 206 kB
var rr=Object.defineProperty,ar=Object.defineProperties;var sr=Object.getOwnPropertyDescriptors;var bn=Object.getOwnPropertySymbols;var Co=Object.prototype.hasOwnProperty,Ro=Object.prototype.propertyIsEnumerable;var xo=(y,e,t)=>e in y?rr(y,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):y[e]=t,F=(y,e)=>{for(var t in e||(e={}))Co.call(e,t)&&xo(y,t,e[t]);if(bn)for(var t of bn(e))Ro.call(e,t)&&xo(y,t,e[t]);return y},q=(y,e)=>ar(y,sr(e));var tt=(y,e)=>{var t={};for(var n in y)Co.call(y,n)&&e.indexOf(n)<0&&(t[n]=y[n]);if(y!=null&&bn)for(var n of bn(y))e.indexOf(n)<0&&Ro.call(y,n)&&(t[n]=y[n]);return t};import{PublicKey as No}from"@solana/web3.js";import{get as Lo,set as ur}from"lodash";var Gn=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}},Oo={},cr={};function ee(y){let e=Lo(Oo,y);if(!e){let t=Lo(cr,y);e=new Gn({name:y,logLevel:t}),ur(Oo,y,e)}return e}import{MINT_SIZE as lr,TOKEN_PROGRAM_ID as mr,getTransferFeeConfig as dr,unpackMint as pr}from"@solana/spl-token";var zn=ee("Raydium_accountInfo_util");async function ve(y,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=F({batchRequest:!1},t),r=Xn(e,i),a=new Array(r.length).fill([]);if(n){let s=r.map(d=>{let g=y._buildArgs([d.map(m=>m.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:g}}),c=Xn(s,10);a=(await(await Promise.all(c.map(async d=>await y._rpcBatchRequest(d)))).flat()).map(d=>(d.error&&zn.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${d.error.message}`),d.result.value.map(g=>{if(g){let{data:m,executable:p,lamports:f,owner:b,rentEpoch:w}=g;return m.length!==2&&m[1]!=="base64"&&zn.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(m[0],"base64"),executable:p,lamports:f,owner:new No(b),rentEpoch:w}}return null})))}else try{a=await Promise.all(r.map(s=>y.getMultipleAccountsInfo(s,o)))}catch(s){s instanceof Error&&zn.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${s.message}`)}return a.flat()}async function Ee(y,e,t){let n=await ve(y,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(F({},o),{accountInfo:n[i]}))}async function Yt({connection:y,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ee(y,e.map(s=>({pubkey:at(s)})),t),o={};for(let s of n){if(!s.accountInfo||s.accountInfo.data.length<lr){console.log("invalid mint account",s.pubkey.toBase58());continue}let c=pr(s.pubkey,s.accountInfo,(i=s.accountInfo)==null?void 0:i.owner);o[s.pubkey.toString()]=q(F({},c),{programId:((r=s.accountInfo)==null?void 0:r.owner)||mr,feeConfig:(a=dr(c))!=null?a:void 0})}return o[No.default.toBase58()]=o[Y.toBase58()],o}import Ct from"bn.js";import NC from"decimal.js";import kr from"big.js";import An from"bn.js";import fr from"toformat";var yr=fr,Qt=yr;import Pn from"big.js";import gr from"bn.js";import Pr from"decimal.js-light";import Zt from"bn.js";var Mo=9007199254740991;function Be(y){let e=ee("Raydium_parseBigNumberish");if(y instanceof Zt)return y;if(typeof y=="string"){if(y.match(/^-?[0-9]+$/))return new Zt(y);e.logWithError(`invalid BigNumberish string: ${y}`)}return typeof y=="number"?(y%1&&e.logWithError(`BigNumberish number underflow: ${y}`),(y>=Mo||y<=-Mo)&&e.logWithError(`BigNumberish number overflow: ${y}`),new Zt(String(y))):typeof y=="bigint"?new Zt(y.toString()):(e.error(`invalid BigNumberish value: ${y}`),new Zt(0))}var gn=ee("module/fraction"),Yn=Qt(Pn),Ht=Qt(Pr),Ar={[0]:Ht.ROUND_DOWN,[1]:Ht.ROUND_HALF_UP,[2]:Ht.ROUND_UP},wr={[0]:Pn.roundDown,[1]:Pn.roundHalfUp,[2]:Pn.roundUp},ie=class{constructor(e,t=new gr(1)){this.numerator=Be(e),this.denominator=Be(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new ie(this.denominator,this.numerator)}add(e){let t=e instanceof ie?e:new ie(Be(e));return this.denominator.eq(t.denominator)?new ie(this.numerator.add(t.numerator),this.denominator):new ie(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof ie?e:new ie(Be(e));return this.denominator.eq(t.denominator)?new ie(this.numerator.sub(t.numerator),this.denominator):new ie(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof ie?e:new ie(Be(e));return new ie(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof ie?e:new ie(Be(e));return new ie(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||gn.logWithError(`${e} is not an integer.`),e<=0&&gn.logWithError(`${e} is not positive.`),Ht.set({precision:e+1,rounding:Ar[n]});let o=new Ht(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)||gn.logWithError(`${e} is not an integer.`),e<0&&gn.logWithError(`${e} is negative.`),Yn.DP=e,Yn.RM=wr[n]||1,new Yn(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Tr=ee("Raydium_amount"),Fo=Qt(kr);function hr(y,e){let t="0",n="0";if(y.includes(".")){let o=y.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Tr.logWithError(`invalid number string, num: ${y}`)}else t=y;return[t,n.slice(0,e)||n]}var Se=class extends ie{constructor(t,n,o=!0,i){let r=new An(0),a=Qn.pow(new An(t.decimals));if(o)r=Be(n);else{let s=new An(0),c=new An(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[u,d]=hr(n.toString(),t.decimals);s=Be(u),c=Be(d)}s=s.mul(a),r=s.add(c)}super(r,a);this.logger=ee(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 Se(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Se(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 Fo.DP=this.token.decimals,new Fo(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as Ir}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as vo}from"@solana/spl-token";var wn={chainId:101,address:Ir.default.toBase58(),programId:vo.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},st={chainId:101,address:"So11111111111111111111111111111111111111112",programId:vo.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 Hn}from"@solana/web3.js";import{PublicKey as pe,SystemProgram as Vo,SYSVAR_RENT_PUBKEY as Br}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Sr}from"@solana/spl-token";function Rt({pubkey:y,isSigner:e=!1,isWritable:t=!0}){return{pubkey:y,isWritable:t,isSigner:e}}var Kr=[Rt({pubkey:Sr,isWritable:!1}),Rt({pubkey:Vo.programId,isWritable:!1}),Rt({pubkey:Br,isWritable:!1})];function Zn({publicKey:y,transformSol:e}){let t=_o(y.toString());if(t instanceof pe)return e&&t.equals(Tt)?Y:t;if(e&&t.toString()===Tt.toBase58())return Y;if(typeof t=="string"){if(t===pe.default.toBase58())return pe.default;try{return new pe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function _o(y){try{return new pe(y)}catch{return y}}var gt=new pe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Xe=new pe("SysvarRent111111111111111111111111111111111"),Fu=new pe("SysvarC1ock11111111111111111111111111111111"),Pt=new pe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),xr=new pe("Sysvar1nstructions1111111111111111111111111"),Cr=Vo.programId,vu=new pe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Vu=new pe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),_u=new pe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Eu=new pe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Du=new pe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Wu=new pe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),qu=new pe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Uu=new pe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Gu=new pe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),zu=new pe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Xu=new pe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Y=new pe("So11111111111111111111111111111111111111112"),Tt=pe.default;function at(y){return Zn({publicKey:y,transformSol:!0})}var jn=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===Tt.toBase58()||e instanceof Hn&&Tt.equals(e)){this.decimals=st.decimals,this.symbol=st.symbol,this.name=st.name,this.mint=new Hn(st.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?Hn.default:Zn({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ce=jn;Ce.WSOL=new jn(q(F({},st),{mint:st.address}));var $n=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},kn=$n;kn.SOL=new $n(wn);import Rr from"bn.js";var Eo=new ie(new Rr(100)),ut=class extends ie{toSignificant(e=5,t,n){return this.mul(Eo).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eo).toFixed(e,t,n)}};var Lr=ee("Raydium_price"),Ye=class extends ie{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new ie(Jn(n.decimals),Jn(o.decimals))}get raw(){return new ie(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Ye({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Lr.logWithError("mul token not equals");let n=super.mul(t);return new Ye({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 Fx}from"lodash";import bc from"axios";var Do={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"},Or=q(F({},Do),{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 Ec=ee("Raydium_Api");import{PublicKey as id,SystemProgram as rd}from"@solana/web3.js";import{AccountLayout as ld,createAssociatedTokenAccountIdempotentInstruction as md,TOKEN_PROGRAM_ID as dd,TOKEN_2022_PROGRAM_ID as pd}from"@solana/spl-token";import{PublicKey as Ft,sendAndConfirmTransaction as ro,SystemProgram as _r,Transaction as Jt,TransactionMessage as en,VersionedTransaction as tn}from"@solana/web3.js";import Er from"axios";import{PublicKey as eo,AddressLookupTableAccount as Nt}from"@solana/web3.js";async function to({connection:y,address:e,cluster:t="mainnet"}){let n=await ve(y,[...new Set(e.map(i=>i.toString()))].map(i=>new eo(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let s=new Nt({key:a,state:Nt.deserialize(r.data)});o[a.toString()]=s,t==="devnet"?Ot[a.toString()]=s:Lt[a.toString()]=s}return o}var Lt={},no=async y=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Lt[e])return Lt;let t=new eo(e),n=await y.getAccountInfo(t);return n&&(Lt[e]=new Nt({key:t,state:Nt.deserialize(n.data)})),Lt},Ot={},oo=async y=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ot[e])return Ot;let t=new eo(e),n=await y.getAccountInfo(t);return n&&(Ot[e]=new Nt({key:t,state:Nt.deserialize(n.data)})),Ot};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 Wo,Keypair as Uo,PublicKey as Nr,Transaction as Go,TransactionMessage as Mr,VersionedTransaction as zo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fr}from"@solana/spl-token";var qo=ee("Raydium_txUtil"),Xo=1644;function Tn(y){let e=[],t=[];return y.microLamports&&(e.push(Wo.setComputeUnitPrice({microLamports:y.microLamports})),t.push($.SetComputeUnitPrice)),y.units&&(e.push(Wo.setComputeUnitLimit({units:y.units})),t.push($.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Mt(y,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=y.getLatestBlockhash)==null?void 0:n.call(y,{commitment:t})))==null?void 0:o.blockhash}async function hn(y,e){return y.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);y.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function io(y,e){y.length<1&&qo.logWithError(`no instructions provided: ${y.toString()}`),e.length<1&&qo.logWithError(`no signers provided:, ${e.toString()}`);let t=new Go;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...y);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Xo}catch{return!1}}function ae(y,e){let[t,n]=Nr.findProgramAddressSync(y,e);return{publicKey:t,nonce:n}}function jt({instructions:y,payer:e,signers:t}){return io(y,[e,...t])}function $t({instructions:y,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uo.generate().publicKey.toString()}){let i=new Mr({payerKey:e,recentBlockhash:n,instructions:y}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new zo(i).serialize()).toString("base64").length<Xo}catch{return!1}}var vr=y=>Buffer.isBuffer(y)?y:y instanceof Uint8Array?Buffer.from(y.buffer,y.byteOffset,y.byteLength):Buffer.from(y),Vr=y=>{let e=y.serialize({requireAllSignatures:!1,verifySignatures:!1});y instanceof zo&&(e=vr(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function ht(y){let e=[];return y.forEach(t=>{t instanceof Go&&(t.recentBlockhash||(t.recentBlockhash=Fr.toBase58()),t.feePayer||(t.feePayer=Uo.generate().publicKey)),e.push(Vr(t))}),console.log("simulate tx string:",e),e}var In=2e3,Bn=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 Er.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}=Tn(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(_r.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Ft(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!==Ft.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(q(F({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new Jt;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 u;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:s}=o||{},c=i!=null?i:await Mt(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),ht([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await ro(this.connection,t,this.signers.find(g=>g.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 d=await this.signAllTransactions([t]);if(this.signers.length)for(let g of d)try{g.sign(...this.signers)}catch{}return{txId:s?"":await this.connection.sendRawTransaction(d[0].serialize(),{skipPreflight:r}),signedTx:d[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(u=>u.transaction.instructions.length>0),r=[o,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],s=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(u=>{u.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:s,execute:async u=>{var w;let{sequentially:d,onTxUpdate:g,skipTxCount:m=0,recentBlockHash:p,skipPreflight:f=!0}=u||{},b=p!=null?p:await Mt(this.connection,this.blockhashCommitment);if((w=this.owner)!=null&&w.isKeyPair){if(d){let A=[],T=0;for(let I of r){if(++T,T<=m)continue;let P=await ro(this.connection,I,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(P)}return{txIds:A,signedTxs:r}}return{txIds:await await Promise.all(r.map(async A=>(A.recentBlockhash=b,await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((I,P)=>(I.recentBlockhash=b,a[P].length&&I.sign(...a[P]),I));ht(A);let T=await this.signAllTransactions(A);if(d){let I=0,P=[],k=async()=>{if(!T[I])return;let B=await this.connection.sendRawTransaction(T[I].serialize(),{skipPreflight:f});P.push({txId:B,status:"sent",signedTx:T[I]}),g==null||g([...P]),I++;let S=!1,K=null,L=null,U=_=>{K!==null&&clearInterval(K),L!==null&&this.connection.removeSignatureListener(L);let v=P.findIndex(V=>V.txId===B);if(v>-1){if(P[v].status==="error"||P[v].status==="success")return;P[v].status=_.err?"error":"success"}g==null||g([...P]),_.err||k()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var _;if(S){clearInterval(K);return}try{let v=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(S=!0,clearInterval(K),U({err:((_=v.meta)==null?void 0:_.err)||null}),console.log("tx status from getTransaction:",B))}catch(v){S=!0,clearInterval(K),console.error("getTransaction timeout:",v,B)}},In)),L=this.connection.onSignature(B,_=>{if(S){this.connection.removeSignatureListener(L);return}S=!0,U(_)},"confirmed"),this.connection.getSignatureStatus(B)};return await k(),{txIds:P.map(B=>B.txId),signedTxs:T}}else{let I=[];for(let P=0;P<T.length;P+=1){let k=await this.connection.sendRawTransaction(T[P].serialize(),{skipPreflight:f});I.push(k)}return{txIds:I,signedTxs:T}}}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 f;let p=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=p,r=tt(p,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=F(F({},this.cluster==="devnet"?await oo(this.connection):await no(this.connection)),t),s=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let b of s)a[b]===void 0&&c.push(new Ft(b));let u=await to({connection:this.connection,address:c});for(let[b,w]of Object.entries(u))a[b]=w;let d=o?Ft.default.toBase58():i!=null?i:await Mt(this.connection,this.blockhashCommitment),g=new en({payerKey:this.feePayer,recentBlockhash:d,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new tn(g);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var I;let{skipPreflight:w=!0,sendAndConfirm:A,notSendToRpc:T}=b||{};if(ht([m]),(I=this.owner)!=null&&I.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:w});return A&&await hn(this.connection,P),{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);if(this.signers.length)for(let k of P)try{k.sign(this.signers)}catch{}return{txId:T?"":await this.connection.sendTransaction(P[0],{skipPreflight:w}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(u=>u.builder.instructions.length>0),r=[o,...i.map(u=>u.transaction)],a=[this.signers,...i.map(u=>u.signers)],s=[...this.instructionTypes,...i.map(u=>u.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(u=>{u.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(u,d)=>{u.sign(a[d])}),{builder:this,transactions:r,signers:a,instructionTypes:s,buildProps:n,execute:async u=>{var f;let{sequentially:d,onTxUpdate:g,recentBlockHash:m,skipPreflight:p=!0}=u||{};if(m&&r.forEach(b=>b.message.recentBlockhash=m),ht(r),(f=this.owner)!=null&&f.isKeyPair){if(d){let b=[];for(let w of r){let A=await this.connection.sendTransaction(w,{skipPreflight:p});await hn(this.connection,A),b.push(A)}return{txIds:b,signedTxs:r}}return{txIds:await Promise.all(r.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:p}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(d){let w=0,A=[],T=async()=>{if(!b[w])return;let I=await this.connection.sendTransaction(b[w],{skipPreflight:p});A.push({txId:I,status:"sent",signedTx:b[w]}),g==null||g([...A]),w++;let P=!1,k=null,B=null,S=K=>{k!==null&&clearInterval(k),B!==null&&this.connection.removeSignatureListener(B);let L=A.findIndex(U=>U.txId===I);if(L>-1){if(A[L].status==="error"||A[L].status==="success")return;A[L].status=K.err?"error":"success"}g==null||g([...A]),K.err||T()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var K;if(P){clearInterval(k);return}try{let L=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});L&&(P=!0,clearInterval(k),S({err:((K=L.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",I))}catch(L){P=!0,clearInterval(k),console.error("getTransaction timeout:",L,I)}},In)),B=this.connection.onSignature(I,K=>{if(P){this.connection.removeSignatureListener(B);return}P=!0,S(K)},"confirmed"),this.connection.getSignatureStatus(I)};return T(),{txIds:[],signedTxs:b}}else{let w=[];for(let A=0;A<b.length;A+=1){let T=await this.connection.sendTransaction(b[A],{skipPreflight:p});w.push(T)}return{txIds:w,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var g;let d=e||{},{splitIns:t=[],computeBudgetConfig:n}=d,o=tt(d,["splitIns","computeBudgetConfig"]),i=n?Tn(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,p)=>q(F({},m),{[p.publicKey.toBase58()]:p}),{}),a=[],s=[],c=[],u=0;if(this.allInstructions.forEach(m=>{let p=[...c,m],f=n?[...i.instructions,...p]:p,w=[...new Set(p.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat()).values()].map(A=>new Ft(A));if(m!==t[u]&&c.length<12&&(jt({instructions:f,payer:this.feePayer,signers:w})||jt({instructions:p,payer:this.feePayer,signers:w})))c.push(m);else{if(c.length===0)throw Error("item ins too big");u+=m===t[u]?1:0,jt({instructions:n?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:w})?a.push(new Jt().add(...i.instructions,...c)):a.push(new Jt().add(...c)),s.push(Array.from(new Set(c.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),c=[m]}}),c.length>0){let p=[...new Set(c.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>r[f]).filter(f=>f!==void 0);jt({instructions:n?[...i.instructions,...c]:[...c],payer:this.feePayer,signers:p.map(f=>f.publicKey)})?a.push(new Jt().add(...i.instructions,...c)):a.push(new Jt().add(...c)),s.push(p)}return a.forEach(m=>m.feePayer=this.feePayer),(g=this.owner)!=null&&g.signer&&s.forEach(m=>{m.some(p=>p.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:a,signers:s,instructionTypes:this.instructionTypes,execute:async m=>{var I;let{sequentially:p,onTxUpdate:f,skipTxCount:b=0,recentBlockHash:w,skipPreflight:A=!0}=m||{},T=w!=null?w:await Mt(this.connection,this.blockhashCommitment);if(a.forEach(async(P,k)=>{P.recentBlockhash=T,s[k].length&&P.sign(...s[k])}),ht(a),(I=this.owner)!=null&&I.isKeyPair){if(p){let P=0,k=[];for(let B of a){if(++P,P<=b){k.push("tx skipped");continue}let S=await ro(this.connection,B,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});k.push(S)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async P=>await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let P=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...P];if(p){let B=0,S=[],K=async()=>{if(!k[B])return;B<b&&(S.push({txId:"",status:"success",signedTx:k[B]}),f==null||f([...S]),B++,K());let L=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:A});S.push({txId:L,status:"sent",signedTx:k[B]}),f==null||f([...S]),B++;let U=!1,_=null,v=null,V=E=>{_!==null&&clearInterval(_),v!==null&&this.connection.removeSignatureListener(v);let H=S.findIndex(ce=>ce.txId===L);if(H>-1){if(S[H].status==="error"||S[H].status==="success")return;S[H].status=E.err?"error":"success"}f==null||f([...S]),E.err||K()};this.loopMultiTxStatus&&(_=setInterval(async()=>{var E;if(U){clearInterval(_);return}try{let H=await this.connection.getTransaction(L,{commitment:"confirmed",maxSupportedTransactionVersion:0});H&&(U=!0,clearInterval(_),V({err:((E=H.meta)==null?void 0:E.err)||null}),console.log("tx status from getTransaction:",L))}catch(H){U=!0,clearInterval(_),console.error("getTransaction timeout:",H,L)}},In)),v=this.connection.onSignature(L,E=>{if(U){this.connection.removeSignatureListener(v);return}U=!0,V(E)},"confirmed"),this.connection.getSignatureStatus(L)};return await K(),{txIds:S.map(L=>L.txId),signedTxs:k}}else{let B=[];for(let S=0;S<k.length;S+=1){let K=await this.connection.sendRawTransaction(k[S].serialize(),{skipPreflight:A});B.push(K)}return{txIds:B,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var I;let T=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=T,a=tt(T,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),s=F(F({},this.cluster==="devnet"?await oo(this.connection):await no(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let P of c)s[P]===void 0&&u.push(new Ft(P));let d=await to({connection:this.connection,address:u});for(let[P,k]of Object.entries(d))s[P]=k;let g=t?Tn(t):{instructions:[],instructionTypes:[]},m=await Mt(this.connection,this.blockhashCommitment),p=this.signers.reduce((P,k)=>q(F({},P),{[k.publicKey.toBase58()]:k}),{}),f=[],b=[],w=[],A=0;if(this.allInstructions.forEach(P=>{let k=[...w,P],B=t?[...g.instructions,...k]:k;if(P!==n[A]&&w.length<r&&($t({instructions:B,payer:this.feePayer,lookupTableAddressAccount:s})||$t({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})))w.push(P);else{if(w.length===0)throw Error("item ins too big");A+=P===n[A]?1:0;let S={};for(let K of[...new Set(c)])s[K]!==void 0&&(S[K]=s[K]);if(t&&$t({instructions:[...g.instructions,...w],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let K=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...g.instructions,...w]}).compileToV0Message(Object.values(s));f.push(new tn(K))}else{let K=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...w]}).compileToV0Message(Object.values(s));f.push(new tn(K))}b.push(Array.from(new Set(w.map(K=>K.keys.filter(L=>L.isSigner).map(L=>L.pubkey.toString())).flat())).map(K=>p[K]).filter(K=>K!==void 0)),w=[P]}}),w.length>0){let k=[...new Set(w.map(B=>B.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(B=>p[B]).filter(B=>B!==void 0);if(t&&$t({instructions:[...g.instructions,...w],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let B=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...g.instructions,...w]}).compileToV0Message(Object.values(s));f.push(new tn(B))}else{let B=new en({payerKey:this.feePayer,recentBlockhash:m,instructions:[...w]}).compileToV0Message(Object.values(s));f.push(new tn(B))}b.push(k)}return(I=this.owner)!=null&&I.signer&&b.forEach(P=>{P.some(k=>k.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),f.forEach((P,k)=>{P.sign(b[k])}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var U;let{sequentially:k,onTxUpdate:B,skipTxCount:S=0,recentBlockHash:K,skipPreflight:L=!0}=P||{};if(f.map(async(_,v)=>{b[v].length&&_.sign(b[v]),K&&(_.message.recentBlockhash=K)}),ht(f),(U=this.owner)!=null&&U.isKeyPair){if(k){let _=0,v=[];for(let V of f){if(++_,_<=S){console.log("skip tx: ",_),v.push("tx skipped");continue}let E=await this.connection.sendTransaction(V,{skipPreflight:L});await hn(this.connection,E),v.push(E)}return{txIds:v,signedTxs:f}}return{txIds:await Promise.all(f.map(async _=>await this.connection.sendTransaction(_,{skipPreflight:L}))),signedTxs:f}}if(this.signAllTransactions){let _=await this.signAllTransactions(f.slice(S,f.length)),v=[...f.slice(0,S),..._];if(k){let V=0,E=[],H=async()=>{if(!v[V])return;if(V<S){E.push({txId:"",status:"success",signedTx:v[V]}),B==null||B([...E]),V++,H();return}let ce=await this.connection.sendTransaction(v[V],{skipPreflight:L});E.push({txId:ce,status:"sent",signedTx:v[V]}),B==null||B([...E]),V++;let se=!1,de=null,bt=null,Fe=Ne=>{de!==null&&clearInterval(de),bt!==null&&this.connection.removeSignatureListener(bt);let Ie=E.findIndex(Un=>Un.txId===ce);if(Ie>-1){if(E[Ie].status==="error"||E[Ie].status==="success")return;E[Ie].status=Ne.err?"error":"success"}B==null||B([...E]),Ne.err||H()};this.loopMultiTxStatus&&(de=setInterval(async()=>{var Ne;if(se){clearInterval(de);return}try{let Ie=await this.connection.getTransaction(ce,{commitment:"confirmed",maxSupportedTransactionVersion:0});Ie&&(se=!0,clearInterval(de),Fe({err:((Ne=Ie.meta)==null?void 0:Ne.err)||null}),console.log("tx status from getTransaction:",ce))}catch(Ie){se=!0,clearInterval(de),console.error("getTransaction timeout:",Ie,ce)}},In)),bt=this.connection.onSignature(ce,Ne=>{if(se){this.connection.removeSignatureListener(bt);return}se=!0,Fe(Ne)},"confirmed"),this.connection.getSignatureStatus(ce)};return H(),{txIds:[],signedTxs:v}}else{let V=[];for(let E=0;E<v.length;E+=1){let H=await this.connection.sendTransaction(v[E],{skipPreflight:L});V.push(H)}return{txIds:V,signedTxs:v}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};var ao=(...y)=>y.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ve=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ee(t)}createTxBuilder(e){return this.scope.checkOwner(),new Bn({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(ao(e))}logInfo(...e){this.logger.info(ao(e))}logAndCreateError(...e){let t=ao(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as Fm,SystemProgram as Vm}from"@solana/web3.js";import Dm from"bn.js";import{createCloseAccountInstruction as Gm,createInitializeAccountInstruction as zm,createTransferInstruction as Xm,TOKEN_PROGRAM_ID as Ym}from"@solana/spl-token";import{Keypair as Tm,PublicKey as hm}from"@solana/web3.js";import Sm from"bn.js";import{TOKEN_PROGRAM_ID as Cm}from"@solana/spl-token";import{PublicKey as jr}from"@solana/web3.js";import jo,{isBN as $o}from"bn.js";import{bits as Dr,BitStructure as Kl,blob as Wr,Blob as xl,cstr as Cl,f32 as Rl,f32be as Ll,f64 as Ol,f64be as Nl,greedy as Ml,Layout as qr,ns64 as Fl,ns64be as vl,nu64 as Vl,nu64be as _l,offset as Ur,s16 as El,s16be as Dl,s24 as Wl,s24be as ql,s32 as Gr,s32be as Ul,s40 as Gl,s40be as zl,s48 as Xl,s48be as Yl,s8 as Ql,seq as zr,struct as Zl,Structure as Xr,u16 as Yr,u16be as Hl,u24 as jl,u24be as $l,u32 as Qr,u32be as Jl,u40 as em,u40be as tm,u48 as nm,u48be as om,u8 as Zr,UInt as Hr,union as im,Union as rm,unionLayoutDiscriminator as am,utf8 as sm}from"@solana/buffer-layout";var Sn=qr,Yo=Xr;var so=Hr;var Qo=Zr,ke=Yr;var Kn=Qr;var Te=Gr;var Zo=zr;var J=Wr;var uo=Dr,Ho=Ur;var Bt=class extends Sn{constructor(t,n,o){super(t,o);this.blob=J(t),this.signed=n}decode(t,n=0){let o=new jo(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 jo(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},xn=class extends Sn{constructor(t){super(8,t);this._lower=uo(Kn(),!1),this._upper=uo(Kn(),!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 F(F({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function N(y){return new so(1,y)}function fe(y){return new so(4,y)}function l(y){return new Bt(8,!1,y)}function z(y){return new Bt(16,!1,y)}function Jo(y){return new Bt(1,!0,y)}function vt(y){return new Bt(8,!0,y)}function ei(y){return new Bt(16,!0,y)}var nn=class extends Sn{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(y){return new nn(J(32),e=>new jr(e),e=>e.toBuffer(),y)}function ye(y){return new nn(Qo(),$r,Jr,y)}function $r(y){if(y===0)return!1;if(y===1)return!0;throw new Error("Invalid bool: "+y)}function Jr(y){return y?1:0}function ti(y,e){let t=Kn("length"),n=O([t,D(y,Ho(t,-t.span),"values")]);return new nn(n,({values:o})=>o,o=>({values:o}),e)}var co=class extends Yo{decode(e,t){return super.decode(e,t)}};function O(y,e,t){return new co(y,e,t)}function D(y,e,t){let n,o=typeof e=="number"?e:$o(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=$o(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 Zo(y,o,t)}var Vt=O([h("mint"),h("owner"),l("amount"),fe("delegateOption"),h("delegate"),N("state"),fe("isNativeOption"),l("isNative"),l("delegatedAmount"),fe("closeAuthorityOption"),h("closeAuthority")]);import{PublicKey as ng,SystemProgram as og}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as rg}from"@solana/spl-token";import{PublicKey as ta}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as na}from"@solana/spl-token";function Z(y,e,t){return ae([y.toBuffer(),(t!=null?t:na).toBuffer(),e.toBuffer()],new ta("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as X}from"@solana/web3.js";var oi=new X("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ii=new X("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),ri=new X("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),lo=new X("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Id=new X("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),oa=new X("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ai=new X("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),si=new X("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bd=new X("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ia=new X("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),At=new X("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),on=new X("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Rn=new X("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),ui=new X("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Sd=new X("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ra=new X("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),mo=new X("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),aa=new X("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Kd=new X("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sa=new X("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ua=new X("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),ca=new X("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),xd=new X("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Cd=new X("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Rd=new X("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Ld=new X("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Od=new X("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX");var wt={OPEN_BOOK_PROGRAM:new X("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new X("Ray1111111111111111111111111111111111111111"),AMM_V4:new X("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new X("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new X("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new X("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new X("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new X("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new X("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new X("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new X("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new X("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:X.default,Router:new X("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new X("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new X("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new X("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new X("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new X("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new X("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new X("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new X("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new X("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new X("Ray1111111111111111111111111111111111111111")};import yg from"decimal.js";import ne from"bn.js";var ue=new ne(1).shln(64),_t=64,la=new ne(1).shln(128),lt=new ne(1).shln(64).subn(1),ma=new ne(1).shln(128).subn(1),Qe=-443636,Ze=443636,He=new ne("4295048016"),je=new ne("79226673521066979257578248091"),ci=new ne("59543866431248"),li=new ne("184467440737095516"),mi=new ne("15793534762490258745"),di=16,Ln=512,De=60,Dd=new ne("18446743708227953217"),pi=[{bit:0,factor:new ne("fffcb933bd6fb800",16)},{bit:1,factor:new ne("fff97272373d4000",16)},{bit:2,factor:new ne("fff2e50f5f657000",16)},{bit:3,factor:new ne("ffe5caca7e10f000",16)},{bit:4,factor:new ne("ffcb9843d60f7000",16)},{bit:5,factor:new ne("ff973b41fa98e800",16)},{bit:6,factor:new ne("ff2ea16466c9b000",16)},{bit:7,factor:new ne("fe5dee046a9a3800",16)},{bit:8,factor:new ne("fcbe86c7900bb000",16)},{bit:9,factor:new ne("f987a7253ac65800",16)},{bit:10,factor:new ne("f3392b0822bb6000",16)},{bit:11,factor:new ne("e7159475a2caf000",16)},{bit:12,factor:new ne("d097f3bdfd2f2000",16)},{bit:13,factor:new ne("a9f746462d9f8000",16)},{bit:14,factor:new ne("70d869a156f31c00",16)},{bit:15,factor:new ne("31be135f97ed3200",16)},{bit:16,factor:new ne("9aa508b5b85a500",16)},{bit:17,factor:new ne("5d6af8dedc582c",16)},{bit:18,factor:new ne("2216e584f5fa",16)}],mt=1e6;var On=1e5,rn=1e4,fi=1e4,yi=1e5;var an=3,bi=100;var gi=10,Pi=100,Et=14;var W=new ne(0),$e=new ne(1),Wd=new ne(-1),Nn={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]};var qd=new ne("18446744073700000000");var po=O([J(8),N("bump"),ke("index"),h("owner"),fe("protocolFeeRate"),fe("tradeFeeRate"),ke("tickSpacing"),fe("fundFeeRate"),D(fe(),1),h("fundOwner"),D(l(),3)]),da=O([fe("blockTimestamp"),vt("tickCumulative"),D(l(),4)]),Ai=O([J(8),ye("initialized"),l("recentEpoch"),ke("observationIndex"),h("poolId"),D(da,bi,"observations"),D(l(),4)]),pa=O([ke("filterPeriod"),ke("decayPeriod"),ke("reductionFactor"),fe("dynamicFeeControl"),fe("maxVolatilityAccumulator"),Te("tickSpacingIndexReference"),fe("volatilityReference"),fe("volatilityAccumulator"),l("lastUpdateTimestamp"),D(N(),46)]),fa=O([N("state"),l("openTime"),l("endTime"),l("lastUpdateTime"),z("emissionsPerSecondX64"),l("totalEmissioned"),l("claimed"),h("mint"),h("vault"),h("creator"),z("growthGlobalX64")]),sn=O([J(8),N("bump"),h("configId"),h("creator"),h("mintA"),h("mintB"),h("vaultA"),h("vaultB"),h("observationId"),N("mintDecimalsA"),N("mintDecimalsB"),ke("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),Te("tickCurrent"),fe(),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),l("protocolFeesTokenA"),l("protocolFeesTokenB"),D(z(),4),N("status"),N("feeOn"),J(6),D(fa,an,"rewardInfos"),J(8*16,"tickArrayBitmap"),D(l(),4),l("fundFeesTokenA"),l("fundFeesTokenB"),l("startTime"),l("recentEpoch"),pa.replicate("dynamicFeeInfo"),D(l(),46)]),ya=O([z("growthInsideLastX64"),l("rewardAmountOwed")]),Mn=O([J(8),N("bump"),h("nftMint"),h("poolId"),Te("tickLower"),Te("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),l("tokenFeesOwedA"),l("tokenFeesOwedB"),D(ya,an,"rewardInfos"),l("recentEpoch"),D(l(),7)]),Xd=O([J(8),N("bump"),h("poolId"),Te("tickLower"),Te("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),l("tokenFeesOwedA"),l("tokenFeesOwedB"),D(z(),an,"rewardGrowthInside"),l("recentEpoch"),D(l(),7)]),ba=O([Te("tick"),ei("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),D(z(),an,"rewardGrowthsOutsideX64"),l("orderPhase"),l("ordersAmount"),l("partFilledOrdersRemaining"),z("unfilledRatioX64"),D(fe(),3)]),Dt=O([J(8),h("poolId"),Te("startTickIndex"),D(ba,De,"ticks"),N("initializedTickCount"),l("recentEpoch"),D(N(),107)]),wi=O([J(8),N("bump"),D(h(),gi,"operationOwners"),D(h(),Pi,"whitelistMints")]),St=O([J(8),h("poolId"),h("owner"),Te("tick"),ye("zeroForOne"),l("orderPhase"),l("totalAmount"),l("filledAmount"),l("settleBase"),l("settleOutput"),l("openTime"),z("unfilledRatioX64"),D(l(),4)]),Fn=O([J(8),h("poolId"),J(8*8*Et,"positiveTickArrayBitmap"),J(8*8*Et,"negativeTickArrayBitmap")]),Yd=O([J(8),ke("index"),ke("filterPeriod"),ke("decayPeriod"),ke("reductionFactor"),fe("dynamicFeeControl"),fe("maxVolatilityAccumulator"),D(l(),8)]),ki=O([J(8),h("wallet"),N("nonceIndex"),l("orderNonce"),D(l(),4)]),Qd=O([l(),N("bump"),h("owner"),h("poolId"),h("positionId"),h("nftAccount"),D(l(),8)]),Ti=O([J(8),N("bump"),h("lockOwner"),h("poolId"),h("positionId"),h("nftAccount"),h("lockNftMint"),l("recentEpoch"),D(l(),8)]);import{ASSOCIATED_TOKEN_PROGRAM_ID as To,TOKEN_2022_PROGRAM_ID as Ae,TOKEN_PROGRAM_ID as re}from"@solana/spl-token";import{Keypair as _n,PublicKey as M,SystemProgram as ct,TransactionInstruction as ge}from"@solana/web3.js";import En from"bn.js";import ga from"bn.js";function fo(y){let e=Buffer.alloc(2);return e.writeUInt16LE(y),e}function yo(y){let e=Buffer.alloc(4);return e.writeInt32LE(y),e}function hi(y){let e=Buffer.alloc(4);return e.writeInt32BE(y),e}function Ii(y){return(typeof y=="number"||typeof y=="bigint")&&(y=new ga(y.toString())),y.toArrayLike(Buffer,"be",8)}function Bi(y){let e=new ArrayBuffer(1);return new DataView(e).setUint8(0,y),new Uint8Array(e)}var op=Buffer.from("amm_config","utf8"),bo=Buffer.from("pool","utf8"),Si=Buffer.from("pool_vault","utf8"),Pa=Buffer.from("pool_reward_vault","utf8"),Ki=Buffer.from("position","utf8"),Aa=Buffer.from("tick_array","utf8"),wa=Buffer.from("operation","utf8"),ka=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Ta=Buffer.from("observation","utf8"),ha=Buffer.from("support_mint","utf8"),ip=Buffer.from("dynamic_fee_config","utf8"),Ia=Buffer.from("permission","utf8");function xi(y,e,t,n){return ae([bo,e.toBuffer(),t.toBuffer(),n.toBuffer()],y)}function Ci(y,e){return ae([Ia,e.toBuffer()],y)}function Ri(y,e,t,n,o){return ae([bo,e.toBuffer(),t.toBuffer(),n.toBuffer(),fo(o)],y)}function Ue(y,e,t){return ae([Si,e.toBuffer(),t.toBuffer()],y)}function Li(y,e,t){return ae([Pa,e.toBuffer(),t.toBuffer()],y)}function oe(y,e,t){return ae([Aa,e.toBuffer(),hi(t)],y)}function nt(y,e,t,n){return ae([Ki,e.toBuffer(),yo(t),yo(n)],y)}function Ge(y,e){return ae([Ki,e.toBuffer()],y)}function Kt(y){return ae([Buffer.from("metadata","utf8"),Pt.toBuffer(),y.toBuffer()],Pt)}function un(y){return ae([wa],y)}function le(y,e){return ae([ka,e.toBuffer()],y)}function go(y,e){return ae([Ta,e.toBuffer()],y)}function xt(y,e){return ae([ha,e.toBuffer()],y)}function Oi(y,e,t,n){return ae([e.toBuffer(),t.toBuffer(),Ii(n)],y)}function Ni(y,e,t){return ae([e.toBuffer(),Bi(t)],y)}var Mi=Buffer.from("locked_position","utf8");function Po(y,e){return ae([Mi,e.toBuffer()],y)}function Wt(y,e){return ae([Mi,e.toBuffer()],y)}import{sha256 as xa}from"js-sha256";import Fi from"bn.js";import Ao from"decimal.js";function be(y,e,t){if(t.isZero())throw new Error("Division by zero");return y.mul(e).div(t)}function me(y,e,t){if(t.isZero())throw new Error("Division by zero");let n=y.mul(e),o=n.div(t);return n.mod(t).isZero()?o:o.addn(1)}function vn(y,e){return y.div(e).add(y.mod(e).isZero()?W:$e)}var cp=new Fi(1).shln(256).subn(1);function vi(y){return y.isZero()?-1:y.bitLength()-1}function Vi(y,e){return new Ao(y.toString()).div(Ao.pow(2,64)).toDecimalPlaces(e)}function qt(y){return new Fi(y.mul(Ao.pow(2,64)).floor().toFixed())}import Ba from"bn.js";import Ke from"bn.js";import Ut from"decimal.js";var dt=class{static scanLinearBitmap({bitmap:e,tickSpacing:t,offset:n,checkInfo:o}){let i=[],r=e.length*8,a=0,s=r-1;if(o){let d=o.tick/(t*De)-n;o.valueType==="gte"?a=Math.max(0,Math.ceil(d)):s=Math.min(r-1,Math.floor(d))}if(a>s)return i;let c=Math.floor(a/8),u=Math.floor(s/8);for(let d=c;d<=u;d++){if(!e[d])continue;let g=d===c?a%8:0,m=d===u?s%8:7;for(let p=g;p<=m;p++)e[d]&1<<p&&i.push((d*8+p+n)*t*De)}return i}static findPoolBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/De/t);if(n.valueType==="lte"&&o<-512)return[];if(n.valueType==="gte"&&o>512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:-Ln,checkInfo:n})}static findPositiveTickArrayBitmap({bitmap:e,tickSpacing:t,checkInfo:n}){if(n){let o=Math.floor(n.tick/De/t);if(n.valueType==="lte"&&o<512)return[]}return this.scanLinearBitmap({bitmap:e,tickSpacing:t,offset:Ln,checkInfo:n})}static findNegativeTickArrayBitmap({bitmap:e,tickSpacing:t,count:n,checkInfo:o}){let i=[];if(o){let s=Math.floor(o.tick/De/t);if(o.valueType==="gte"&&s>=-512)return i}let r=(o==null?void 0:o.valueType)==="lte"?Math.floor(o.tick/(De*t))+7680:1/0,a=(o==null?void 0:o.valueType)==="gte"?Math.ceil(o.tick/(De*t))+7680:0;e:for(let s=0;s<Et;s++){let c=Et-1-s;for(let u=0;u<512;u++){let d=s*512+u;if(d>r)break e;if(d<a)continue;let g=c*64+Math.floor(u/8);if(!e[g]){u=Math.floor(u/8)*8+7;continue}if(e[g]&1<<u%8){let m=(s*512+u-7680)*De*t;if(i.push(m),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=Q.getTickArrayStartIndex(o.tickArrayCurrent,e),{count:r}=o;if(o.type==="oneForZero"){let a={tick:i,valueType:"gte"},s=[()=>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(s,r)}if(o.type==="zeroForOne"){let a={tick:i,valueType:"lte"},s=[()=>this.findPositiveTickArrayBitmap({tickSpacing:e,bitmap:n.positiveTickArrayBitmap,checkInfo:a}).sort((c,u)=>u-c),()=>this.findPoolBitmap({tickSpacing:e,bitmap:t,checkInfo:a}).sort((c,u)=>u-c),()=>this.findNegativeTickArrayBitmap({tickSpacing:e,bitmap:n.negativeTickArrayBitmap,checkInfo:a}).sort((c,u)=>u-c)];return this.collectUntil(s,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=>oe(e.programId,e.poolId,t).publicKey)}static maxTickInTickarrayBitmap(e){return e*De*Ln}},Q=class{static firstinitializedTick({data:e,zeroForOne:t}){if(t){for(let n=e.ticks.length-1;n>=0;n--)if(G.isInitialized({data:e.ticks[n]}))return e.ticks[n]}else for(let n=0;n<e.ticks.length;n++)if(G.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(G.isInitialized({data:e.ticks[a]}))return e.ticks[a]}else for(let a=r+1;a<De;a++)if(G.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 De*e}static getMinTick(e){return Math.ceil(Qe/e)*e}static getMaxTick(e){return Math.floor(Ze/e)*e}},G=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>=Qe&&e<=Ze}static checkTick(e){if(!this.isValidTick(e))throw new Error(`Tick ${e} is out of range [${Qe}, ${Ze}]`)}static getSqrtPriceAtTick(e){this.checkTick(e);let t=Math.abs(e),n=ue.clone();for(let{bit:o,factor:i}of pi)(t&1<<o)!==0&&(n=be(n,i,ue));return e>0&&(n=be(ue,ue,n)),n}static getLimitOrderOutput({amountIn:e,tick:t,zeroForOne:n}){if(n){let o=G.getPriceAtTick(t,!1);return be(e,o,ue)}else{let o=G.getPriceAtTick(t,!0);return be(e,ue,o)}}static getLimitOrderInput({amountOut:e,tick:t,zeroForOne:n}){if(n){let o=G.getPriceAtTick(t,!0);return me(e,o,ue)}else{let o=G.getPriceAtTick(t,!1);return me(e,ue,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:W,amountOut:W,ammFeeAmount:W},s=this.limitOrderUnfilledAmount({tick:e});if(t.isZero()||s.isZero())return a;if(o)r?(a.ammFeeAmount=me(t,new Ke(i),Je),a.amountIn=t.sub(a.ammFeeAmount)):a.amountIn=t,a.amountOut=this.getLimitOrderOutput({amountIn:a.amountIn,tick:e.tick,zeroForOne:n}),a.amountOut.gt(s)&&(a.amountOut=s,a.amountIn=this.getLimitOrderInput({amountOut:s,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=me(a.amountIn,new Ke(i),Je.sub(new Ke(i)))));else{let d=Ke.min(t,s);r?a.amountOut=d:a.amountOut=Ke.min(me(d,Je,Je.sub(new Ke(i))),s),a.amountIn=this.getLimitOrderInput({amountOut:a.amountOut,tick:e.tick,zeroForOne:!n}),r&&(a.ammFeeAmount=me(a.amountIn,new Ke(i),Je.sub(new Ke(i))))}let c=W;e.partFilledOrdersRemaining.gt(W)&&(c=Ke.min(e.partFilledOrdersRemaining,a.amountOut),c.gt(W)&&(e.unfilledRatioX64=be(e.unfilledRatioX64,e.partFilledOrdersRemaining.sub(c),e.partFilledOrdersRemaining)),e.partFilledOrdersRemaining=e.partFilledOrdersRemaining.sub(c));let u=a.amountOut.sub(c);if(u.gt(W)){if(!e.partFilledOrdersRemaining.isZero())throw Error("!tick.partFilledOrdersRemaining.isZero()");if(e.ordersAmount.lt(u))throw Error("InvalidLimitOrderAmount");e.orderPhase=e.orderPhase.add($e),e.unfilledRatioX64=be(ue,e.ordersAmount.sub(u),e.ordersAmount),e.partFilledOrdersRemaining=e.ordersAmount.sub(u),e.ordersAmount=W}return r||(a.ammFeeAmount=me(a.amountOut,new Ke(i),Je),a.amountOut=a.amountOut.sub(a.ammFeeAmount)),a}static getPriceAtTick(e,t){let n=this.getSqrtPriceAtTick(e);return t?n.mul(n).add(ue.subn(1)).div(ue):n.mul(n).div(ue)}static getTickAtSqrtPrice(e){if(!(e.gte(He)&&e.lte(je)))throw Error("SqrtPriceX64");let t=vi(e),n=t-64,o;n>=0?o=new Ke(n).shln(32):o=new Ke(-n).shln(32).neg();let i;t>=64?i=e.shrn(t-63):i=e.shln(63-t);let r=new Ke(0),a=new Ke(1).shln(63);for(let b=0;b<di&&!a.isZero();b++){i=i.mul(i);let w=i.shrn(127).toNumber();i=i.shrn(63+w),w&&(r=r.add(a)),a=a.shrn(1)}let s=r.shrn(32),u=o.add(s).mul(ci),d=u.sub(li),g=u.add(mi),m=this.signedShrn64(d),p=this.signedShrn64(g);return m===p?m:G.getSqrtPriceAtTick(p).lte(e)?p:m}static signedShrn64(e){if(e.isNeg()){let t=new Ke(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 Ke(10).pow(new Ke(r)),s=o.mul(a),c=new Ke(1).shln(128),d=s.div(c).toString();for(;d.length<=r;)d="0"+d;let g=d.slice(0,-r),m=d.slice(-r),p=g+"."+m;return new Ut(p).mul(new Ut(10).pow(i))}static tickToPrice(e,t,n){let o=G.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 Ut(1.0001).log()).floor();return Math.max(Qe,Math.min(Ze,i.toNumber()))}static priceToSqrtPriceX64(e,t,n){let r=e.div(Math.pow(10,t-n)).sqrt().mul(new Ut(2).pow(64));return new Ke(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 Ut(1).div(r));let a=G.toTickIndex(G.priceToTick(r,t,n),i),s=G.tickToPrice(a,t,n);return{price:o?s:new Ut(1).div(s),tick:a}}};async function _i(y,e,t,n,o,i,r=!0){let a=[],s=le(y,t).publicKey,c=await e.getAccountInfo(s),u=dt.findTickArrayAddress({programId:y,poolId:t,poolBitmap:i,tickArrayBitmap:Fn.decode(c.data),tickSpacing:o,findInfo:{type:r?"zeroForOne":"oneForZero",tickArrayCurrent:n}});return(await ve(e,u)).forEach((g,m)=>{g&&a.push({address:u[m],value:Dt.decode(g.data)})}),a}var kt=class{static isFullyFilled({orderInfo:e}){return e.totalAmount.eq(e.filledAmount)}static getUnFilledAmount({orderInfo:e}){return e.totalAmount.sub(e.filledAmount)}static settleFilledOrder({orderInfo:e,tickInfo:t}){if(e.settleBase.isZero())return W;if(e.orderPhase.eq(t.orderPhase))return W;if(e.orderPhase.add($e).eq(t.orderPhase)){let n=e.settleBase.mul(t.unfilledRatioX64),o=e.unfilledRatioX64,i=n.div(o),r=n.mod(o).isZero(),a=e.settleBase.sub(i);if(a.isZero())return W;let s=r?a:a.sub($e);return G.getLimitOrderOutput({amountIn:s,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput)}else{if(e.orderPhase.add(new Ba(2)).lte(t.orderPhase))return G.getLimitOrderOutput({amountIn:e.settleBase,tick:t.tick,zeroForOne:e.zeroForOne}).sub(e.settleOutput);throw Error("invalid order phase")}}};import Vn from"bn.js";import Ei from"decimal.js";var Pe=class{static getDeltaAmountAUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.shln(_t),r=t.sub(e);if(!e.gt(W))throw Error("!sqrtPriceX64A.gt(BN_ZERO)");let a=o?vn(me(i,r,t),e):be(i,r,t).div(e);if(a.gt(lt))throw Error("MaxTokenOverflow");return a}static getDeltaAmountBUnsigned(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=o?me(n,t.sub(e),ue):be(n,t.sub(e),ue);if(i.gt(lt))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 W;e.gt(t)&&([e,t]=[t,e]);let o=be(e,t,ue),i=t.sub(e);return be(n,o,i)}static getLiquidityFromAmountB(e,t,n){if(n.isZero())return W;e.gt(t)&&([e,t]=[t,e]);let o=t.sub(e);return be(n,ue,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=W,a=W;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:s,amountB:c}=this.getAmountsForLiquidity(e,t,n,o,r),u=i?1+a:1-a,d=new Vn(new Ei(s.toString()).mul(u).toFixed(0)),g=new Vn(new Ei(c.toString()).mul(u).toFixed(0));return{amountSlippageA:d,amountSlippageB:g}}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)?W:this.getLiquidityFromAmountA(Vn.max(e,t),n,o.amount);else if(o.type==="amountB")i=e.lte(t)?W:this.getLiquidityFromAmountB(t,Vn.min(e,n),o.amount);else throw Error("amount info type check error");return F({liquidity:i},this.getAmountsForLiquidity(e,t,n,o.amount,!0))}};import{PublicKey as _e}from"@solana/web3.js";import Re from"bn.js";import{TOKEN_2022_PROGRAM_ID as Di,TOKEN_PROGRAM_ID as Ka}from"@solana/spl-token";import te from"decimal.js";import zt from"bn.js";import he from"bn.js";var cn=class{static getNextSqrtPriceFromAmountARoundingUp(e,t,n,o){if(n.isZero())return e;let i=t.shln(_t);if(o){let r=n.mul(e),a=i.add(r);if(a.gte(i))return me(i,e,a);let s=be(i,$e,e);return me(i,$e,s.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 me(i,e,a)}}static getNextSqrtPriceFromAmountBRoundingDown(e,t,n,o){if(n.isZero())return e;if(o){let i=n.shln(_t).div(t);return e.add(i)}else{let i=vn(n.shln(_t),t);return e.sub(i)}}static getNextSqrtPriceFromInput(e,t,n,o){if(!e.gt(W))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(W))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(W))throw Error("sqrtPriceX64.gt(BN_ZERO)");if(!t.gt(W))throw Error("liquidity.gt(BN_ZERO)");return o?this.getNextSqrtPriceFromAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromAmountARoundingUp(e,t,n,!1)}};var ot=class{static newValue({poolInfo:e,amountSpecified:t,zeroForOne:n,feeRate:o,blockTimestamp:i}){let r={amountSpecifiedRemaining:t,amountCalculated:W,sqrtPriceX64:e.sqrtPriceX64,tick:e.tickCurrent,feeGrowthGlobalX64:n?e.feeGrowthGlobalX64A:e.feeGrowthGlobalX64B,lpFee:W,protocolFee:W,fundFee:W,liquidity:e.liquidity,sqrtPriceNextX64:W,tickNext:0,baseFeeRate:o,tickSpacing:e.tickSpacing,tickSpacingIndex:0,dynamicFeeInfo:Gt.getDynamicFeeInfo({poolInfo:e})};return r.dynamicFeeInfo&&(r.tickSpacingIndex=mn.tickSpacingIndexFromTick(r.tick,r.tickSpacing),Gt.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<Qe?e.tickNext=Qe:e.tickNext>Ze&&(e.tickNext=Ze),e.sqrtPriceNextX64=G.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||Gt.updateVolatilityAccumulator({state:e.dynamicFeeInfo,tickSpacingIndex:e.tickSpacingIndex})}static computeDynamicFeeRate({data:e,tickSpacing:t}){let n=e.volatilityAccumulator*t,o=n*n,i=yi*rn*rn,r=me(new he(e.dynamicFeeControl),new he(o),new he(i)).toNumber();return r>On?On: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(On,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(Qe,Math.min(Ze,i)),a=G.getSqrtPriceAtTick(r);return n?{isSkipped:!1,boundedPrice:he.max(t,a)}:{isSkipped:!1,boundedPrice:he.min(t,a)}}static applySwapAmounts({state:e,amountIn:t,amountOut:n,feeAmount:o,isBaseInput:i,isFeeOnInput:r,protocolFeeRate:a,fundFeeRate:s}){let c=r?t.add(o):t;i?(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(c),e.amountCalculated=e.amountCalculated.add(n)):(e.amountSpecifiedRemaining=e.amountSpecifiedRemaining.sub(n),e.amountCalculated=e.amountCalculated.add(c)),this.splitFee({state:e,feeAmount:o,protocolFeeRate:a,fundFeeRate:s})}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(W)){let r=t.mul(n).div(new he(Je));e.protocolFee=e.protocolFee.add(r),i=i.sub(r)}if(o.gt(W)){let r=t.mul(o).div(new he(Je));e.fundFee=e.fundFee.add(r),i=i.sub(r)}if(e.liquidity.gt(W)){let r=be(i,ue,e.liquidity);e.feeGrowthGlobalX64=e.feeGrowthGlobalX64.add(r),e.lpFee=e.lpFee.add(i)}}},ln=class{static newSwapComputationResult({sqrtPriceNextX64:e}){return{sqrtPriceNextX64:e!=null?e:W,amountIn:W,amountOut:W,feeAmount:W}}static calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:o,isBaseInput:i}){if(i)try{return o?Pe.getDeltaAmountAUnsigned(t,e,n,!0):Pe.getDeltaAmountBUnsigned(e,t,n,!0)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}else try{return o?Pe.getDeltaAmountBUnsigned(t,e,n,!1):Pe.getDeltaAmountAUnsigned(e,t,n,!1)}catch(r){if(r.message==="MaxTokenOverflow")return null;throw r}}static computeSwap(e,t,n,o,i,r,a,s){let c=this.newSwapComputationResult({});if(r){let d=s?be(o,new he(mt-i),new he(mt)):o,g=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});g!==null&&(c.amountIn=g),c.sqrtPriceNextX64=g!==null&&d.gte(c.amountIn)?t:cn.getNextSqrtPriceFromInput(e,n,d,a)}else{let d=s?o:me(o,new he(mt),new he(mt-i)),g=this.calculateAmountInRange({sqrtPriceCurrentX64:e,sqrtPriceTargetX64:t,liquidity:n,zeroForOne:a,isBaseInput:r});g!==null&&(c.amountOut=g),c.sqrtPriceNextX64=g!==null&&d.gte(c.amountOut)?t:cn.getNextSqrtPriceFromOutput(e,n,d,a)}if(a){if(!c.sqrtPriceNextX64.gte(t))throw Error("!result.sqrtPriceNextX64.gte(sqrtPriceTargetX64)")}else if(!t.gte(c.sqrtPriceNextX64))throw Error("!sqrtPriceTargetX64.gte(result.sqrtPriceNextX64)");let u=t.eq(c.sqrtPriceNextX64);if(a?(u&&r||(c.amountIn=Pe.getDeltaAmountAUnsigned(c.sqrtPriceNextX64,e,n,!0)),u&&!r||(c.amountOut=Pe.getDeltaAmountBUnsigned(c.sqrtPriceNextX64,e,n,!1))):(u&&r||(c.amountIn=Pe.getDeltaAmountBUnsigned(e,c.sqrtPriceNextX64,n,!0)),u&&!r||(c.amountOut=Pe.getDeltaAmountAUnsigned(e,c.sqrtPriceNextX64,n,!1))),r)s?c.sqrtPriceNextX64.eq(t)?c.feeAmount=me(c.amountIn,new he(i),new he(mt-i)):c.feeAmount=o.sub(c.amountIn):(c.feeAmount=me(c.amountOut,new he(i),new he(mt)),c.amountOut=c.amountOut.sub(c.feeAmount),u||(c.amountIn=o));else if(s)c.amountOut=he.min(c.amountOut,o),c.feeAmount=me(c.amountIn,new he(i),new he(mt-i));else{c.feeAmount=me(c.amountOut,new he(i),new he(mt));let d=c.amountOut.sub(c.feeAmount);d.gt(o)?(c.feeAmount=c.amountOut.sub(o),c.amountOut=o):c.amountOut=d}return c}};function wo({programId:y,poolId:e,poolInfo:t,tickArrays:n,configInfo:o,tickarrayBitmapExtension:i,amountSpecified:r,sqrtPriceLimitX64:a,zeroForOne:s,isBaseInput:c,blockTimestamp:u,includeExtraTickArrays:d}){a.isZero()&&(a=s?new zt(He).addn(1):new zt(je).subn(1));let g=0;if(n.length===0)return{allTrade:!1,amountSpecifiedRemaining:r,amountCalculated:W,feeAmount:W,sqrtPriceX64:t.sqrtPriceX64,liquidity:t.liquidity,tickCurrent:t.tickCurrent,accounts:[]};let m=d?dt.findTickArrayAddress({programId:y,poolId:e,tickSpacing:t.tickSpacing,poolBitmap:t.tickArrayBitmap,tickArrayBitmap:i,findInfo:{type:s?"oneForZero":"zeroForOne",count:2,tickArrayCurrent:t.tickCurrent}}).filter(k=>k.toString()!==n[0].address.toString()):[],p=Q.getTickArrayStartIndex(t.tickCurrent,t.tickSpacing),{firstItckArrayContainsPoolTick:f,firstValidTickArrayStartIndex:b}={firstItckArrayContainsPoolTick:n[g].value.startTickIndex===p,firstValidTickArrayStartIndex:n[g].value.startTickIndex},w=f,A=b,T=n[g],I=We.isFeeOnInput(t.feeOn,s),P=ot.newValue({poolInfo:t,amountSpecified:r,zeroForOne:s,feeRate:o.tradeFeeRate,blockTimestamp:u});for(;!P.amountSpecifiedRemaining.isZero()&&!P.sqrtPriceX64.eq(a);){let k=(()=>{let K=Q.nextInitalizedTick({data:T.value,tickSpacing:P.tickSpacing,zeroForOne:s,currentTickIndex:P.tick});if(K!==void 0)return K;if(w){let L=n[++g];return L===void 0?void 0:(A=L.value.startTickIndex,T=L,Q.firstinitializedTick({data:L.value,zeroForOne:s}))}else return w=!0,Q.firstinitializedTick({data:T.value,zeroForOne:s})})();if(k===void 0)return{allTrade:!1,amountSpecifiedRemaining:P.amountSpecifiedRemaining,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:n.slice(0,g).map(K=>K.address)};let B=ot.getTargetPriceBasedOnNextTick({data:P,tickNext:k.tick,zeroForOne:s,sqrtPriceLimitX64:a}),S=P.liquidity;do{ot.updateVolatilityAccumulator({state:P});let K=ot.getTotalFeeRate({data:P}),{isSkipped:L,boundedPrice:U}=ot.getSpacingBoundedPrice({data:P,targetPrice:B,zeroForOne:s}),_=!P.sqrtPriceX64.eq(U),v;_?(v=ln.computeSwap(P.sqrtPriceX64,U,P.liquidity,P.amountSpecifiedRemaining,K,c,s,I),ot.applySwapAmounts({state:P,amountIn:v.amountIn,amountOut:v.amountOut,feeAmount:v.feeAmount,isBaseInput:c,isFeeOnInput:I,protocolFeeRate:new zt(o.protocolFeeRate),fundFeeRate:new zt(o.fundFeeRate)})):v=ln.newSwapComputationResult({sqrtPriceNextX64:U});let V=G.limitOrderUnfilledAmount({tick:k});if(P.sqrtPriceNextX64.eq(v.sqrtPriceNextX64)){let E=G.matchLimitOrder({tick:k,swapAmount:P.amountSpecifiedRemaining,swapDirectionZeroForOne:s,isBaseInput:c,feeRate:K,isFeeOnInput:I});if(E.amountIn.gt(W)&&ot.applySwapAmounts({state:P,amountIn:E.amountIn,amountOut:E.amountOut,feeAmount:E.ammFeeAmount,isBaseInput:c,isFeeOnInput:I,protocolFeeRate:new zt(o.protocolFeeRate),fundFeeRate:new zt(o.fundFeeRate)}),G.hasLiquidity({data:k})&&!G.hasLimitOrders({data:k})){let H=s?k.liquidityNet.neg():k.liquidityNet;S=Pe.addDelta(P.liquidity,H)}P.tick=s&&!G.hasLimitOrders({data:k})||!s&&G.hasLimitOrders({data:k})?P.tickNext-1:P.tickNext}else P.sqrtPriceX64.eq(v.sqrtPriceNextX64)||(P.tick=G.getTickAtSqrtPrice(v.sqrtPriceNextX64));if(P.sqrtPriceX64=v.sqrtPriceNextX64,ot.updateDynamicFeeIndex({state:P,zeroForOne:s,isSkippedTickSpacing:L}),P.amountSpecifiedRemaining.isZero()||P.sqrtPriceX64.eq(B)){let E=G.limitOrderUnfilledAmount({tick:k});if(!P.amountSpecifiedRemaining.isZero()&&!E.eq(V)&&!E.isZero())throw Error("!limitOrderUnfilledAmountAfter.isZero()");break}}while(!0);P.liquidity=S}return{allTrade:!0,amountSpecifiedRemaining:W,amountCalculated:P.amountCalculated,feeAmount:P.lpFee.add(P.fundFee).add(P.protocolFee),sqrtPriceX64:P.sqrtPriceX64,liquidity:P.liquidity,tickCurrent:P.tick,accounts:[...m,...n.slice(0,g+1+(d?1:0)).map(k=>k.address)]}}var mn=class{static tickSpacingIndexFromTick(e,t){return Math.floor(e/t)}},Gt=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/fi),e.lastUpdateTimestamp=new Re(n)):(e.tickSpacingIndexReference=t,e.volatilityReference=0,e.lastUpdateTimestamp=new Re(n)))}static updateVolatilityAccumulator({state:e,tickSpacingIndex:t}){let n=Math.abs(e.tickSpacingIndexReference-t),o=e.volatilityReference+n*rn;e.volatilityAccumulator=Math.min(o,e.maxVolatilityAccumulator)}},We=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=Q.getTickArrayStartIndex(i,e);if(r>=n||r<o)return!0}return!1}static tickArrayStartIndexRange({tickSpacing:e}){let t=dt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=Q.getTickArrayStartIndex(Ze,e)+Q.tickCount(e)),n<Qe&&(n=Q.getTickArrayStartIndex(Qe,e)),{maxTickBoundary:t,minTickBoundary:n}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,s,c;let r=[];for(let u=0;u<i.length;u++){let d=i[u],g=(c=(a=t.rewardDefaultInfos[u])==null?void 0:a.mint.programId)!=null?c:(s=await e.getAccountInfo(d.mint))==null?void 0:s.owner;if(g===void 0)throw Error("get new reward mint info error");let m=q(F({},d),{perSecond:Vi(d.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new _e(g)});if(m.mint.equals(_e.default)||m.totalEmissioned.eq(lt))continue;if(n<=m.openTime.toNumber()||o.eq(W)){r.push(m);continue}let p=new Re(Math.min(m.endTime.toNumber(),n)),f=p.sub(m.lastUpdateTime);if(f.isZero()){r.push(m);continue}let b=me(f,m.emissionsPerSecondX64,ue),w=be(f,m.emissionsPerSecondX64,o),A,T=m.totalEmissioned.add(b);if(T.lte(lt))A=T;else{let P=lt.sub(m.totalEmissioned);A=lt,w=be(P,ue,o)}let I=m.growthGlobalX64.add(w);r.push(q(F({},m),{growthGlobalX64:I,totalEmissioned:A,lastUpdateTime:p}))}return r}},qe=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r,a){let s=o.toBase58()===e.mintA.address,c=Q.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:u,amountCalculated:d,feeAmount:g,sqrtPriceX64:m,accounts:p}=wo({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(f=>({address:f[1].address,value:f[1]})).filter(f=>s?f.value.startTickIndex<=c:f.value.startTickIndex>=c).sort((f,b)=>s?b.value.startTickIndex-f.value.startTickIndex:f.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:W,zeroForOne:s,isBaseInput:!0,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:u,expectedAmountOut:d,remainingAccounts:p,executionPrice:m,feeAmount:g}}static getInputAmountAndRemainAccounts(e,t,n,o,i,r,a){let s=o.toBase58()===e.mintB.address,c=Q.getTickArrayStartIndex(e.accInfo.tickCurrent,e.accInfo.tickSpacing),{allTrade:u,amountCalculated:d,feeAmount:g,sqrtPriceX64:m,accounts:p}=wo({programId:e.programId,poolId:e.id,poolInfo:e.accInfo,tickArrays:Object.entries(n).map(f=>({address:new _e(f[0]),value:f[1]})).filter(f=>s?f.value.startTickIndex<=c:f.value.startTickIndex>=c).sort((f,b)=>s?b.value.startTickIndex-f.value.startTickIndex:f.value.startTickIndex-b.value.startTickIndex),configInfo:e.ammConfig,tickarrayBitmapExtension:t,amountSpecified:i,sqrtPriceLimitX64:a!=null?a:W,zeroForOne:s,isBaseInput:!1,blockTimestamp:r,includeExtraTickArrays:!0});return{allTrade:u,expectedAmountIn:d,remainingAccounts:p,executionPrice:m,feeAmount:g}}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await Ee(e,t.map(r=>({pubkey:r})),{batchRequest:n}),i={};for(let r of o)r.accountInfo!==null&&(i[r.pubkey.toString()]=Fn.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let s of t){let c=[...dt.findTickArrayStartIndex({tickSpacing:s.tickSpacing,poolBitmap:s.tickArrayBitmap,tickArrayBitmap:s.exBitmapInfo,findInfo:{type:"zeroForOne",count:7,tickArrayCurrent:s.tickCurrent}}),...dt.findTickArrayStartIndex({tickSpacing:s.tickSpacing,poolBitmap:s.tickArrayBitmap,tickArrayBitmap:s.exBitmapInfo,findInfo:{type:"oneForZero",count:7,tickArrayCurrent:s.tickCurrent}})];for(let u of c){let{publicKey:d}=oe(s.programId,s.id,u);o[d.toString()]===void 0&&(i.push({pubkey:d}),o[d.toString()]=s.id)}}let r=await Ee(e,i,{batchRequest:n}),a={};for(let s of r){if(!s.accountInfo)continue;let c=o[s.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let u=Dt.decode(s.accountInfo.data);a[c.toString()][u.startTickIndex]=q(F({},u),{address:s.pubkey})}return a}static computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountIn:r,slippage:a,blockTimestamp:s,priceLimit:c=new te(0)}){var v;let u,d=o.toBase58()===e.mintA.address,[g,m]=d?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];c.equals(new te(0))?u=d?He.add(new Re(1)):je.sub(new Re(1)):u=G.priceToSqrtPriceX64(c,e.mintA.decimals,e.mintB.decimals);let p=ze(r,g,i,!1),{allTrade:f,expectedAmountOut:b,remainingAccounts:w,executionPrice:A,feeAmount:T}=qe.getOutputAmountAndRemainAccounts(e,t,n,o,p.amount.sub((v=p.fee)!=null?v:W),s,u),I=ze(b,m,i,!1),P=G.sqrtPriceX64ToPrice(A,e.mintA.decimals,e.mintB.decimals),k=d?P:new te(1).div(P),B=b.mul(new Re(Math.floor((1-a)*1e10))).div(new Re(1e10)),S=ze(B,m,i,!1),K=d?e.currentPrice:new te(1).div(e.currentPrice),L=new te(k).sub(K).abs(),U=K,_=new ut(new te(L).mul(10**15).toFixed(0),new te(U).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:I,minAmountOut:S,expirationTime:dn(p.expirationTime,I.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:_,fee:T,remainingAccounts:w,executionPriceX64:A}}static computeAmountOutFormat({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,amountIn:o,tokenOut:i,slippage:r,epochInfo:a,blockTimestamp:s,catchLiquidityInsufficient:c=!1}){let u=i.address===e.mintB.address,[d,g]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,p]=[new Ce(q(F({},d),{mint:d.address,isToken2022:d.programId===Di.toBase58()})),new Ce(q(F({},g),{mint:g.address,isToken2022:g.programId===Di.toBase58()}))],{allTrade:f,realAmountIn:b,amountOut:w,minAmountOut:A,expirationTime:T,currentPrice:I,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:S,executionPriceX64:K}=qe.computeAmountOut({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:new _e(d.address),amountIn:o,slippage:r,epochInfo:a,catchLiquidityInsufficient:c,blockTimestamp:s}),L=q(F({},b),{amount:new Se(m,b.amount),fee:b.fee===void 0?void 0:new Se(m,b.fee)}),U=q(F({},w),{amount:new Se(p,w.amount),fee:w.fee===void 0?void 0:new Se(p,w.fee)}),_=q(F({},A),{amount:new Se(p,A.amount),fee:A.fee===void 0?void 0:new Se(p,A.fee)}),v=new Ye({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:p,numerator:I.mul(new te(10**(20+p.decimals))).toFixed(0)}),V=new Ye({baseToken:m,denominator:new Re(10).pow(new Re(20+m.decimals)),quoteToken:p,numerator:P.mul(new te(10**(20+p.decimals))).toFixed(0)}),E=new Se(m,B);return{allTrade:f,realAmountIn:L,amountOut:U,minAmountOut:_,expirationTime:T,currentPrice:v,executionPrice:V,priceImpact:k,fee:E,remainingAccounts:S,executionPriceX64:K}}static computeAmountIn({poolInfo:e,tickarrayBitmapExtension:t,tickArrayCache:n,baseMint:o,epochInfo:i,amountOut:r,slippage:a,priceLimit:s=new te(0),blockTimestamp:c}){var v;let u=o.toBase58()===e.mintA.address,d={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},g;s.equals(new te(0))?g=u?je.sub(new Re(1)):He.add(new Re(1)):g=G.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let m=ze(r,d[o.toString()],i,!0),{allTrade:p,expectedAmountIn:f,remainingAccounts:b,executionPrice:w,feeAmount:A}=qe.getInputAmountAndRemainAccounts(e,t,n,o,m.amount.sub((v=m.fee)!=null?v:W),c,g),T=u?e.mintB.address:e.mintA.address,I=ze(f,d[T],i,!1),P=G.sqrtPriceX64ToPrice(w,e.mintA.decimals,e.mintB.decimals),k=u?P:new te(1).div(P),B=f.mul(new Re(Math.floor((1+a)*1e10))).div(new Re(1e10)),S=ze(B,d[T],i,!0),K=u?e.currentPrice:new te(1).div(e.currentPrice),L=new te(k).sub(K).abs(),U=K,_=new ut(new te(L).mul(10**15).toFixed(0),new te(U).mul(10**15).toFixed(0));return{allTrade:p,amountIn:I,maxAmountIn:S,realAmountOut:m,expirationTime:dn(I.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:_,fee:A,remainingAccounts:b}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var p,f,b;let i=e[t],r=G.tickToPrice(n,e.mintA.decimals,e.mintB.decimals).toNumber(),a=G.tickToPrice(o,e.mintA.decimals,e.mintB.decimals).toNumber(),s=Math.max(r,i.priceMin),u=Math.min(a,i.priceMax)-s,d=a-r,g=i.priceMax-i.priceMin,m;return u<=0?m=0:d===u?m=g/u:g===u?m=u/d:m=u/g*(u/d),{feeApr:i.feeApr*m,rewardsApr:[((p=i.rewardApr[0])!=null?p:0)*m,((f=i.rewardApr[1])!=null?f:0)*m,((b=i.rewardApr[2])!=null?b:0)*m],apr:i.apr*m}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:s}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,u=e[n],d=o[at(e.mintA.address).toString()],g=o[at(e.mintB.address).toString()],m=e.mintA.decimals,p=e.mintB.decimals;if(!u||!d||!g)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=G.priceToSqrtPriceX64(new te(e.price),e.mintA.decimals,e.mintB.decimals),b=G.getSqrtPriceAtTick(r),w=G.getSqrtPriceAtTick(a),{amountSlippageA:A,amountSlippageB:T}=Pe.getAmountsFromLiquidityWithSlippage(f,b,w,t,!1,!1,0),{amountSlippageA:I,amountSlippageB:P}=Pe.getAmountsFromLiquidityWithSlippage(f,b,w,i,!1,!1,0),k=new te(A.toString()).div(new te(10).pow(m)).mul(d.value).add(new te(T.toString()).div(new te(10).pow(p)).mul(g.value)),B=new te(I.toString()).div(new te(10).pow(m)).mul(d.value).add(new te(P.toString()).div(new te(10).pow(p)).mul(g.value)),S=new te(1).div(k.add(B)),L=new te(u.volumeFee).mul(365).div(c).mul(S).mul(100).toNumber(),U=3600*24*365,_=e.rewardDefaultInfos.map(v=>{var H,ce;let V=v.mint.decimals,E=o[v.mint.address];return s<((H=v.startTime)!=null?H:0)||s>((ce=v.endTime)!=null?ce:0)||!v.perSecond||!E||V===void 0?0:new te(E.value).mul(new te(v.perSecond).mul(U)).div(new te(10).pow(V)).mul(S).mul(100).toNumber()});return{feeApr:L,rewardsApr:_,apr:L+_.reduce((v,V)=>v+V,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:s,amountHasFee:c}){var w,A;let u=G.priceToSqrtPriceX64(new te(e.price),e.mintA.decimals,e.mintB.decimals),d=G.getSqrtPriceAtTick(n),g=G.getSqrtPriceAtTick(o),m=ze(i,(w=e[t?"mintA":"mintB"].extensions)==null?void 0:w.feeConfig,s,!c),p=new Re(new te(m.amount.sub((A=m.fee)!=null?A:W).toString()).toFixed(0)),f;if(u.lte(d))f=t?Pe.getLiquidityFromAmountA(d,g,p):new Re(0);else if(u.lte(g)){let T=Pe.getLiquidityFromAmountA(u,g,p),I=Pe.getLiquidityFromAmountB(d,u,p);f=t?T:I}else f=t?new Re(0):Pe.getLiquidityFromAmountB(d,g,p);let b=await qe.getAmountsFromLiquidity({epochInfo:s,poolInfo:e,tickLower:n,tickUpper:o,liquidity:f,slippage:r,add:a});return{liquidity:f,amountA:t?m:b.amountA,amountB:t?b.amountB:m,amountSlippageA:t?m:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:m,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,w,A,T;let s=G.getSqrtPriceAtTick(n),c=G.getSqrtPriceAtTick(o),u=a?1+r:1-r,d=Pe.getAmountsForLiquidity(G.priceToSqrtPriceX64(new te(t.price),t.mintA.decimals,t.mintB.decimals),s,c,i,a),[g,m]=[ze(d.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ze(d.amountB,(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)],[p,f]=[ze(d.amountA.muln(u),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ze(d.amountB.muln(u),(T=t.mintB.extensions)==null?void 0:T.feeConfig,e,!0)];return{liquidity:i,amountA:g,amountB:m,amountSlippageA:p,amountSlippageB:f,expirationTime:dn(g.expirationTime,m.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new _e(c.id));(await ve(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=sn.decode(c.data))});let r=t.map(c=>le(new _e(c.programId),new _e(c.id)).publicKey),a=await qe.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1}),s={};return t.reduce((c,u)=>q(F({},c),{[u.id]:q(F({accInfo:n[u.id]},n[u.id]),{id:new _e(u.id),version:6,programId:new _e(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(F({},u.config),{id:new _e(u.config.id),fundOwner:""}),currentPrice:new te(u.price),exBitmapAccount:le(new _e(u.programId),new _e(u.id)).publicKey,exBitmapInfo:a[le(new _e(u.programId),new _e(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.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=Q.getTickArrayStartIndex(o,i),a=oe(t,n,r).publicKey,s=await e.getAccountInfo(a);if(!s)throw new Error(`tick array ${a.toBase58()} not found`);return Dt.decode(s.data)}static async fetchMultipleTickArrayInfo({connection:e,tickInfoList:t}){let n=t.map(i=>{let r=Q.getTickArrayStartIndex(i.tick,i.tickSpacing);return oe(i.programId,i.poolId,r).publicKey});return(await ve(e,n)).map(i=>i&&Dt.decode(i.data))}},ko={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Wi(y,e){let t=e!=null?e:{};return q(F({},y),{type:"Concentrated",programId:y.programId.toString(),id:y.id.toString(),rewardDefaultInfos:y.rewardInfos.filter(n=>!n.mint.equals(_e.default)).map(n=>{var o,i;return{mint:pt({address:n.mint.toBase58(),programId:Ka.toBase58(),decimals:(o=t[n.mint.toBase58()].decimals)!=null?o:6}),perSecond:Number(n.emissionsPerSecondX64.divn(10**((i=t[n.mint.toBase58()].decimals)!=null?i:6)).toString()),startTime:n.openTime.toNumber(),endTime:n.endTime.toNumber()}}),rewardDefaultPoolInfos:"Clmm",price:y.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:y.ammConfig.tradeFeeRate,openTime:y.startTime.toString(),tvl:0,day:ko,week:ko,month:ko,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(F({},y.ammConfig),{id:y.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),hasDynamicFee:!1,feeOn:"",launchMigratePool:!1,tips:[]})}import Cf from"bn.js";function Le(y){let e=`global:${y}`;return Buffer.from(xa.digest(e)).slice(0,8)}Ai.span;var qi=ee("Raydium_Clmm"),Oe={createPool:Le("create_pool"),createCustomizablePool:Le("create_customizable_pool"),createPermissionedPool:Le("create_permissioned_pool"),openPositionV2:Le("open_position_v2"),openPositionWithToken22Nft:Le("open_position_with_token22_nft"),closePosition:Le("close_position"),increaseLiquidityV2:Le("increase_liquidity_v2"),decreaseLiquidityV2:Le("decrease_liquidity_v2"),initializeReward:Le("initialize_reward"),setRewardParams:Le("set_reward_params"),updateRewardInfos:Le("update_reward_infos"),collectRemainingRewards:Le("collect_remaining_rewards"),swapV2:Le("swap_v2"),openLimitOrder:Le("open_limit_order"),increaseLimitOrder:Le("increase_limit_order"),decreaseLimitOrder:Le("decrease_limit_order"),settleLimitOrder:Le("settle_limit_order"),closeLimitOrder:Le("close_limit_order")},Ui=[188,37,179,131,82,150,84,73],Gi=[16,72,250,198,14,162,212,19],j=class{static createPoolInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p){let f=O([z("sqrtPriceX64"),l("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:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},...(p!=null?p:[]).map(T=>({pubkey:T,isSigner:!1,isWritable:!1}))],w=Buffer.alloc(f.span);f.encode({sqrtPriceX64:m,startTime:W},w);let A=Buffer.from([...Oe.createPool,...w]);return new ge({keys:b,programId:e,data:A})}static createCustomizablePoolInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b){let w=O([z("sqrtPriceX64"),N("collectFeeOn"),ye("enableDynamicFee")]),A=[{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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},...f.map(P=>({pubkey:P,isSigner:!1,isWritable:!1})),...b?[{pubkey:b,isSigner:!1,isWritable:!1}]:[]],T=Buffer.alloc(w.span);w.encode({sqrtPriceX64:m,collectFeeOn:p,enableDynamicFee:b!==void 0},T);let I=Buffer.from([...Oe.createCustomizablePool,...T]);return new ge({keys:A,programId:e,data:I})}static createPermissionedPoolInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T){let I=O([z("sqrtPriceX64"),N("collectFeeOn"),ye("enableDynamicFee"),ke("seedIndex")]),P=[{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:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},...A.map(S=>({pubkey:S,isSigner:!1,isWritable:!1})),...T?[{pubkey:T,isSigner:!1,isWritable:!1}]:[]],k=Buffer.alloc(I.span);I.encode({sqrtPriceX64:f,collectFeeOn:b,enableDynamicFee:T!==void 0,seedIndex:w},k);let B=Buffer.from([...Oe.createPermissionedPool,...k]);return new ge({keys:P,programId:e,data:B})}static initializeRewardInstruction(e,t,n,o,i,r,a,s,c,u,d,g){let m=O([l("openTime"),l("endTime"),z("emissionsPerSecondX64")]),p=[{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:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1}],f=Buffer.alloc(m.span);m.encode({openTime:u,endTime:d,emissionsPerSecondX64:g},f);let b=Buffer.from([...Oe.initializeReward,...f]);return new ge({keys:p,programId:e,data:b})}static updateRewardInfosInstruction(e,t){let n=[{pubkey:t,isSigner:!1,isWritable:!0}],o=Buffer.from([...Oe.updateRewardInfos]);return new ge({keys:n,programId:e,data:o})}static setRewardParamsInstruction(e,t,n,o,i,r,a,s,c,u,d,g){let m=O([N("rewardIndex"),z("emissionsPerSecondX64"),l("openTime"),l("endTime")]),p=[{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:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0}],f=Buffer.alloc(m.span);m.encode({rewardIndex:c,emissionsPerSecondX64:g,openTime:u,endTime:d},f);let b=Buffer.from([...Oe.setRewardParams,...f]);return new ge({keys:p,programId:e,data:b})}static closePositionInstruction(e,t,n,o,i,r,a){let s=[{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:ct.programId,isSigner:!1,isWritable:!1},{pubkey:r?Ae:re,isSigner:!1,isWritable:!1}];a&&s.push({pubkey:a,isSigner:!1,isWritable:!0});let c=Buffer.from([...Oe.closePosition]);return new ge({keys:s,programId:e,data:c})}static openPositionV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T,I,P,k,B,S,K,L,U){let _=O([Te("tickLower"),Te("tickUpper"),Te("tickArrayLowerStart"),Te("tickArrayUpperStart"),z("liquidity"),l("amountMaxA"),l("amountMaxB"),ye("withMetadata"),N("optionBaseFlag"),ye("baseFlag")]),v=[{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:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Pt,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...U?[{pubkey:U,isSigner:!1,isWritable:!0}]:[]],V=Buffer.alloc(_.span);_.encode({tickLower:A,tickUpper:T,tickArrayLowerStart:I,tickArrayUpperStart:P,liquidity:k,amountMaxA:B,amountMaxB:S,withMetadata:K,optionBaseFlag:L!==null?1:0,baseFlag:L!=null?L:!1},V);let E=Buffer.from([...Oe.openPositionV2,...V]);return new ge({keys:v,programId:e,data:E})}static increaseLiquidityV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T){let I=O([z("liquidity"),l("amountMaxA"),l("amountMaxB"),N("optionBaseFlag"),ye("baseFlag")]),P=[{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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[]],k=Buffer.alloc(I.span);I.encode({liquidity:f,amountMaxA:b,amountMaxB:w,optionBaseFlag:A!==null?1:0,baseFlag:A!=null?A:!1},k);let B=Buffer.from([...Oe.increaseLiquidityV2,...k]);return new ge({keys:P,programId:e,data:B})}static decreaseLiquidityV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T){let I=O([z("liquidity"),l("amountMinA"),l("amountMinB")]),P=[{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:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},...T?[{pubkey:T,isSigner:!1,isWritable:!0}]:[],...f.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=Buffer.alloc(I.span);I.encode({liquidity:b,amountMinA:w,amountMinB:A},k);let B=Buffer.from([...Oe.decreaseLiquidityV2,...k]);return new ge({keys:P,programId:e,data:B})}static swapV2Instruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w){let A=O([l("amount"),l("otherAmountThreshold"),z("sqrtPriceLimitX64"),ye("isBaseInput")]),T=[{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:s,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...d.map(k=>({pubkey:k,isSigner:!1,isWritable:!0}))],I=Buffer.alloc(A.span);A.encode({amount:m,otherAmountThreshold:p,sqrtPriceLimitX64:f,isBaseInput:b},I);let P=Buffer.from([...Oe.swapV2,...I]);return new ge({keys:T,programId:e,data:P})}static collectRemainingRewardsInstruction(e,t,n,o,i,r,a){let s=O([N("rewardIndex")]),c=[{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:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({rewardIndex:a},u);let d=Buffer.from([...Oe.collectRemainingRewards,...u]);return new ge({keys:c,programId:e,data:d})}static openPositionWithToken22NftInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A,T,I,P,k,B,S,K,L){let U=O([Te("tickLower"),Te("tickUpper"),Te("tickArrayLowerStart"),Te("tickArrayUpperStart"),z("liquidity"),l("amountMaxA"),l("amountMaxB"),ye("withMetadata"),N("optionBaseFlag"),ye("baseFlag")]),_=[{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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...L?[{pubkey:L,isSigner:!1,isWritable:!0}]:[]],v=Buffer.alloc(U.span);U.encode({tickLower:w,tickUpper:A,tickArrayLowerStart:T,tickArrayUpperStart:I,liquidity:P,amountMaxA:k,amountMaxB:B,withMetadata:S,optionBaseFlag:K!==null?1:0,baseFlag:K!=null?K:!1},v);let V=Buffer.from([...Oe.openPositionWithToken22Nft,...v]);return new ge({keys:_,programId:e,data:V})}static openLimitOrderInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p,f,b,w,A){let T=O([N("nonceIndex"),ye("zeroForOne"),Te("tickIndex"),l("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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1},...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],P=Buffer.alloc(T.span);T.encode({nonceIndex:p,zeroForOne:f,tickIndex:b,amount:w},P);let k=Buffer.from([...Oe.openLimitOrder,...P]);return new ge({keys:I,programId:e,data:k})}static increaseLimitOrderInstruction(e,t,n,o,i,r,a,s,c,u){let d=O([l("amount")]),g=[{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:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}],m=Buffer.alloc(d.span);d.encode({amount:u},m);let p=Buffer.from([...Oe.increaseLimitOrder,...m]);return new ge({keys:g,programId:e,data:p})}static decreaseLimitOrderInstruction(e,t,n,o,i,r,a,s,c,u,d,g,m,p){let f=O([l("amount"),l("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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},...p?[{pubkey:p,isSigner:!1,isWritable:!0}]:[]],w=Buffer.alloc(f.span);f.encode({amount:g,amountMin:m},w);let A=Buffer.from([...Oe.decreaseLimitOrder,...w]);return new ge({keys:b,programId:e,data:A})}static settleLimitOrderInstruction(e,t,n,o,i,r,a,s,c){let u=[{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:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1}],d=Buffer.from([...Oe.settleLimitOrder]);return new ge({keys:u,programId:e,data:d})}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([...Oe.closeLimitOrder]);return new ge({keys:i,programId:e,data:r})}static createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:s}=e,[c,u]=[new M(o.address),new M(i.address)],[d,g]=[new M(o.programId||re),new M(i.programId||re)],{publicKey:m}=xi(t,r,c,u),{publicKey:p}=go(t,m),{publicKey:f}=Ue(t,m,c),{publicKey:b}=Ue(t,m,u),w=le(t,m).publicKey,A=[this.createPoolInstruction(t,m,n,r,p,c,f,d,u,b,g,w,a,s)];return{signers:[],instructions:A,instructionTypes:[$.CreateAccount,$.ClmmCreatePool],address:{poolId:m,observationId:p,exBitmapAccount:w,mintA:c,mintB:u,mintAProgram:d,mintBProgram:g,mintAVault:f,mintBVault:b},lookupTableAddress:[]}}static createPermissionedPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:s,payer:c,seedIndex:u}=e,[d,g]=[new M(o.address),new M(i.address)],[m,p]=[new M(o.programId||re),new M(i.programId||re)],{publicKey:f}=Ri(t,r,d,g,u),{publicKey:b}=Ci(t,c),{publicKey:w}=go(t,f),{publicKey:A}=Ue(t,f,d),{publicKey:T}=Ue(t,f,g),I=le(t,f).publicKey,P=[this.createPoolInstruction(t,f,n,r,w,d,A,m,g,T,p,I,a,s)];return{signers:[],instructions:P,instructionTypes:[$.CreateAccount,$.ClmmCreatePool],address:{poolId:f,observationId:w,exBitmapAccount:I,mintA:d,mintB:g,mintAProgram:m,mintBProgram:p,mintAVault:A,mintBVault:T,permission:b},lookupTableAddress:[]}}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:s,base:c,withMetadata:u,getEphemeralSigners:d,nft2022:g}){let m=[],[p,f]=[new M(e.programId),new M(e.id)],b;if(d)b=new M((await d(1))[0]);else{let L=_n.generate();m.push(L),b=L.publicKey}let w=Q.getTickArrayStartIndex(o,e.config.tickSpacing),A=Q.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:T}=oe(p,f,w),{publicKey:I}=oe(p,f,A),{publicKey:P}=g?Z(n.wallet,b,Ae):Z(n.wallet,b,re),{publicKey:k}=Kt(b),{publicKey:B}=Ge(p,b),{publicKey:S}=nt(p,f,o,i),K=g?this.openPositionWithToken22NftInstruction(p,n.feePayer,f,n.wallet,b,P,S,T,I,B,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,r,a,s,u==="create",c&&c==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0):this.openPositionV2Instruction(p,n.feePayer,f,n.wallet,b,P,k,S,T,I,B,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,r,a,s,u==="create",null,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0);return{signers:m,instructions:[K],instructionTypes:[$.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:T,tickArrayUpper:I,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:s,liquidity:c,withMetadata:u,getEphemeralSigners:d,nft2022:g}){let m=[],[p,f]=[new M(e.programId),new M(e.id)],b;if(d)b=new M((await d(1))[0]);else{let L=_n.generate();m.push(L),b=L.publicKey}let w=Q.getTickArrayStartIndex(o,e.config.tickSpacing),A=Q.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:T}=oe(p,f,w),{publicKey:I}=oe(p,f,A),{publicKey:P}=g?Z(n.wallet,b,Ae):Z(n.wallet,b,re),{publicKey:k}=Kt(b),{publicKey:B}=Ge(p,b),{publicKey:S}=nt(p,f,o,i),K=g?this.openPositionWithToken22NftInstruction(p,n.feePayer,f,n.wallet,b,P,S,T,I,B,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,c,!r||r==="MintA"?a:s,!r||r==="MintA"?s:a,u==="create",r&&r==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0):this.openPositionV2Instruction(p,n.feePayer,f,n.wallet,b,P,k,S,T,I,B,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),o,i,w,A,W,r==="MintA"?a:s,r==="MintA"?s:a,u==="create",r==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:T,tickArrayUpper:I,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:S},instructions:[K],signers:m,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:s,base:c,withMetadata:u,getEphemeralSigners:d,nft2022:g}){let m,p=[];if(d)m=new M((await d(1))[0]);else{let L=_n.generate();p.push(L),m=L.publicKey}let[f,b]=[new M(e.programId),new M(e.id)],w=Q.getTickArrayStartIndex(o,e.config.tickSpacing),A=Q.getTickArrayStartIndex(i,e.config.tickSpacing),{publicKey:T}=oe(f,b,w),{publicKey:I}=oe(f,b,A),{publicKey:P}=g?Z(n.wallet,m,Ae):Z(n.wallet,m,re),{publicKey:k}=Kt(m),{publicKey:B}=Ge(f,m),{publicKey:S}=nt(f,b,o,i),K=g?this.openPositionWithToken22NftInstruction(f,n.wallet,b,n.wallet,m,P,S,T,I,B,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(t.mintA.address),new M(t.mintB.address),o,i,w,A,r,a,s,u==="create",c&&c==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(f,b).publicKey:void 0):this.openPositionV2Instruction(f,n.wallet,b,n.wallet,m,P,k,S,T,I,B,n.tokenAccountA,n.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(t.mintA.address),new M(t.mintB.address),o,i,w,A,r,a,s,u==="create",null,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[w,A]})?le(f,b).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:T,tickArrayUpper:I,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:S},instructions:[K],signers:p,instructionTypes:[$.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new M(e.programId),a=i?Z(n.wallet,o.nftMint,Ae).publicKey:Z(n.wallet,o.nftMint,re).publicKey,{publicKey:s}=Ge(r,o.nftMint),c=[];return c.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,s,!!i,new M(e.id))),{address:{positionNftAccount:a,personalPosition:s},signers:[],instructions:c,instructionTypes:[$.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:s}){let[c,u]=[new M(e.programId),new M(e.id)],d=Q.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),g=Q.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:m}=oe(c,u,d),{publicKey:p}=oe(c,u,g),{publicKey:f}=s?Z(o.wallet,n.nftMint,Ae):Z(o.wallet,n.nftMint,re),{publicKey:b}=Ge(c,n.nftMint),{publicKey:w}=nt(c,u,n.tickLower,n.tickUpper),A=this.increaseLiquidityV2Instruction(c,o.wallet,f,b,u,w,m,p,o.tokenAccountA,o.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),i,r,a,null,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,g]})?le(c,u).publicKey:void 0);return{address:{tickArrayLower:m,tickArrayUpper:p,positionNftAccount:f,personalPosition:b,protocolPosition:w},signers:[],instructions:[A],instructionTypes:[$.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:s}){let[c,u]=[new M(e.programId),new M(e.id)],d=Q.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),g=Q.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:m}=oe(c,u,d),{publicKey:p}=oe(c,u,g),{publicKey:f}=s?Z(o.wallet,n.nftMint,Ae):Z(o.wallet,n.nftMint,re),{publicKey:b}=Ge(c,n.nftMint),{publicKey:w}=nt(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:m,tickArrayUpper:p,positionNftAccount:f,personalPosition:b,protocolPosition:w},instructions:[this.increaseLiquidityV2Instruction(c,o.wallet,f,b,u,w,m,p,o.tokenAccountA,o.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),W,i==="MintA"?r:a,i==="MintA"?a:r,i==="MintA",We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[d,g]})?le(c,u).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:s,nft2022:c}){let[u,d]=[new M(e.programId),new M(e.id)],g=Q.getTickArrayStartIndex(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndex(n.tickUpper,e.config.tickSpacing),{publicKey:p}=oe(u,d,g),{publicKey:f}=oe(u,d,m),{publicKey:b}=c?Z(o.wallet,n.nftMint,Ae):Z(o.wallet,n.nftMint,s),{publicKey:w}=Ge(u,n.nftMint),{publicKey:A}=nt(u,d,n.tickLower,n.tickUpper),T=new Map;for(let B=0;B<t.rewardInfos.length;B++)T.set(t.rewardInfos[B].mint.address,o.rewardAccounts[B]);let I=[];for(let B=0;B<t.rewardInfos.length;B++){let S=t.rewardInfos[B].mint.address,K=T.get(S);K&&I.push({poolRewardVault:new M(t.rewardInfos[B].vault),ownerRewardVault:K,rewardMint:new M(S)})}let P=[],k=this.decreaseLiquidityV2Instruction(u,o.wallet,b,w,d,A,p,f,o.tokenAccountA,o.tokenAccountB,new M(t.vault.A),new M(t.vault.B),new M(e.mintA.address),new M(e.mintB.address),I,i,r,a,We.isOverflowDefaultTickarrayBitmap({tickSpacing:e.config.tickSpacing,tickIndexs:[g,m]})?le(u,d).publicKey:void 0);return P.push(k),{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:w,protocolPosition:A},signers:[],instructions:P,instructionTypes:[$.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:s,remainingAccounts:c}){let[u,d]=[new M(e.programId),new M(e.id)],[g,m]=[new M(t.vault.A),new M(t.vault.B)],[p,f]=[new M(e.mintA.address),new M(e.mintB.address)],b=e.mintA.address.toString()===i.toString(),w=[this.swapV2Instruction(u,o.wallet,d,new M(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?g:m,b?m:g,b?p:f,b?f:p,c,n,r,a,s,!0,le(u,d).publicKey)];return{signers:[],instructions:w,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:s,remainingAccounts:c}){let[u,d]=[new M(e.programId),new M(e.id)],[g,m]=[new M(t.vault.A),new M(t.vault.B)],[p,f]=[new M(e.mintA.address),new M(e.mintB.address)],b=e.mintB.address.toString()===i.toBase58(),w=[this.swapV2Instruction(u,o.wallet,d,new M(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?g:m,b?m:g,b?p:f,b?f:p,c,n,r,a,s,!1,le(u,d).publicKey)];return{signers:[],instructions:w,instructionTypes:[$.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new M(e.programId),new M(e.id)],a=Li(i,r,o.mint).publicKey,s=un(i).publicKey,c=[this.initializeRewardInstruction(i,n.wallet,r,s,new M(e.config.id),n.tokenAccount,o.programId,o.mint,a,new En(o.openTime),new En(o.endTime),o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:s},signers:[],instructions:c,instructionTypes:[$.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new M(e.programId),new M(e.id)],a,s,c;for(let g=0;g<e.rewardDefaultInfos.length;g++)e.rewardDefaultInfos[g].mint.address===o.mint.toString()&&(a=g,s=new M(t.rewardInfos[g].vault),c=new M(t.rewardInfos[g].mint.address));(a===void 0||s===void 0)&&qi.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=un(i).publicKey,d=[this.setRewardParamsInstruction(i,n.wallet,r,u,new M(e.config.id),n.tokenAccount,s,c,a,new En(o.openTime),new En(o.endTime),o.emissionsPerSecondX64)];return{address:{rewardVault:s,operationId:u},signers:[],instructions:d,instructionTypes:[$.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new M(e.programId),new M(e.id)],a,s;for(let u=0;u<e.rewardDefaultInfos.length;u++)e.rewardDefaultInfos[u].mint.address===o.toString()&&(a=u,s=new M(t.rewardInfos[u].vault));(a===void 0||s===void 0)&&qi.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRemainingRewardsInstruction(i,n.wallet,r,n.tokenAccount,s,o,a)];return{address:{rewardVault:s},signers:[],instructions:c,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:s}){let c=[],u;if(s)u=new M((await s(1))[0]);else{let w=_n.generate();c.push(w),u=w.publicKey}let d=a?Z(i,r,Ae).publicKey:Z(i,r,re).publicKey,{publicKey:g}=Ge(n,r),m=Wt(e,u).publicKey,p=Z(i,u,re).publicKey,f=Kt(u).publicKey,b=j.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:d,positionId:g,lockPositionId:m,lockNftMint:u,lockNftAccount:p,metadataAccount:f,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:Z(t,r,a?Ae:re).publicKey,positionNftProgram:a?Ae:re});return{address:{positionId:g,lockPositionId:m,lockNftAccount:p,lockNftMint:u,positionNftAccount:d,metadataAccount:f},instructions:[b],signers:c,instructionTypes:[$.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:s,authPositionNftAccount:c,positionNftProgram:u,lockPositionId:d,lockNftMint:g,lockNftAccount:m,metadataAccount:p,withMetadata:f}){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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!0,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Pt,isSigner:!1,isWritable:!1},{pubkey:To,isSigner:!1,isWritable:!1},{pubkey:Xe,isSigner:!1,isWritable:!1},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1}],w=O([ye("withMetadata")]),A=Buffer.alloc(w.span);w.encode({withMetadata:f},A);let T=Buffer.from([...Ui,...A]);return new ge({keys:b,programId:e,data:T})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=Z(o,i,re),{publicKey:a}=Ge(n,i),s=[{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:Po(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:ct.programId,isSigner:!1,isWritable:!1}];return new ge({keys:s,programId:e,data:Buffer.from(Ui)})}static harvestLockPositionInstruction(e){let[t,n]=[new M(e.poolKeys.programId),new M(e.poolKeys.id)],o=Q.getTickArrayStartIndex(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=Q.getTickArrayStartIndex(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=oe(t,n,o),{publicKey:a}=oe(t,n,i),{publicKey:s}=Z(e.owner,e.ownerPosition.nftMint,re),{publicKey:c}=Ge(t,e.ownerPosition.nftMint),{publicKey:u}=nt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),d=[];for(let p=0;p<e.poolKeys.rewardInfos.length;p++)d.push({poolRewardVault:new M(e.poolKeys.rewardInfos[p].vault),ownerRewardVault:e.ownerRewardAccounts[p],rewardMint:new M(e.poolKeys.rewardInfos[p].mint.address)});let g=[...d.map(p=>[{pubkey:p.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:p.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:p.rewardMint,isSigner:!1,isWritable:!1}]).flat()],m=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:Po(e.programId,c).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:new M(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new M(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:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:new M(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new M(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...g];return new ge({keys:m,programId:e.programId,data:Buffer.from(Gi)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:s,positionId:c,poolId:u,protocolPosition:d,vaultA:g,vaultB:m,tickArrayLower:p,tickArrayUpper:f,userVaultA:b,userVaultB:w,mintA:A,mintB:T,rewardAccounts:I,exTickArrayBitmap:P}){let k=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...I.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],B=[{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:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!0},{pubkey:re,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:gt,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:T,isSigner:!1,isWritable:!1},...k];return new ge({keys:B,programId:e,data:Buffer.from(Gi)})}};import{PublicKey as ho}from"@solana/web3.js";var Ca=O([N("instruction")]),Ra=O([N("instruction")]),La=O([l("rewardState"),l("rewardOpenTime"),l("rewardEndTime"),l("rewardLastUpdateTime"),l("totalReward"),l("totalRewardEmissioned"),l("rewardClaimed"),l("rewardPerSecond"),z("accRewardPerShare"),h("rewardVault"),h("rewardMint"),h("rewardSender"),l("rewardType"),D(l(),15,"padding")]),Oa=O([l("state"),l("nonce"),h("lpVault"),h("rewardVault"),h(),h(),l(),l(),l("totalReward"),z("perShareReward"),l("lastSlot"),l("perSlotReward")]),Na=O([l("state"),l("nonce"),h("lpVault"),h("rewardVaultA"),l("totalRewardA"),z("perShareRewardA"),l("perSlotRewardA"),N("option"),h("rewardVaultB"),J(7),l("totalRewardB"),z("perShareRewardB"),l("perSlotRewardB"),l("lastSlot"),h()]),Ma=O([l(),l("state"),l("nonce"),l("validRewardTokenNum"),z("rewardMultiplier"),l("rewardPeriodMax"),l("rewardPeriodMin"),l("rewardPeriodExtend"),h("lpMint"),h("lpVault"),D(La,5,"rewardInfos"),h("creator"),h(),D(l(),32,"padding")]),Fa=new Proxy(Oa,{get(y,e,t){return e==="decode"?(...n)=>{let o=y.decode(...n);return q(F({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(y,e,t)}}),va=new Proxy(Na,{get(y,e,t){return e==="decode"?(...n)=>{let o=y.decode(...n);return q(F({},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(y,e,t)}}),zi=new Proxy(Ma,{get(y,e,t){return e==="decode"?(...n)=>{let o=y.decode(...n);return q(F({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(F({},i),{rewardType:((r=Object.entries(pn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(y,e,t)}}),Va=O([l("isSet"),l("rewardPerSecond"),l("rewardOpenTime"),l("rewardEndTime"),l("rewardType")]),_a=O([N("instruction"),l("nonce"),D(Va,5,"rewardTimeInfo")]),Ea=O([N("instruction"),l("rewardReopenTime"),l("rewardEndTime"),l("rewardPerSecond")]),Da=O([N("instruction"),l("isSet"),l("rewardPerSecond"),l("rewardOpenTime"),l("rewardEndTime"),l("rewardType")]),wy=O([l("state"),h("id"),h("owner"),l("deposited"),D(l(),1,"rewardDebts")]),Xi=O([l("state"),h("id"),h("owner"),l("deposited"),D(z(),1,"rewardDebts"),l(""),l("voteLockedBalance"),D(l(),15)]),ky=O([l("state"),h("id"),h("owner"),l("deposited"),D(l(),2,"rewardDebts")]),Wa=O([l("state"),h("id"),h("owner"),l("deposited"),D(z(),2,"rewardDebts"),D(l(),17)]),qa=O([l(),l("state"),h("id"),h("owner"),l("deposited"),D(z(),5,"rewardDebts"),D(l(),16)]),Ua=O([N("instruction"),l("amount")]),Ga=O([h("mint"),h("grantAuthority"),l("baselineVoteWeightScaledFactor"),l("maxExtraLockupVoteWeightScaledFactor"),l("lockupSaturationSecs"),Jo("digitShift"),D(N(),7,"reserved1"),D(l(),7,"reserved2")]),za=O([J(8),h("governanceProgramId"),h("realm"),h("realmGoverningTokenMint"),h("realmAuthority"),D(N(),32,"reserved1"),D(Ga,4,"votingMints"),vt("timeOffset"),N("bump"),D(N(),7,"reserved2"),D(l(),11,"reserved3")]),Xa=O([vt("startTime"),vt("endTime"),N("kind"),D(N(),15,"reserved")]),Ya=O([D(Xa,1,"lockup"),l("amountDeposited_native"),l("amountInitiallyLockedNative"),ye("isUsed"),ye("allowClawback"),N("votingMintConfigIdx"),D(N(),29,"reserved")]),Qa=O([J(8),h("voterAuthority"),h("registrar"),D(Ya,32,"deposits"),N("voterBump"),N("voterWweightRecordBump"),D(N(),94,"reserved")]);import{NATIVE_MINT as Ry}from"@solana/spl-token";var Ly=ee("Raydium_farm_config"),Za=new ho("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ha=new ho("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Oy=new ho("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var pn={"Standard SPL":0,"Option tokens":1},Yi={[oi.toString()]:3,[ii.toString()]:4,[ri.toString()]:5,[lo.toString()]:6,[wt.FARM_PROGRAM_ID_V3.toString()]:3,[wt.FARM_PROGRAM_ID_V4.toString()]:4,[wt.FARM_PROGRAM_ID_V5.toString()]:5,[wt.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as gb,SystemProgram as Pb,SYSVAR_CLOCK_PUBKEY as Ab,SYSVAR_RENT_PUBKEY as wb,TransactionInstruction as kb}from"@solana/web3.js";import hb from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Bb,createAssociatedTokenAccountIdempotentInstruction as Sb,TOKEN_PROGRAM_ID as Kb}from"@solana/spl-token";import Yy from"bn.js";import{PublicKey as _y}from"@solana/web3.js";import Dy from"bn.js";var ab=ee("Raydium.farm.util");var _b=ee("Raydium_farm_instruction"),Eb={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 Sg from"bn.js";import{PublicKey as jA}from"@solana/web3.js";import{AccountLayout as ew,MintLayout as tw,NATIVE_MINT as nw,TOKEN_PROGRAM_ID as iw}from"@solana/spl-token";import it from"bn.js";var fn=1e4;function ze(y,e,t,n){if(e===void 0)return{amount:y,fee:void 0,expirationTime:void 0};let o=q(F({},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 it(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===fn){let s=new it(i.maximumFee.toString());return{amount:y.add(s),fee:s,expirationTime:a}}else{let s=Wn(y.mul(new it(fn)),new it(fn-i.transferFeeBasisPoints)),c=new it(i.maximumFee.toString()),u=s.sub(y).gt(c)?y.add(c):s,d=Wn(u.mul(new it(i.transferFeeBasisPoints)),new it(fn)),g=d.gt(r)?r:d;return{amount:u,fee:g,expirationTime:a}}else{let s=Wn(y.mul(new it(i.transferFeeBasisPoints)),new it(fn)),c=s.gt(r)?r:s;return{amount:y,fee:c,expirationTime:a}}}function dn(y,e){return y===void 0?e:e===void 0?y:Math.min(y,e)}function Wn(y,e){let{div:t,mod:n}=y.divmod(e);return n.gt(new it(0))?t.add(new it(1)):t}var is=O([fe("mintAuthorityOption"),h("mintAuthority"),l("supply"),N("decimals"),N("isInitialized"),fe("freezeAuthorityOption"),h("freezeAuthority")]);import{TOKEN_PROGRAM_ID as Wg}from"@solana/spl-token";import{PublicKey as zg}from"@solana/web3.js";var pt=o=>{var i=o,{address:y,programId:e,decimals:t}=i,n=tt(i,["address","programId","decimals"]);return F({chainId:101,address:at(y).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},yn=y=>y?q(F({},y),{transferFeeConfigAuthority:y.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:y.withdrawWithheldAuthority.toBase58(),withheldAmount:y.withheldAmount.toString(),olderTransferFee:q(F({},y.olderTransferFee),{epoch:y.olderTransferFee.epoch.toString(),maximumFee:y.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(F({},y.newerTransferFee),{epoch:y.newerTransferFee.epoch.toString(),maximumFee:y.newerTransferFee.maximumFee.toString()})}):void 0;import Zi from"bn.js";var rs=new Zi(25),as=new Zi(1e4);import{ASSOCIATED_TOKEN_PROGRAM_ID as lP,TOKEN_PROGRAM_ID as mP}from"@solana/spl-token";import{PublicKey as pP,SystemProgram as fP,SYSVAR_RENT_PUBKEY as yP,TransactionInstruction as bP}from"@solana/web3.js";import IP from"bn.js";var ss=O([N("instruction"),l("amountIn"),l("minAmountOut")]),us=O([N("instruction"),l("maxAmountIn"),l("amountOut")]),aP=O([N("instruction"),N("nonce")]),cs=O([N("instruction"),N("nonce"),l("startTime")]),Hi=O([l("status"),l("nonce"),l("maxOrder"),l("depth"),l("baseDecimal"),l("quoteDecimal"),l("state"),l("resetFlag"),l("minSize"),l("volMaxCutRatio"),l("amountWaveRatio"),l("baseLotSize"),l("quoteLotSize"),l("minPriceMultiplier"),l("maxPriceMultiplier"),l("systemDecimalValue"),l("minSeparateNumerator"),l("minSeparateDenominator"),l("tradeFeeNumerator"),l("tradeFeeDenominator"),l("pnlNumerator"),l("pnlDenominator"),l("swapFeeNumerator"),l("swapFeeDenominator"),l("baseNeedTakePnl"),l("quoteNeedTakePnl"),l("quoteTotalPnl"),l("baseTotalPnl"),l("poolOpenTime"),l("punishPcAmount"),l("punishCoinAmount"),l("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),l("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),l("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"),l("lpReserve"),D(l(),3,"padding")]),sP=O([l("accountType"),l("status"),l("nonce"),l("maxOrder"),l("depth"),l("baseDecimal"),l("quoteDecimal"),l("state"),l("resetFlag"),l("minSize"),l("volMaxCutRatio"),l("amountWaveRatio"),l("baseLotSize"),l("quoteLotSize"),l("minPriceMultiplier"),l("maxPriceMultiplier"),l("systemDecimalsValue"),l("abortTradeFactor"),l("priceTickMultiplier"),l("priceTick"),l("minSeparateNumerator"),l("minSeparateDenominator"),l("tradeFeeNumerator"),l("tradeFeeDenominator"),l("pnlNumerator"),l("pnlDenominator"),l("swapFeeNumerator"),l("swapFeeDenominator"),l("baseNeedTakePnl"),l("quoteNeedTakePnl"),l("quoteTotalPnl"),l("baseTotalPnl"),l("poolOpenTime"),l("punishPcAmount"),l("punishCoinAmount"),l("orderbookToInitTime"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("swapBaseOutAmount"),l("swapQuote2BaseFee"),l("swapBase2QuoteFee"),h("baseVault"),h("quoteVault"),h("baseMint"),h("quoteMint"),h("lpMint"),h("modelDataAccount"),h("openOrders"),h("marketId"),h("marketProgramId"),h("targetOrders"),h("owner"),D(l(),64,"padding")]),ls=O([N("instruction"),l("baseAmountIn"),l("quoteAmountIn"),l("fixedSide"),l("otherAmountMin")]),ms=O([N("instruction"),l("lpAmount"),l("baseAmountMin"),l("quoteAmountMin")]);var ds=O([l("fee")]);var KP=ee("Raydium_liquidity_instruction");var ps=5e4,fs=O([l("x"),l("y"),l("price")]),LP=O([l("accountType"),l("status"),l("multiplier"),l("validDataCount"),D(fs,ps,"DataElement")]);import{PublicKey as UP}from"@solana/web3.js";import zP from"decimal.js";import{TOKEN_PROGRAM_ID as YP}from"@solana/spl-token";import{PublicKey as FP}from"@solana/web3.js";var _P=ee("Raydium_liquidity_serum");import Iw from"bn.js";import Sw from"decimal.js";import{TOKEN_PROGRAM_ID as BA}from"@solana/spl-token";import{PublicKey as KA}from"@solana/web3.js";import CA from"bn.js";import{SystemProgram as dA,SYSVAR_RENT_PUBKEY as pA,Transaction as fA,TransactionInstruction as yA}from"@solana/web3.js";import{createInitializeAccountInstruction as gA,TOKEN_PROGRAM_ID as PA}from"@solana/spl-token";function ys(y="accountFlags"){let e=new xn(y);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var bs=O([J(5),ys("accountFlags"),h("ownAddress"),l("vaultSignerNonce"),h("baseMint"),h("quoteMint"),h("baseVault"),l("baseDepositsTotal"),l("baseFeesAccrued"),h("quoteVault"),l("quoteDepositsTotal"),l("quoteFeesAccrued"),l("quoteDustThreshold"),h("requestQueue"),h("eventQueue"),h("bids"),h("asks"),l("baseLotSize"),l("quoteLotSize"),l("feeRateBps"),l("referrerRebatesAccrued"),J(7)]);import{PublicKey as jk}from"@solana/web3.js";import{AccountLayout as Jk,NATIVE_MINT as eT,TOKEN_2022_PROGRAM_ID as tT,TOKEN_PROGRAM_ID as nT,createAssociatedTokenAccountIdempotentInstruction as oT}from"@solana/spl-token";import Hw from"bn.js";import hs from"bn.js";var vw=new hs(0);import qw from"bn.js";import Is from"bn.js";var Je=new Is(1e6);import mT from"bn.js";import pT from"decimal.js";import{PublicKey as fk,TransactionInstruction as yk,Keypair as gk,SystemProgram as Pk}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as wk,TOKEN_2022_PROGRAM_ID as kk,TOKEN_PROGRAM_ID as Tk}from"@solana/spl-token";var tk=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),nk=Buffer.from("amm_config","utf8"),ok=Buffer.from("pool","utf8"),ik=Buffer.from("pool_lp_mint","utf8"),rk=Buffer.from("pool_vault","utf8"),ak=Buffer.from("observation","utf8"),sk=Buffer.from("permission","utf8"),uk=Buffer.from("support_mint","utf8");var ck=Buffer.from("locked_liquidity","utf8");var Ck=ee("Raydium_cpmm"),Rk={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])};var Ks=O([J(8),N("bump"),ye("disableCreatePool"),ke("index"),l("tradeFeeRate"),l("protocolFeeRate"),l("fundFeeRate"),l("createPoolFee"),h("protocolOwner"),h("fundOwner"),l("creatorFeeRate"),D(l(),15)]),ji=O([J(8),h("configId"),h("poolCreator"),h("vaultA"),h("vaultB"),h("mintLp"),h("mintA"),h("mintB"),h("mintProgramA"),h("mintProgramB"),h("observationId"),N("bump"),N("status"),N("lpDecimals"),N("mintDecimalA"),N("mintDecimalB"),l("lpAmount"),l("protocolFeesMintA"),l("protocolFeesMintB"),l("fundFeesMintA"),l("fundFeesMintB"),l("openTime"),l("epoch"),N("feeOn"),ye("enableCreatorFee"),D(N(),6),l("creatorFeesMintA"),l("creatorFeesMintB"),D(l(),28)]),Nk=O([J(8),h("configId"),D(l(),30)]);import{PublicKey as iK,SystemProgram as rK}from"@solana/web3.js";import{createTransferInstruction as sK,TOKEN_PROGRAM_ID as uK,TOKEN_2022_PROGRAM_ID as cK,createAssociatedTokenAccountIdempotentInstruction as lK,createSyncNativeInstruction as dK,createTransferCheckedInstruction as pK}from"@solana/spl-token";import Gs from"bn.js";import bK from"decimal.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as hh,TOKEN_2022_PROGRAM_ID as Ih,TOKEN_PROGRAM_ID as Bh}from"@solana/spl-token";import{SystemProgram as Ch,TransactionInstruction as Rh}from"@solana/web3.js";import Ms from"bn.js";var Rs=O([l(),l("epoch"),N("curveType"),ke("index"),l("migrateFee"),l("tradeFeeRate"),l("maxShareFeeRate"),l("minSupplyA"),l("maxLockRate"),l("minSellRateA"),l("minMigrateRateA"),l("minFundRaisingB"),h("mintB"),h("protocolFeeOwner"),h("migrateFeeOwner"),h("migrateToAmmWallet"),h("migrateToCpmmWallet"),D(l(),16)]),Ls=O([l("totalLockedAmount"),l("cliffPeriod"),l("unlockPeriod"),l("startTime"),l("totalAllocatedShare")]),Os=O([l(),l("epoch"),N("bump"),N("status"),N("mintDecimalsA"),N("mintDecimalsB"),N("migrateType"),l("supply"),l("totalSellA"),l("virtualA"),l("virtualB"),l("realA"),l("realB"),l("totalFundRaisingB"),l("protocolFee"),l("platformFee"),l("migrateFee"),Ls.replicate("vestingSchedule"),h("configId"),h("platformId"),h("mintA"),h("mintB"),h("vaultA"),h("vaultB"),h("creator"),N("mintProgramFlag"),N("cpmmCreatorFeeOn"),l("platformVestingShare"),D(N(),54)]),ih=O([l(),l("epoch"),h("poolId"),h("beneficiary"),l("claimedAmount"),l("tokenShareAmount"),D(l(),8)]),Ji=O([N("migrateType"),N("migrateCpmmFeeOn"),l("supply"),l("totalSellA"),l("totalFundRaisingB"),l("totalLockedAmount"),l("cliffPeriod"),l("unlockPeriod")]),Ns=O([l("epoch"),N("index"),h("configId"),Ji.replicate("bondingCurveParam"),D(l(),50)]),er=O([l(),l("epoch"),h("platformClaimFeeWallet"),h("platformLockNftWallet"),l("platformScale"),l("creatorScale"),l("burnScale"),l("feeRate"),D(N(),64,"name"),D(N(),256,"web"),D(N(),256,"img"),h("cpConfigId"),l("creatorFeeRate"),h("transferFeeExtensionAuth"),h("platformVestingWallet"),l("platformVestingScale"),h("platformCpCreator"),N("restrictGlobalConfig"),D(N(),107),ti(Ns,"platformCurve")]);var ch=Buffer.from("vault_auth_seed","utf8"),lh=Buffer.from("global_config","utf8"),mh=Buffer.from("pool_vesting","utf8"),dh=Buffer.from("platform_config","utf8"),ph=Buffer.from("platform_fee_vault_auth_seed","utf8"),fh=Buffer.from("creator_fee_vault_auth_seed","utf8"),yh=Buffer.from("platform_global_access","utf8"),bh=Buffer.from("platform_allow_config","utf8");var Mh={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]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145]),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])};var Fh=new Ms("18446744073709551615");import{TOKEN_2022_PROGRAM_ID as Eh,TOKEN_PROGRAM_ID as Dh}from"@solana/spl-token";import Gh from"bn.js";import Xh from"decimal.js";import II from"bn.js";import SI from"decimal.js";import $h from"bn.js";import eI from"decimal.js";import lI from"bn.js";import dI from"decimal.js";import or from"bn.js";import Bo from"decimal.js";var qn=class{static _multipler(e){return new Bo(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new Bo(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 or(o.mul(this._Q64).toFixed(0))}};qn._Q64=new Bo(new or(1).shln(64).toString());import{NATIVE_MINT as MB,TOKEN_2022_PROGRAM_ID as FB,TOKEN_PROGRAM_ID as vB,createAssociatedTokenAccountIdempotentInstruction as _B,createSyncNativeInstruction as EB,getTransferFeeConfig as DB,unpackMint as WB}from"@solana/spl-token";import xe from"bn.js";import{PublicKey as Ws,SystemProgram as GB}from"@solana/web3.js";import jB from"decimal.js";var $B={initPriceX64:new xe("515752397214619"),supply:new xe(1e15),totalSellA:new xe(7931e11),totalFundRaisingB:new xe(85e9),totalFundRaisingBUSD:new xe(125e8),totalLockedAmount:new xe("0"),cliffPeriod:new xe("0"),unlockPeriod:new xe("0"),decimals:6,virtualA:new xe("1073471847374405"),virtualB:new xe("30050573465"),realA:new xe(0),realB:new xe(0),protocolFee:new xe(0),platformId:new Ws("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new xe(0),cliffPeriod:new xe(0),unlockPeriod:new xe(0),startTime:new xe(0),totalAllocatedShare:new xe(0)}},JB=new xe(1e4);var qs={[ai.toBase58()]:3};var Us=O([J(5),J(8),h("ownAddress"),l("vaultSignerNonce"),h("baseMint"),h("quoteMint"),h("baseVault"),l("baseDepositsTotal"),l("baseFeesAccrued"),h("quoteVault"),l("quoteDepositsTotal"),l("quoteFeesAccrued"),l("quoteDustThreshold"),h("requestQueue"),h("eventQueue"),h("bids"),h("asks"),l("baseLotSize"),l("quoteLotSize"),l("feeRateBps"),l("referrerRebatesAccrued"),J(7)]);import{PublicKey as TS}from"@solana/web3.js";var KS=ee("Serum");import{ASSOCIATED_TOKEN_PROGRAM_ID as vS,TOKEN_2022_PROGRAM_ID as VS,TOKEN_PROGRAM_ID as _S}from"@solana/spl-token";import{PublicKey as DS,SystemProgram as WS,TransactionInstruction as qS}from"@solana/web3.js";import GS from"bn.js";var XK=new Gs(0);import{PublicKey as zs,Transaction as So,TransactionInstruction as Xs}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ys}from"@solana/spl-token";import ir from"bn.js";var Me=class extends Ve{static getPdaPoolId(e,t){return ae([Me.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([Me.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new ir(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(u=>Me.getPdaPoolId(t,u).publicKey),a=[];for(let u=0;u<Me.VERSION_PROJECT.length;u++)a.push(...r.map(d=>Me.getPdaOwnerId(t,d,o,u).publicKey));let s=await ve(e,[...r,...a]),c=[];for(let u=0;u<s.length;u++){let d=Math.floor(u/n.length),g=u%n.length,m=r[g],p=a[u],f=s[g],b=s[n.length+u];if(!(f&&b)||f.data.length!==Me.POOL_LAYOUT.span||b.data.length!==Me.OWNER_LAYOUT.span)continue;let w=Me.POOL_LAYOUT.decode(f.data),A=Me.OWNER_LAYOUT.decode(b.data),T=w.openTime.toNumber(),I=w.endTime.toNumber(),P=A.tokenInfo.map(S=>S.debtAmount.gt(new ir(0))).filter(S=>!S).length!==3,k=i>T&&i<I&&w.status===1,B=P&&k;c.push({programId:t,poolId:m,ammId:w.ammId,ownerAccountId:p,snapshotLpAmount:A.lpAmount,project:Me.VERSION_PROJECT[d],openTime:T,endTime:I,canClaim:B,canClaimErrorType:P?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:w.tokenInfo.map((S,K)=>({mintAddress:S.mintAddress,mintVault:S.mintVault,mintDecimals:S.mintDecimals,perLpLoss:S.perLpLoss,debtAmount:A.tokenInfo[K].debtAmount.add(A.tokenInfo[K].claimedAmount)}))})}return c}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 c of e.tokenInfo){let{account:u,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(Ce.WSOL.mint),associatedOnly:c.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});d&&o.addInstruction(d),r.push(u)}o.addInstruction({instructions:[Me.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:s}=o.build();return[{transaction:a,signer:s}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let u of e){let d=[];for(let g of u.tokenInfo){let{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:g.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:g.mintAddress.equals(Ce.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!g.mintAddress.equals(Ce.WSOL.mint),associatedOnly:g.mintAddress.equals(Ce.WSOL.mint)?!1:t.associatedOnly});p&&o.addInstruction(p),m&&(r[g.mintAddress.toString()]=m,d.push(m))}o.addInstruction({instructions:[Me.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:d}})]})}let{transaction:a,signers:s}=o.build(),c=o.allInstructions;return io(c,[i,...s.map(u=>u.publicKey)])?[{transaction:a,signer:s}]:[{transaction:new So().add(...c.slice(0,o.AllTxData.instructions.length-1)),signer:s},{transaction:new So().add(...c.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new So().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=O([]),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(s=>({pubkey:s,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:s})=>({pubkey:s,isSigner:!1,isWritable:!0})),{pubkey:Ys,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 Xs({keys:i,programId:e,data:a})}},rt=Me;rt.CLAIMED_NUM=3,rt.POOL_LAYOUT=O([J(8),N("bump"),N("status"),l("openTime"),l("endTime"),h("ammId"),D(O([N("mintDecimals"),h("mintAddress"),h("mintVault"),l("perLpLoss"),l("totalClaimedAmount")]),Me.CLAIMED_NUM,"tokenInfo"),D(l(),10,"padding")]),rt.OWNER_LAYOUT=O([J(8),N("bump"),N("version"),h("poolId"),h("owner"),l("lpAmount"),D(O([h("mintAddress"),l("debtAmount"),l("claimedAmount")]),Me.CLAIMED_NUM,"tokenInfo"),D(l(),4,"padding")]),rt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new zs(e)),rt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},rt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as cx}from"@solana/web3.js";import{getTransferFeeConfig as mx,MintLayout as dx,TOKEN_2022_PROGRAM_ID as px,TOKEN_PROGRAM_ID as fx,unpackMint as yx}from"@solana/spl-token";var UC=new Ct(2),GC=new Ct(3),zC=new Ct(5),Qn=new Ct(10),XC=new Ct(100),YC=new Ct(1e3),QC=new Ct(1e4);function Jn(y){return Qn.pow(Be(y))}function Xn(y,e=1,t=[]){let n=[...y];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{createAssociatedTokenAccountIdempotentInstruction as ft,TOKEN_2022_PROGRAM_ID as et,TOKEN_PROGRAM_ID as Xt}from"@solana/spl-token";import{PublicKey as R}from"@solana/web3.js";import we from"bn.js";import yt from"decimal.js";var Dn=class extends Ve{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var P;let{programId:t,owner:n=((P=this.scope.owner)==null?void 0:P.publicKey)||R.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:s,txVersion:c,txTipConfig:u,feePayer:d}=e,g=this.createTxBuilder(d),[m,p,f]=new we(new R(o.address).toBuffer()).gt(new we(new R(i.address).toBuffer()))?[i,o,new yt(1).div(a)]:[o,i,a],b=G.priceToSqrtPriceX64(f,m.decimals,p.decimals),w=[],A=[];m.programId===et.toBase58()&&A.push(xt(t,new R(m.address)).publicKey),p.programId===et.toBase58()&&A.push(xt(t,new R(p.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(A)).forEach((k,B)=>{k&&w.push(A[B])});let I=await j.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:m,mintB:p,ammConfigId:r.id,initialPriceX64:b,extendMintAccount:w});return g.addInstruction(I),g.addCustomComputeBudget(s),g.addTipInstruction(u),g.versionBuild({txVersion:c,extInfo:{address:q(F({},I.address),{observationId:I.address.observationId.toBase58(),exBitmapAccount:I.address.exBitmapAccount.toBase58(),programId:t.toString(),id:I.address.poolId.toString(),mintA:m,mintB:p,openTime:"0",vault:{A:I.address.mintAVault.toString(),B:I.address.mintBVault.toString()},rewardInfos:[],config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:F({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:I.address.poolId.toString(),mintA:m,mintB:p,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:f.toNumber(),config:{id:r.id.toString(),index:r.index,protocolFeeRate:r.protocolFeeRate,tradeFeeRate:r.tradeFeeRate,tickSpacing:r.tickSpacing,fundFeeRate:r.fundFeeRate,description:r.description,defaultRange:0,defaultRangePoint:[]},feeOn:"Both",hasDynamicFee:!1,launchMigratePool:!1,burnPercent:0,tips:[]},Nn)}})}async createCustomizablePool(e){var K;let{programId:t,owner:n=((K=this.scope.owner)==null?void 0:K.publicKey)||R.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOn:s=0,dynamicFeeConfig:c,computeBudgetConfig:u,txVersion:d,txTipConfig:g,feePayer:m,addSupportMintExt:p}=e,f=this.createTxBuilder(m),[b,w,A]=new we(new R(o.address).toBuffer()).gt(new we(new R(i.address).toBuffer()))?[i,o,new yt(1).div(r)]:[o,i,r],T=G.priceToSqrtPriceX64(A,b.decimals,w.decimals),I=[],P=[];p&&(b.programId===et.toBase58()&&P.push(xt(t,new R(b.address)).publicKey),w.programId===et.toBase58()&&P.push(xt(t,new R(w.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((U,_)=>{U&&I.push(P[_])}));let{address:k}=await j.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:w,ammConfigId:a.id,initialPriceX64:T,extendMintAccount:I}),B=[];if(c){if(!await this.scope.connection.getAccountInfo(c))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",c.toBase58()),B.push({pubkey:c,isSigner:!1,isWritable:!1})}let S=j.createCustomizablePoolInstruction(t,k.poolId,this.scope.ownerPubKey,a.id,k.mintA,k.mintB,k.mintAVault,k.mintBVault,k.observationId,k.exBitmapAccount,k.mintAProgram,k.mintBProgram,T,s,[...I,...B.map(L=>L.pubkey)],c);return f.addInstruction({instructions:[S]}),f.addCustomComputeBudget(u),f.addTipInstruction(g),f.versionBuild({txVersion:d,extInfo:{address:q(F({},k),{observationId:k.observationId.toBase58(),exBitmapAccount:k.exBitmapAccount.toBase58(),programId:t.toString(),id:k.poolId.toString(),mintA:b,mintB:w,openTime:"0",vault:{A:k.mintAVault.toString(),B:k.mintBVault.toString()},rewardInfos:[],config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:F({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.poolId.toString(),mintA:b,mintB:w,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:s,feeOn:s===0?"Both":s===1?"TokenA":"TokenB",hasDynamicFee:!!c,tips:[],launchMigratePool:!1},Nn)}})}async createPermissionedPool(e){var U;let{programId:t,owner:n=((U=this.scope.owner)==null?void 0:U.publicKey)||R.default,mint1:o,mint2:i,initialPrice:r,ammConfig:a,collectFeeOn:s=0,dynamicFeeConfig:c,computeBudgetConfig:u,txVersion:d,txTipConfig:g,feePayer:m,addSupportMintExt:p}=e,f=this.createTxBuilder(m),[b,w,A]=new we(new R(o.address).toBuffer()).gt(new we(new R(i.address).toBuffer()))?[i,o,new yt(1).div(r)]:[o,i,r],T=G.priceToSqrtPriceX64(A,b.decimals,w.decimals),I=[],P=[];p&&(b.programId===et.toBase58()&&P.push(xt(t,new R(b.address)).publicKey),w.programId===et.toBase58()&&P.push(xt(t,new R(w.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(P)).forEach((v,V)=>{v&&I.push(P[V])}));let k=m!=null?m:this.scope.ownerPubKey,B=Math.floor(Math.random()*Math.pow(2,16))+1,{address:S}=await j.createPermissionedPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:b,mintB:w,ammConfigId:a.id,initialPriceX64:T,extendMintAccount:I,payer:k,seedIndex:B}),K=[];if(c){if(!await this.scope.connection.getAccountInfo(c))throw new Error("Dynamic Fee Config not found. Run 03_admin_create_dynamic_fee_config.ts first.");console.log("Dynamic Fee Config",c.toBase58()),K.push({pubkey:c,isSigner:!1,isWritable:!1})}let L=j.createPermissionedPoolInstruction(t,k,k,S.permission,a.id,S.poolId,S.mintA,S.mintB,S.mintAVault,S.mintBVault,S.observationId,S.exBitmapAccount,S.mintAProgram,S.mintBProgram,T,s,B,[...I,...K.map(_=>_.pubkey)],c);return f.addInstruction({instructions:[L]}),f.addCustomComputeBudget(u),f.addTipInstruction(g),f.versionBuild({txVersion:d,extInfo:{address:q(F({},S),{observationId:S.observationId.toBase58(),exBitmapAccount:S.exBitmapAccount.toBase58(),programId:t.toString(),id:S.poolId.toString(),mintA:b,mintB:w,openTime:"0",vault:{A:S.mintAVault.toString(),B:S.mintBVault.toString()},rewardInfos:[],config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:F({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:S.poolId.toString(),mintA:b,mintB:w,feeRate:a.tradeFeeRate,openTime:"0",programId:t.toString(),price:A.toNumber(),config:{id:a.id.toString(),index:a.index,protocolFeeRate:a.protocolFeeRate,tradeFeeRate:a.tradeFeeRate,tickSpacing:a.tickSpacing,fundFeeRate:a.fundFeeRate,description:a.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0,collectFeeOn:s,feeOn:s===0?"Both":s===1?"TokenA":"TokenB",hasDynamicFee:!!c,tips:[],launchMigratePool:!1},Nn)}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r=null,baseAmount:a,otherAmountMax:s,liquidity:c=new we(0),nft2022:u,associatedOnly:d=!0,checkCreateATAOwner:g=!1,withMetadata:m="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:b,txVersion:w,feePayer:A}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let T=this.createTxBuilder(A),I=null,P=null,k=n.useSOLBalance&&e.mintA.address===Y.toString(),B=n.useSOLBalance&&e.mintB.address===Y.toString(),[S,K]=r==="MintA"?[a,s]:[s,a],{account:L,instructionParams:U}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||S.isZero()?{payer:this.scope.ownerPubKey,amount:S}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:d,checkCreateATAOwner:g});L&&(I=L),T.addInstruction(U||{});let{account:_,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:B||K.isZero()?{payer:this.scope.ownerPubKey,amount:K}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:d,checkCreateATAOwner:g});_&&(P=_),T.addInstruction(v||{}),(!I||!P)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:I==null?void 0:I.toBase58(),ownerTokenAccountB:P==null?void 0:P.toBase58()});let V=t!=null?t:await this.getClmmPoolKeys(e.id.toString()),E=await j.openPositionFromBaseInstructions({poolInfo:e,poolKeys:V,ownerInfo:q(F({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:I,tokenAccountB:P}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:s,liquidity:c,withMetadata:m,getEphemeralSigners:p,nft2022:u});return T.addInstruction(E),T.addCustomComputeBudget(f),T.addTipInstruction(b),T.versionBuild({txVersion:w,extInfo:F({},E.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,base:r=null,tickLower:a,tickUpper:s,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:d=!1,withMetadata:g="create",txVersion:m,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:b,nft2022:w,feePayer:A}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let T=this.createTxBuilder(A),I=null,P=null,k=n.useSOLBalance&&e.mintA.address===Y.toBase58(),B=n.useSOLBalance&&e.mintB.address===Y.toBase58(),{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:d});S&&(I=S),T.addInstruction(K||{});let{account:L,instructionParams:U}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:B||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:B?!1:u,checkCreateATAOwner:d});L&&(P=L),T.addInstruction(U||{}),(I===void 0||P===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let _=t||await this.getClmmPoolKeys(e.id.toString()),v=await j.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:_,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:I,tokenAccountB:P},tickLower:a,tickUpper:s,liquidity:c,amountMaxA:o,amountMaxB:i,base:r,withMetadata:g,getEphemeralSigners:b,nft2022:w});return T.addInstruction(v),T.addCustomComputeBudget(p),T.addTipInstruction(f),T.versionBuild({txVersion:m,extInfo:{address:v.address}})}async increasePositionFromLiquidity(e){var L;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:s,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:d,txTipConfig:g,txVersion:m,feePayer:p}=e,f=this.createTxBuilder(p),b,w,A=s.useSOLBalance&&t.mintA.address===Y.toString(),T=s.useSOLBalance&&t.mintB.address===Y.toString(),{account:I,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new R(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});I&&(b=I),f.addInstruction(P||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new R(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:c,checkCreateATAOwner:u});k&&(w=k),f.addInstruction(B||{}),!b&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=n!=null?n:await this.getClmmPoolKeys(t.id),K=j.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:w},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(L=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:L.owner.equals(et)});return f.addInstruction(K),f.addCustomComputeBudget(d),f.addTipInstruction(g),f.versionBuild({txVersion:m,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:u,txTipConfig:d,txVersion:g,feePayer:m}=e,p=this.createTxBuilder(m),f,b,w=a.useSOLBalance&&t.mintA.address===Y.toString(),A=a.useSOLBalance&&t.mintB.address===Y.toString(),{account:T,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new R(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:w||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!w,associatedOnly:w?!1:s,checkCreateATAOwner:c});T&&(f=T),p.addInstruction(I||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new R(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:s,checkCreateATAOwner:c});P&&(b=P),p.addInstruction(k||{}),!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),S=j.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(et)});return p.addInstruction(S),p.addCustomComputeBudget(u),p.addTipInstruction(d),p.versionBuild({txVersion:g,extInfo:{address:S.address}})}async decreaseLiquidity(e){var v;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:s,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:d,txTipConfig:g,txVersion:m,feePayer:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let f=this.createTxBuilder(p),b=i.useSOLBalance&&t.mintA.address===Y.toString(),w=i.useSOLBalance&&t.mintB.address===Y.toString(),A,T,{account:I,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new R(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});A=I,P&&f.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new R(t.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});T=k,B&&f.addInstruction(B);let S=n!=null?n:await this.getClmmPoolKeys(t.id),K=[];for(let V of S.rewardInfos){let E=i.useSOLBalance&&V.mint.address===Y.toString(),H;if(V.mint.address===t.mintA.address)H=A;else if(V.mint.address===t.mintB.address)H=T;else{let{account:ce,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(V.mint.programId),mint:new R(V.mint.address),notUseTokenAccount:E,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!E,associatedOnly:E?!1:c,checkCreateATAOwner:u});H=ce,se&&f.addInstruction(se)}K.push(H)}!A&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let L=(v=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:v.owner.equals(et),U=await j.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:T,rewardAccounts:K},liquidity:s,amountMinA:r,amountMinB:a,nft2022:L});f.addInstruction({instructions:U.instructions,instructionTypes:[$.ClmmDecreasePosition]});let _=F({},U.address);if(i.closePosition){let V=await j.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:L});f.addInstruction({endInstructions:V.instructions,endInstructionTypes:V.instructionTypes}),_=F(F({},_),V.address)}return f.addCustomComputeBudget(d),f.addTipInstruction(g),f.versionBuild({txVersion:m,extInfo:{address:_}})}async lockPosition(e){var p;let{programId:t=on,authProgramId:n=Rn,poolProgramId:o=At,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:s,txVersion:c,getEphemeralSigners:u,feePayer:d}=e,g=this.createTxBuilder(d),m=await j.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:u,nft2022:(p=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:p.owner.equals(et)});return g.addInstruction(m),g.addCustomComputeBudget(a),g.addTipInstruction(s),g.versionBuild({txVersion:c,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=on,authProgramId:n=Rn,clmmProgram:o=At,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:u,txTipConfig:d,txVersion:g,feePayer:m}=e,p=i||await this.getClmmPoolKeys(r.poolId.toString()),f=this.createTxBuilder(m),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let w=Mn.decode(b.data),A=a.useSOLBalance&&p.mintA.address===Y.toString(),T=a.useSOLBalance&&p.mintB.address===Y.toString(),I,P,{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintA.programId,mint:new R(p.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:s,checkCreateATAOwner:c});I=k,B&&f.addInstruction(B);let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p.mintB.programId,mint:new R(p.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,associatedOnly:T?!1:s,checkCreateATAOwner:c});P=S,K&&f.addInstruction(K);let L={},U=[];for(let Fe of p.rewardInfos){let Ne=a.useSOLBalance&&Fe.mint.address===Y.toString(),Ie=L[Fe.mint.address];if(!Ie){let{account:Un,instructionParams:Ko}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(Fe.mint.programId),mint:new R(Fe.mint.address),notUseTokenAccount:Ne,owner:this.scope.ownerPubKey,skipCloseAccount:!Ne,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:Ne?!1:s});Ie=Un,Ko&&f.addInstruction(Ko)}L[Fe.mint.address]=Ie,U.push(Ie)}let _=Wt(t,r.lockNftMint).publicKey,v=Z(this.scope.ownerPubKey,r.lockNftMint,Xt).publicKey,V=Q.getTickArrayStartIndex(w.tickLower,p.config.tickSpacing),E=Q.getTickArrayStartIndex(w.tickUpper,p.config.tickSpacing),{publicKey:H}=oe(new R(p.programId),r.poolId,V),{publicKey:ce}=oe(new R(p.programId),r.poolId,E),{publicKey:se}=nt(new R(p.programId),r.poolId,w.tickLower,w.tickUpper),de=[];for(let Fe=0;Fe<p.rewardInfos.length;Fe++){let Ne=p.rewardInfos[Fe].mint.address,Ie=L[Ne];Ie&&de.push({poolRewardVault:new R(p.rewardInfos[Fe].vault),ownerRewardVault:Ie,rewardMint:new R(Ne)})}let bt=await j.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:_,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:v,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:se,vaultA:new R(p.vault.A),vaultB:new R(p.vault.B),tickArrayLower:H,tickArrayUpper:ce,userVaultA:I,userVaultB:P,mintA:new R(p.mintA.address),mintB:new R(p.mintB.address),rewardAccounts:de,exTickArrayBitmap:le(o,r.poolId).publicKey});return f.addInstruction({instructions:[bt],instructionTypes:[$.ClmmHarvestLockPosition]}),f.addCustomComputeBudget(u),f.addTipInstruction(d),f.versionBuild({txVersion:g})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var d;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let s=this.createTxBuilder(a),c=t!=null?t:await this.getClmmPoolKeys(e.id),u=j.closePositionInstructions({poolInfo:e,poolKeys:c,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(d=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:d.owner.equals(et)});return s.addCustomComputeBudget(i),s.addTipInstruction(r),s.addInstruction(u).versionBuild({txVersion:o,extInfo:{address:u.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:s}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(s),u=t.useSOLBalance&&n.mint.address.toString()===Y.toString(),d=n.perSecond.mul(n.endTime-n.openTime),{account:g,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(n.mint.programId),mint:new R(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new we(new yt(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),g||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=j.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:g},rewardInfo:{programId:new R(n.mint.programId),mint:new R(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:qt(n.perSecond)}});return c.addInstruction(f),c.addCustomComputeBudget(r),c.versionBuild({txVersion:a,extInfo:{address:f.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:s,txVersion:c,feePayer:u}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=this.createTxBuilder(u),g={};for(let m of o){let p=n.useSOLBalance&&m.mint.address===Y.toString(),f=m.perSecond.mul(m.endTime-m.openTime),{account:b,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(m.mint.programId),mint:new R(m.mint.address),notUseTokenAccount:!!p,skipCloseAccount:!p,owner:this.scope.ownerPubKey,createInfo:p?{payer:n.feePayer||this.scope.ownerPubKey,amount:new we(new yt(f.toFixed(0)).gte(f)?f.toFixed(0):f.add(1).toFixed(0))}:void 0,associatedOnly:p?!1:i,checkCreateATAOwner:r});w&&d.addInstruction(w),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),T=j.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new R(m.mint.programId),mint:new R(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:qt(m.perSecond)}});g=F(F({},g),T.address),d.addInstruction(T)}return d.addCustomComputeBudget(a),d.addTipInstruction(s),d.versionBuild({txVersion:c,extInfo:{address:g}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:s,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),d=t.useSOLBalance&&n.mint.equals(Y),{account:g,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:t.feePayer||this.scope.ownerPubKey,amount:new we(new yt(n.perSecond.mul(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.mul(n.endTime-n.openTime))?n.perSecond.mul(n.endTime-n.openTime).toFixed(0):n.perSecond.mul(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:i});m&&u.addInstruction(m),g||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=j.setRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:g},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:qt(n.perSecond)}});return u.addInstruction(f),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:s,extInfo:{address:f.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:s,txVersion:c,feePayer:u}){let d=this.createTxBuilder(u),g={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let p=n.useSOLBalance&&m.mint.address===Y.toString(),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(m.mint.programId),mint:new R(m.mint.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:p?{payer:n.feePayer||this.scope.ownerPubKey,amount:new we(new yt(m.perSecond.mul(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.mul(m.endTime-m.openTime))?m.perSecond.mul(m.endTime-m.openTime).toFixed(0):m.perSecond.mul(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:p?!1:i,checkCreateATAOwner:r});b&&d.addInstruction(b),f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let w=t!=null?t:await this.getClmmPoolKeys(e.id),A=j.setRewardInstructions({poolInfo:e,poolKeys:w,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardInfo:{mint:new R(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:qt(m.perSecond)}});d.addInstruction(A),g=F(F({},g),A.address)}return d.addCustomComputeBudget(a),d.addTipInstruction(s),d.versionBuild({txVersion:c,extInfo:{address:g}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:s,feePayer:c}){let u=e.rewardDefaultInfos.find(w=>w.mint.address===n.toString());u||this.logAndCreateError("reward mint error","not found reward mint",n);let d=this.createTxBuilder(c),g=t.useSOLBalance&&n.equals(Y),{account:m,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(u.mint.programId),mint:n,notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:g?!1:o,checkCreateATAOwner:i});p&&d.addInstruction(p),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=j.collectRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:n});return d.addInstruction(b),d.addCustomComputeBudget(r),d.addTipInstruction(a),d.versionBuild({txVersion:s,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:s}){let c=this.createTxBuilder(s),u={};for(let d of n){let g=e.rewardDefaultInfos.find(A=>A.mint.address===d.toString());if(!g){this.logAndCreateError("reward mint error","not found reward mint",d);continue}let m=t.useSOLBalance&&d.equals(Y),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(g.mint.programId),mint:d,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:o,checkCreateATAOwner:i});p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),f&&c.addInstruction(f);let b=await this.getClmmPoolKeys(e.id),w=j.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:d});c.addInstruction(w),u=F(F({},u),w.address)}return c.addCustomComputeBudget(r),c.addTipInstruction(a),c.build({address:u})}async openLimitOrder({poolInfo:e,baseIn:t=!0,orderTick:n,amount:o,noneIndex:i=0,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,feePayer:c,computeBudgetConfig:u,txTipConfig:d,txVersion:g}){let m=new R(e.id),p=new R(e.programId),f=t?new R(e.mintA.address):new R(e.mintB.address),b=t?new R(e.mintB.address):new R(e.mintA.address),w=new R(e[t?"mintA":"mintB"].programId),A=new R(e[t?"mintB":"mintA"].programId),T=f.equals(Y),I=b.equals(Y),P=a.useSOLBalance&&T,k=a.useSOLBalance&&I,B=this.createTxBuilder(),S=P||!s?void 0:Z(this.scope.ownerPubKey,f,w).publicKey;if(S)B.addInstruction({instructions:[ft(this.scope.ownerPubKey,S,this.scope.ownerPubKey,f,w)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w,mint:f,notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!P});S=se,de&&B.addInstruction(de)}let K=k||!s?void 0:Z(this.scope.ownerPubKey,b,A).publicKey;if(K)B.addInstruction({instructions:[ft(this.scope.ownerPubKey,K,this.scope.ownerPubKey,b,A)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:A,mint:b,notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:o},associatedOnly:!k});K=se,de&&B.addInstruction(de)}let L=Ni(p,this.scope.ownerPubKey,i).publicKey,U=await this.scope.connection.getAccountInfo(L),_=U?ki.decode(U.data).orderNonce:new we(0),v=Oi(p,c||this.scope.ownerPubKey,L,_).publicKey,V=Q.getTickArrayStartIndex(n,e.config.tickSpacing),E=oe(p,m,V).publicKey,H=Ue(p,m,new R(e[t?"mintA":"mintB"].address)).publicKey,ce=Ue(p,m,new R(e[t?"mintB":"mintA"].address)).publicKey;return B.addInstruction({instructions:[j.openLimitOrderInstruction(p,c||this.scope.ownerPubKey,m,E,L,v,S,K,H,ce,f,b,w,i,t,n,o,r)]}),B.addCustomComputeBudget(u),B.addTipInstruction(d),B.versionBuild({txVersion:g,extInfo:{limitOrder:v}})}async increaseLimitOrder({poolInfo:e,limitOrder:t,amount:n,ownerInfo:o={useSOLBalance:!0},associatedOnly:i=!0,feePayer:r,computeBudgetConfig:a,txTipConfig:s,txVersion:c}){let u=new R(e.id),d=new R(e.programId),g=await this.scope.connection.getAccountInfo(t);g||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let m=St.decode(g.data),p=m.zeroForOne?new R(e.mintA.address):new R(e.mintB.address),f=new R(e[m.zeroForOne?"mintA":"mintB"].programId),b=p.equals(Y),w=o.useSOLBalance&&b,A=this.createTxBuilder(),T=w||!i?void 0:Z(this.scope.ownerPubKey,p,f).publicKey;if(T)A.addInstruction({instructions:[ft(this.scope.ownerPubKey,T,this.scope.ownerPubKey,p,f)]});else{let{account:B,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f,mint:p,notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:n},associatedOnly:!w});T=B,S&&A.addInstruction(S)}let I=Ue(d,u,new R(e[m.zeroForOne?"mintA":"mintB"].address)).publicKey,P=Q.getTickArrayStartIndex(m.tick,e.config.tickSpacing),k=oe(d,u,P).publicKey;return A.addInstruction({instructions:[j.increaseLimitOrderInstruction(d,r||this.scope.ownerPubKey,m.poolId,k,t,T,I,p,f,n)]}),A.addCustomComputeBudget(a),A.addTipInstruction(s),A.versionBuild({txVersion:c})}async decreaseLimitOrder({poolInfo:e,limitOrder:t,limitOrderInfo:n,amount:o,slippage:i=1e3,tickArrayBitmap:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:s=!0,feePayer:c,computeBudgetConfig:u,txTipConfig:d,txVersion:g,forerunCreate:m}){let p=new R(e.id),f=new R(e.programId),b=n;if(!b){let se=await this.scope.connection.getAccountInfo(t);se||this.logAndCreateError(`limit order ${t.toBase58()} not exist`),b=St.decode(se.data)}let w=o.muln(1e4-i).divn(1e4),A=kt.getUnFilledAmount({orderInfo:b});(A.isZero()||o.gt(A))&&this.logAndCreateError(`amount should be less than unfulfilled amount: ${A.toString()}, amount: ${o.toString()}`);let[T,I]=b.zeroForOne?[new R(e.mintA.address),new R(e.mintB.address)]:[new R(e.mintB.address),new R(e.mintA.address)],[P,k]=b.zeroForOne?[new R(e.mintA.programId),new R(e.mintB.programId)]:[new R(e.mintB.programId),new R(e.mintA.programId)],[B,S]=[T.equals(Y),I.equals(Y)],[K,L]=[a.useSOLBalance&&B,a.useSOLBalance&&S],U=this.createTxBuilder(),_=K||!s?void 0:Z(this.scope.ownerPubKey,T,P).publicKey,v=L||!s?void 0:Z(this.scope.ownerPubKey,I,k).publicKey;if(_)U.addInstruction({instructions:[ft(this.scope.ownerPubKey,_,this.scope.ownerPubKey,T,P)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:P,mint:T,notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!K});_=se,de&&U.addInstruction(de)}if(v)U.addInstruction({instructions:[ft(this.scope.ownerPubKey,v,this.scope.ownerPubKey,I,k)]});else{let{account:se,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k,mint:I,notUseTokenAccount:L,owner:this.scope.ownerPubKey,skipCloseAccount:!L,createInfo:{payer:a.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!L});v=se,de&&U.addInstruction(de)}let[V,E]=[Ue(f,p,T).publicKey,Ue(f,p,I).publicKey],H=Q.getTickArrayStartIndex(b.tick,e.config.tickSpacing),ce=oe(f,p,H).publicKey;return U.addInstruction({instructions:[j.decreaseLimitOrderInstruction(f,c||this.scope.ownerPubKey,p,ce,t,_,v,V,E,T,I,o,w,r)]}),U.addCustomComputeBudget(u),U.addTipInstruction(d),U.versionBuild({txVersion:g,extInfo:{forerunCreate:m}})}async closeLimitOrder({programId:e=At,limitOrder:t,autoWithdraw:n=!0,tickArrayBitmap:o,slippage:i=0,feePayer:r,computeBudgetConfig:a,txTipConfig:s,txVersion:c}){let u=await this.scope.connection.getAccountInfo(t);u||this.logAndCreateError(`limit order ${t.toBase58()} not exist`);let d=St.decode(u.data),g=kt.getUnFilledAmount({orderInfo:d});!n&&!g.isZero()&&this.logAndCreateError(`unfulfilled amount should be 0, (${g.toString()} remaining), please withdraw first or set autoWithdraw: true`);let m=this.createTxBuilder(),p=(await this.scope.api.fetchPoolById({ids:d.poolId.toBase58()}))[0];p||(p=(await this.getSimplePoolInfo(d.poolId)).poolInfo);let f=await qe.fetchTickArrayInfo({connection:this.scope.connection,programId:e,poolId:d.poolId,tick:d.tick,tickSpacing:p.config.tickSpacing}),b=kt.settleFilledOrder({orderInfo:d,tickInfo:f.ticks.find(w=>w.tick===d.tick)});if(g.isZero()){if(!b.isZero()){let w=await this.settleLimitOrder({limitOrder:t});m.addInstruction(F({},w.builder.AllTxData))}}else{let{builder:w}=await this.decreaseLimitOrder({poolInfo:p,limitOrder:t,limitOrderInfo:d,amount:g,tickArrayBitmap:o,slippage:i,txVersion:0});m.addInstruction({instructions:w.allInstructions})}return m.addInstruction({instructions:[j.closeLimitOrderInstruction(e,r||this.scope.ownerPubKey,this.scope.ownerPubKey,t)]}),m.addCustomComputeBudget(a),m.addTipInstruction(s),m.versionBuild({txVersion:c})}async closeAllLimitOrder({programId:e=At,limitOrders:t,autoWithdraw:n=!0,slippage:o=1e4,feePayer:i,computeBudgetConfig:r,txVersion:a}){let s=this.createTxBuilder(),u=(await ve(this.scope.connection,t)).map((A,T)=>A?q(F({},St.decode(A.data)),{pda:t[T]}):null),d=u.filter(Boolean),g=d.map(A=>A.poolId.toBase58()),m=(await this.scope.api.fetchPoolById({ids:g.join(",")})).filter(Boolean),p={};m.forEach(A=>p[A.id]=A);let f=await qe.fetchMultipleTickArrayInfo({connection:this.scope.connection,tickInfoList:d.map(A=>({programId:e,poolId:A.poolId,tick:A.tick,tickSpacing:p[A.poolId.toString()].config.tickSpacing}))}),b={};f.forEach((A,T)=>{!A||(b[d[T].pda.toBase58()]=A)});let w=0;for(let A of t){let T=u[w];if(!T){w++;continue}let I=kt.getUnFilledAmount({orderInfo:T});!n&&!I.isZero()&&this.logAndCreateError(`${A.toBase58()} order unfulfilled amount should be 0 (${I.toString()} remaining), please withdraw first or set autoWithdraw: true`);let P=p[T.poolId.toBase58()],k=b[A.toBase58()],B=kt.settleFilledOrder({orderInfo:T,tickInfo:k.ticks.find(S=>S.tick===T.tick)});if(I.isZero()){if(!B.isZero()){let S=await this.settleLimitOrder({limitOrder:A,forerunCreate:!0});s.addInstruction(F({},S.builder.AllTxData))}}else{let{builder:S}=await this.decreaseLimitOrder({poolInfo:P,limitOrder:A,limitOrderInfo:T,amount:I,slippage:o,txVersion:0,forerunCreate:!0});s.addInstruction({instructions:S.allInstructions})}s.addInstruction({instructions:[j.closeLimitOrderInstruction(e,i||this.scope.ownerPubKey,this.scope.ownerPubKey,A)]}),w++}return a===0?s.sizeCheckBuildV0({computeBudgetConfig:r}):s.sizeCheckBuild({computeBudgetConfig:r})}async settleLimitOrder({limitOrder:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txTipConfig:r,txVersion:a,forerunCreate:s}){let c=await this.scope.connection.getAccountInfo(e);c||this.logAndCreateError(`limit order ${e.toBase58()} not exist`);let u=St.decode(c.data),d=(await this.scope.api.fetchPoolById({ids:u.poolId.toBase58()}))[0];d||(d=(await this.getSimplePoolInfo(u.poolId)).poolInfo);let g=u.zeroForOne?d.mintB:d.mintA,[m,p]=[new R(g.address),new R(g.programId)],f=new R(d.programId),b=this.createTxBuilder(),w=m.equals(Y),A=n.useSOLBalance&&w,T=A||!o?void 0:Z(this.scope.ownerPubKey,m,p).publicKey;if(T)b.addInstruction({instructions:[ft(this.scope.ownerPubKey,T,this.scope.ownerPubKey,m,p)]});else{let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:p,mint:m,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});T=P,k&&b.addInstruction(k)}let I=Q.getTickArrayStartIndex(u.tick,d.config.tickSpacing);return b.addInstruction({instructions:[j.settleLimitOrderInstruction(f,t||this.scope.ownerPubKey,u.poolId,oe(f,u.poolId,I).publicKey,e,T,Ue(f,u.poolId,m).publicKey,m,p)]}),b.addCustomComputeBudget(i),b.addTipInstruction(r),b.versionBuild({txVersion:a,extInfo:{forerunCreate:s}})}async settleAllLimitOrder({limitOrders:e,feePayer:t,ownerInfo:n={useSOLBalance:!0},associatedOnly:o=!0,computeBudgetConfig:i,txVersion:r}){let a=await ve(this.scope.connection,e),s=[],c=a.map((m,p)=>{if(!m)return;let f=St.decode(m.data);return s.push(f.poolId.toString()),q(F({},f),{pda:e[p]})}),u=await this.scope.api.fetchPoolById({ids:s.join(",")});u.filter(Boolean).length||(u=(await Promise.all(s.map(p=>this.getSimplePoolInfo(p)))).map(p=>p.poolInfo));let d=this.createTxBuilder(),g={};for(let m of c){if(!m)continue;let p=u.find(B=>B.id===m.poolId.toBase58());if(!p)continue;let f=new R(p.programId),b=new R(m.zeroForOne?p.mintB.address:p.mintA.address),w=b.equals(Y),A=n.useSOLBalance&&w,T=new R(w?Xt:(await this.scope.token.getTokenInfo(b)).programId),I=g[b.toBase58()],P=A||!o?void 0:Z(this.scope.ownerPubKey,b,T).publicKey;if(I)P=I;else{if(P)d.addInstruction({instructions:[ft(this.scope.ownerPubKey,P,this.scope.ownerPubKey,b,T)]});else{let{account:B,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:T,mint:b,notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:!A});P=B,S&&d.addInstruction(S)}g[b.toBase58()]=P}let k=Q.getTickArrayStartIndex(m.tick,p.config.tickSpacing);d.addInstruction({instructions:[j.settleLimitOrderInstruction(f,t||this.scope.ownerPubKey,m.poolId,oe(f,m.poolId,k).publicKey,m.pda,P,Ue(f,m.poolId,b).publicKey,b,T)]})}return r===0?d.sizeCheckBuildV0({computeBudgetConfig:i}):d.sizeCheckBuild({computeBudgetConfig:i})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:s,remainingAccounts:c,associatedOnly:u=!0,checkCreateATAOwner:d=!1,txVersion:g,computeBudgetConfig:m,txTipConfig:p,feePayer:f}){let b=this.createTxBuilder(f),w=n.toString()===e.mintA.address.toString(),A=s.useSOLBalance&&e.mintA.address.toString()===Y.toBase58(),T=s.useSOLBalance&&e.mintB.address.toString()===Y.toBase58(),I;!r||r.equals(new yt(0))?I=w?He.add(new we(1)):je.sub(new we(1)):I=G.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?o:0}:void 0,associatedOnly:A?!1:u,checkCreateATAOwner:d});P=S,K&&b.addInstruction(K)}let k;if(!k){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:T||w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?0:o}:void 0,associatedOnly:T?!1:u,checkCreateATAOwner:d});k=S,K&&b.addInstruction(K)}(!P||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:k,mintAUseSOLBalance:A,mintBUseSOLBalance:T,associatedOnly:u});let B=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(j.makeSwapBaseInInstructions({poolInfo:q(F({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:k},inputMint:new R(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:W,remainingAccounts:c})),b.addCustomComputeBudget(m),b.addTipInstruction(p),b.versionBuild({txVersion:g})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:s,remainingAccounts:c,associatedOnly:u=!0,checkCreateATAOwner:d=!1,txVersion:g,computeBudgetConfig:m,txTipConfig:p,feePayer:f}){let b=this.createTxBuilder(f),w=n.toString()===e.mintB.address.toString(),A=s.useSOLBalance&&e.mintA.address.toString()===Y.toBase58(),T=s.useSOLBalance&&e.mintB.address.toString()===Y.toBase58(),I;!r||r.equals(new yt(0))?I=w?He.add(new we(1)):je.sub(new we(1)):I=G.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let P;if(!P){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new R(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?i:0}:void 0,associatedOnly:A?!1:u,checkCreateATAOwner:d});P=S,K&&b.addInstruction(K)}let k;if(!k){let{account:S,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new R(e.mintB.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:T||w?{payer:s.feePayer||this.scope.ownerPubKey,amount:w?0:i}:void 0,associatedOnly:T?!1:u,checkCreateATAOwner:d});k=S,K&&b.addInstruction(K)}(!P||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.address,tokenB:e.mintB.address,ownerTokenAccountA:P,ownerTokenAccountB:k,mintAUseSOLBalance:A,mintBUseSOLBalance:T,associatedOnly:u});let B=t!=null?t:await this.getClmmPoolKeys(e.id.toString());return b.addInstruction(j.makeSwapBaseOutInstructions({poolInfo:q(F({},e),{id:e.id.toString(),programId:e.programId.toString()}),poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:k},outputMint:new R(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:W,remainingAccounts:c})),b.addCustomComputeBudget(m),b.addTipInstruction(p),b.versionBuild({txVersion:g})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:s,computeBudgetConfig:c,feePayer:u,lockProgram:d=on,lockAuth:g=Rn,clmmProgram:m=At}){var T,I;let p={};for(let P of this.scope.account.tokenAccountRawInfos)i?Z(this.scope.ownerPubKey,P.accountInfo.mint,a).publicKey.equals(P.pubkey)&&(p[P.accountInfo.mint.toString()]=P.pubkey):p[P.accountInfo.mint.toString()]=P.pubkey;let f=Object.values(t).flat().map(P=>P.nftMint),b=await Ee(this.scope.connection,f.map(P=>({pubkey:P}))),w={};b.forEach(P=>{var k,B;w[P.pubkey.toBase58()]=(B=(k=P==null?void 0:P.accountInfo)==null?void 0:k.owner)!=null?B:null});let A=this.createTxBuilder(u);for(let P of Object.values(e)){if(t[P.id]===void 0||!t[P.id].find(V=>!V.liquidity.isZero()||V.rewardInfos.find(E=>!E.rewardAmountOwed.isZero())))continue;let k=P,B=o.useSOLBalance&&k.mintA.address===Y.toString(),S=o.useSOLBalance&&k.mintB.address===Y.toString(),K=p[k.mintA.address];if(!K)if(B){let{account:V,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new R(k.mintA.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:i,checkCreateATAOwner:r});K=V,E&&A.addInstruction(E)}else{let V=new R(k.mintA.address);K=this.scope.account.getAssociatedTokenAccount(V,new R(k.mintA.programId)),A.addInstruction({instructions:[ft(this.scope.ownerPubKey,K,this.scope.ownerPubKey,V,new R(k.mintA.programId))]})}let L=p[k.mintB.address];if(!L)if(S){let{account:V,instructionParams:E}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new R(k.mintB.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:i,checkCreateATAOwner:r});L=V,E&&A.addInstruction(E)}else{let V=new R(k.mintB.address);L=this.scope.account.getAssociatedTokenAccount(V,new R(k.mintB.programId)),A.addInstruction({instructions:[ft(this.scope.ownerPubKey,L,this.scope.ownerPubKey,V,new R(k.mintB.programId))]})}p[k.mintA.address]=K,p[k.mintB.address]=L;let U=[];for(let V of k.rewardDefaultInfos){let E=o.useSOLBalance&&V.mint.address===Y.toString(),H=p[V.mint.address];if(!H){let{account:ce,instructionParams:se}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new R(V.mint.programId),mint:new R(V.mint.address),notUseTokenAccount:E,owner:this.scope.ownerPubKey,skipCloseAccount:!E,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:E?!1:i});H=ce,se&&A.addInstruction(se)}p[V.mint.address]=H,U.push(H)}let _=await this.getClmmPoolKeys(k.id),v=[];for(let V=0;V<_.rewardInfos.length;V++)v.push({poolRewardVault:new R(_.rewardInfos[V].vault),ownerRewardVault:U[V],rewardMint:new R(_.rewardInfos[V].mint.address)});for(let V of t[P.id]){let E=(T=n==null?void 0:n[P.id])==null?void 0:T[V.nftMint.toBase58()];if(E){let H=Z(this.scope.ownerPubKey,E.lockNftMint,Xt).publicKey,ce=Q.getTickArrayStartIndex(V.tickLower,_.config.tickSpacing),se=Q.getTickArrayStartIndex(V.tickUpper,_.config.tickSpacing),{publicKey:de}=oe(new R(_.programId),E.poolId,ce),{publicKey:bt}=oe(new R(_.programId),E.poolId,se),{publicKey:Fe}=nt(new R(_.programId),E.poolId,V.tickLower,V.tickUpper),Ne=Wt(d,E.lockNftMint).publicKey,Ie=j.harvestLockPositionInstructionV2({programId:d,auth:g,lockPositionId:Ne,clmmProgram:m,lockOwner:this.scope.ownerPubKey,lockNftMint:E.lockNftMint,lockNftAccount:H,positionNftAccount:E.nftAccount,positionId:E.positionId,poolId:E.poolId,protocolPosition:Fe,vaultA:new R(_.vault.A),vaultB:new R(_.vault.B),tickArrayLower:de,tickArrayUpper:bt,userVaultA:K,userVaultB:L,mintA:new R(_.mintA.address),mintB:new R(_.mintB.address),rewardAccounts:v,exTickArrayBitmap:le(m,E.poolId).publicKey});A.addInstruction({instructions:[Ie],instructionTypes:[$.ClmmHarvestLockPosition],lookupTableAddress:_.lookupTableAccount?[_.lookupTableAccount]:[]})}else{let H=j.decreaseLiquidityInstructions({poolInfo:k,poolKeys:_,ownerPosition:V,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:L,rewardAccounts:U},liquidity:new we(0),amountMinA:new we(0),amountMinB:new we(0),nft2022:(I=w[V.nftMint.toBase58()])==null?void 0:I.equals(et)});A.addInstruction(H)}}}return s===0?A.sizeCheckBuildV0({computeBudgetConfig:c}):A.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(un(e).publicKey);return t?wi.decode(t.data).whitelistMints.filter(o=>!o.equals(R.default)):[]}async getOwnerPositionInfo({programId:e=At}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new we(1))).map(r=>Ge(new R(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=Mn.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=on}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new we(1))).map(s=>Wt(new R(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(s=>{if(!s)return;let c=Ti.decode(s.data);i.push(c)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(s=>s.positionId)),a=[];return r.forEach(s=>{if(!s)return;let c=Mn.decode(s.data);a.push(c)}),i.map((s,c)=>({position:a[c],lockInfo:s}))}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ee(this.scope.connection,e.map(i=>({pubkey:new R(i)})),t),o={};for(let i=0;i<e.length;i++){let r=n[i];if(r===null||!r.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=sn.decode(r.accountInfo.data),s=G.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(F({},a),{currentPrice:s,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(s=>e[s].configId.toBase58())),o=await Ee(this.scope.connection,Array.from(n).map(s=>({pubkey:new R(s)}))),i={};o.forEach(s=>{!s.accountInfo||(i[s.pubkey.toBase58()]=po.decode(s.accountInfo.data))});let r=await qe.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(s=>{var d,g,m,p;let[c,u]=[e[s].mintA.toBase58(),e[s].mintB.toBase58()];return{id:s,programId:e[s].programId.toBase58(),mintA:pt({address:c,decimals:e[s].mintDecimalsA,programId:t[c].programId.toBase58()||Xt.toBase58(),extensions:{feeConfig:(d=t[c])!=null&&d.feeConfig?yn((g=t[c])==null?void 0:g.feeConfig):void 0}}),mintB:pt({address:u,decimals:e[s].mintDecimalsB,programId:t[u].programId.toBase58()||Xt.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?yn((p=t[u])==null?void 0:p.feeConfig):void 0}}),price:e[s].currentPrice,config:q(F({},i[e[s].configId.toBase58()]),{id:e[s].configId.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await qe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58(),...t.rewardInfos.filter(u=>!u.mint.equals(R.default)).map(u=>u.mint.toBase58())]),o=await Yt({connection:this.scope.connection,mints:Array.from(n).map(u=>new R(u))}),{computeClmmPoolInfo:i,computePoolTickData:r}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await Ee(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),s=Wi(i[e],o);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");s.mintAmountA=Number(Vt.decode(a[0].accountInfo.data).amount.toString()),s.mintAmountB=Number(Vt.decode(a[1].accountInfo.data).amount.toString());let c=q(F({},i[e]),{exBitmapAccount:i[e].exBitmapAccount.toBase58(),observationId:i[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:s.config,rewardInfos:i[e].rewardInfos.filter(u=>!u.vault.equals(R.default)).map(u=>{var d;return{mint:pt({address:u.mint.toBase58(),programId:Xt.toBase58(),decimals:(d=o[u.mint.toBase58()].decimals)!=null?d:6}),vault:u.vault.toBase58()}})});return{poolInfo:s,poolKeys:c,computePoolInfo:i[e],tickData:r,rpcPoolInfo:t,tickArrays:Object.values(r[e])}}async getSwapPoolInfo(e,t=!0){let{poolInfo:n,rpcData:o}=await this.getSimplePoolInfo(e),i=await this.scope.connection.getAccountInfo(o.configId),r=po.decode(i.data),a=new R(n.programId),s=new R(e),c=await _i(a,this.scope.connection,s,o.tickCurrent,r.tickSpacing,o.tickArrayBitmap,t);return{poolInfo:n,rpcData:o,configInfo:r,tickArrays:c}}async getSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfo({poolId:e}),n=await this.scope.connection.getMultipleAccountsInfo([t.mintA,t.mintB]);return{poolInfo:{id:e.toString(),programId:t.programId.toString(),mintA:{address:t.mintA.toString(),programId:n[0].owner.toString(),decimals:t.mintDecimalsA},mintB:{address:t.mintB.toString(),programId:n[1].owner.toString(),decimals:t.mintDecimalsB},config:{id:t.configId.toBase58(),tickSpacing:t.tickSpacing}},rpcData:t}}async getMultipleSimplePoolInfo(e){let t=await this.getRpcClmmPoolInfos({poolIds:e}),n=new Set(Object.values(t).map(r=>[r.mintA.toBase58(),r.mintB.toBase58()]).flat()),o=await Yt({connection:this.scope.connection,mints:Array.from(n).map(r=>new R(r))}),i={};return e.forEach(r=>{let a=t[r.toString()];if(!a)return null;let s=o[a.mintA.toBase58()],c=o[a.mintB.toBase58()];i[r.toString()]={poolInfo:{id:r.toString(),programId:a.programId.toString(),mintA:{address:a.mintA.toString(),programId:s.programId.toString(),decimals:a.mintDecimalsA},mintB:{address:a.mintB.toString(),programId:c.programId.toString(),decimals:a.mintDecimalsB},config:{id:a.configId.toBase58(),tickSpacing:a.tickSpacing}},rpcData:a}}),i}};export{Dn as Clmm};
//# sourceMappingURL=clmm.mjs.map