@raydium-io/raydium-sdk-v2 0.2.26-alpha → 0.2.27-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/{api-633d94c4.d.ts → api-c27cc5ec.d.ts} +8 -8
  5. package/lib/common/accountInfo.d.ts +1 -1
  6. package/lib/common/bignumber.d.ts +1 -1
  7. package/lib/common/constant.d.ts +1 -1
  8. package/lib/common/fractionUtil.d.ts +1 -1
  9. package/lib/common/index.d.ts +1 -1
  10. package/lib/common/transfer.d.ts +1 -1
  11. package/lib/common/txTool/txTool.d.ts +1 -1
  12. package/lib/common/txTool/txUtils.d.ts +1 -1
  13. package/lib/common/utility.d.ts +1 -1
  14. package/lib/index.d.ts +3 -3
  15. package/lib/index.js +1 -1
  16. package/lib/index.js.map +1 -1
  17. package/lib/index.mjs +1 -1
  18. package/lib/index.mjs.map +1 -1
  19. package/lib/module/amount.d.ts +1 -1
  20. package/lib/module/fraction.d.ts +1 -1
  21. package/lib/module/index.d.ts +1 -1
  22. package/lib/module/percent.d.ts +1 -1
  23. package/lib/module/price.d.ts +1 -1
  24. package/lib/raydium/account/account.d.ts +3 -3
  25. package/lib/raydium/account/index.d.ts +1 -1
  26. package/lib/raydium/account/instruction.d.ts +1 -1
  27. package/lib/raydium/account/types.d.ts +1 -1
  28. package/lib/raydium/account/util.d.ts +1 -1
  29. package/lib/raydium/clmm/clmm.d.ts +3 -3
  30. package/lib/raydium/clmm/index.d.ts +3 -3
  31. package/lib/raydium/clmm/instrument.d.ts +2 -2
  32. package/lib/raydium/clmm/layout.d.ts +6 -6
  33. package/lib/raydium/clmm/type.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  38. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  39. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  40. package/lib/raydium/cpmm/cpmm.js +1 -1
  41. package/lib/raydium/cpmm/cpmm.js.map +1 -1
  42. package/lib/raydium/cpmm/cpmm.mjs +1 -1
  43. package/lib/raydium/cpmm/cpmm.mjs.map +1 -1
  44. package/lib/raydium/cpmm/index.d.ts +1 -1
  45. package/lib/raydium/cpmm/instruction.d.ts +1 -1
  46. package/lib/raydium/cpmm/layout.d.ts +2 -2
  47. package/lib/raydium/cpmm/type.d.ts +1 -1
  48. package/lib/raydium/farm/config.d.ts +1 -1
  49. package/lib/raydium/farm/farm.d.ts +3 -3
  50. package/lib/raydium/farm/index.d.ts +1 -1
  51. package/lib/raydium/farm/instruction.d.ts +1 -1
  52. package/lib/raydium/farm/layout.d.ts +1 -1
  53. package/lib/raydium/farm/type.d.ts +1 -1
  54. package/lib/raydium/farm/util.d.ts +1 -1
  55. package/lib/raydium/ido/ido.d.ts +3 -3
  56. package/lib/raydium/ido/index.d.ts +3 -3
  57. package/lib/raydium/ido/instruction.d.ts +1 -1
  58. package/lib/raydium/ido/type.d.ts +1 -1
  59. package/lib/raydium/index.d.ts +3 -3
  60. package/lib/raydium/index.js +1 -1
  61. package/lib/raydium/index.js.map +1 -1
  62. package/lib/raydium/index.mjs +1 -1
  63. package/lib/raydium/index.mjs.map +1 -1
  64. package/lib/raydium/launchpad/curve/curve.d.ts +1 -1
  65. package/lib/raydium/launchpad/index.d.ts +3 -3
  66. package/lib/raydium/launchpad/instrument.d.ts +1 -1
  67. package/lib/raydium/launchpad/launchpad.d.ts +3 -3
  68. package/lib/raydium/launchpad/layout.d.ts +3 -3
  69. package/lib/raydium/launchpad/pda.d.ts +1 -1
  70. package/lib/raydium/launchpad/type.d.ts +1 -1
  71. package/lib/raydium/liquidity/index.d.ts +1 -1
  72. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  73. package/lib/raydium/liquidity/layout.d.ts +6 -6
  74. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  75. package/lib/raydium/liquidity/type.d.ts +1 -1
  76. package/lib/raydium/liquidity/utils.d.ts +1 -1
  77. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  78. package/lib/raydium/marketV2/index.d.ts +3 -3
  79. package/lib/raydium/moduleBase.d.ts +3 -3
  80. package/lib/raydium/raydium.d.ts +3 -3
  81. package/lib/raydium/raydium.js +1 -1
  82. package/lib/raydium/raydium.js.map +1 -1
  83. package/lib/raydium/raydium.mjs +1 -1
  84. package/lib/raydium/raydium.mjs.map +1 -1
  85. package/lib/raydium/token/constant.d.ts +1 -1
  86. package/lib/raydium/token/index.d.ts +1 -1
  87. package/lib/raydium/token/token.d.ts +3 -3
  88. package/lib/raydium/token/type.d.ts +1 -1
  89. package/lib/raydium/token/utils.d.ts +1 -1
  90. package/lib/raydium/tradeV2/index.d.ts +2 -2
  91. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  92. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  93. package/lib/raydium/tradeV2/type.d.ts +2 -2
  94. package/lib/raydium/type.d.ts +1 -1
  95. package/lib/raydium/utils1216/index.d.ts +3 -3
  96. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  97. package/lib/{raydium-be056a1c.d.ts → raydium-d01bd283.d.ts} +5 -4
  98. package/lib/{type-367f8461.d.ts → type-a4faa080.d.ts} +1 -1
  99. package/package.json +1 -1
  100. package/src/raydium/cpmm/cpmm.ts +3 -1
@@ -1,3 +1,3 @@
1
- var zl=Object.defineProperty,Yl=Object.defineProperties;var Hl=Object.getOwnPropertyDescriptors;var Yi=Object.getOwnPropertySymbols;var cu=Object.prototype.hasOwnProperty,lu=Object.prototype.propertyIsEnumerable;var uu=(s,e,t)=>e in s?zl(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,_=(s,e)=>{for(var t in e||(e={}))cu.call(e,t)&&uu(s,t,e[t]);if(Yi)for(var t of Yi(e))lu.call(e,t)&&uu(s,t,e[t]);return s},q=(s,e)=>Yl(s,Hl(e));var Ge=(s,e)=>{var t={};for(var n in s)cu.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&Yi)for(var n of Yi(s))e.indexOf(n)<0&&lu.call(s,n)&&(t[n]=s[n]);return t};import{merge as ty}from"lodash";import ju from"axios";import{PublicKey as pu}from"@solana/web3.js";import{get as mu,set as Ql}from"lodash";var as=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}},du={},jl={};function we(s){let e=mu(du,s);if(!e){let t=mu(jl,s);e=new as({name:s,logLevel:t}),Ql(du,s,e)}return e}import{MINT_SIZE as Zl,TOKEN_PROGRAM_ID as $l,getTransferFeeConfig as Jl,unpackMint as em}from"@solana/spl-token";var us=we("Raydium_accountInfo_util");async function on(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=_({batchRequest:!1},t),r=cs(e,i),a=new Array(r.length).fill([]);if(n){let c=r.map(m=>{let d=s._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=cs(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&us.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&us.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new pu(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&us.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Ee(s,e,t){let n=await on(s,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(_({},o),{accountInfo:n[i]}))}async function To({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ee(s,e.map(c=>({pubkey:yt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Zl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=em(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(_({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||$l,feeConfig:(a=Jl(u))!=null?a:void 0})}return o[pu.default.toBase58()]=o[Z.toBase58()],o}import fn from"bn.js";var Io=9e15,_n=1e9,ls="0123456789abcdef",Qi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ji="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ms={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Io,maxE:Io,crypto:!1},gu,wn,be=!0,$i="[DecimalError] ",Fn=$i+"Invalid argument: ",Pu=$i+"Precision limit exceeded",Au=$i+"crypto unavailable",wu="[object Decimal]",bt=Math.floor,ot=Math.pow,tm=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,nm=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,om=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ku=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,sn=1e7,me=7,im=9007199254740991,rm=Qi.length-1,ds=ji.length-1,G={toStringTag:wu};G.absoluteValue=G.abs=function(){var s=new this.constructor(this);return s.s<0&&(s.s=1),oe(s)};G.ceil=function(){return oe(new this.constructor(this),this.e+1,2)};G.clampedTo=G.clamp=function(s,e){var t,n=this,o=n.constructor;if(s=new o(s),e=new o(e),!s.s||!e.s)return new o(NaN);if(s.gt(e))throw Error(Fn+e);return t=n.cmp(s),t<0?s:n.cmp(e)>0?e:new o(n)};G.comparedTo=G.cmp=function(s){var e,t,n,o,i=this,r=i.d,a=(s=new i.constructor(s)).d,c=i.s,u=s.s;if(!r||!a)return!c||!u?NaN:c!==u?c:r===a?0:!r^c<0?1:-1;if(!r[0]||!a[0])return r[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==s.e)return i.e>s.e^c<0?1:-1;for(n=r.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(r[e]!==a[e])return r[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};G.cosine=G.cos=function(){var s,e,t=this,n=t.constructor;return t.d?t.d[0]?(s=n.precision,e=n.rounding,n.precision=s+Math.max(t.e,t.sd())+me,n.rounding=1,t=sm(n,xu(n,t)),n.precision=s,n.rounding=e,oe(wn==2||wn==3?t.neg():t,s,e,!0)):new n(1):new n(NaN)};G.cubeRoot=G.cbrt=function(){var s,e,t,n,o,i,r,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(be=!1,i=l.s*ot(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=mt(l.d),s=l.e,(i=(s-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=ot(t,1/3),s=bt((s+1)/3)-(s%3==(s<0?-1:2)),i==1/0?t="5e"+s:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+s),n=new m(t),n.s=l.s):n=new m(i.toString()),r=(s=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=_e(u.plus(l).times(a),u.plus(c),r+2,1),mt(a.d).slice(0,r)===(t=mt(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t=="9999"||!o&&t=="4999"){if(!o&&(oe(a,s+1,0),a.times(a).times(a).eq(l))){n=a;break}r+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(oe(n,s+1,1),e=!n.times(n).times(n).eq(l));break}return be=!0,oe(n,s,m.rounding,e)};G.decimalPlaces=G.dp=function(){var s,e=this.d,t=NaN;if(e){if(s=e.length-1,t=(s-bt(this.e/me))*me,s=e[s],s)for(;s%10==0;s/=10)t--;t<0&&(t=0)}return t};G.dividedBy=G.div=function(s){return _e(this,new this.constructor(s))};G.dividedToIntegerBy=G.divToInt=function(s){var e=this,t=e.constructor;return oe(_e(e,new t(s),0,1,1),t.precision,t.rounding)};G.equals=G.eq=function(s){return this.cmp(s)===0};G.floor=function(){return oe(new this.constructor(this),this.e+1,3)};G.greaterThan=G.gt=function(s){return this.cmp(s)>0};G.greaterThanOrEqualTo=G.gte=function(s){var e=this.cmp(s);return e==1||e===0};G.hyperbolicCosine=G.cosh=function(){var s,e,t,n,o,i=this,r=i.constructor,a=new r(1);if(!i.isFinite())return new r(i.s?1/0:NaN);if(i.isZero())return a;t=r.precision,n=r.rounding,r.precision=t+Math.max(i.e,i.sd())+4,r.rounding=1,o=i.d.length,o<32?(s=Math.ceil(o/3),e=(1/er(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=Bo(r,1,i.times(e),new r(1),!0);for(var c,u=s,l=new r(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return oe(i,r.precision=t,r.rounding=n,!0)};G.hyperbolicSine=G.sinh=function(){var s,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=Bo(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/er(5,s)),o=Bo(i,2,o,o,!0);for(var r,a=new i(5),c=new i(16),u=new i(20);s--;)r=o.times(o),o=o.times(a.plus(r.times(c.times(r).plus(u))))}return i.precision=e,i.rounding=t,oe(o,e,t,!0)};G.hyperbolicTangent=G.tanh=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+7,n.rounding=1,_e(t.sinh(),t.cosh(),n.precision=s,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var s,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?rn(t,o,i):new t(0):new t(NaN):e.isZero()?rn(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),s=rn(t,o+4,i).times(.5),t.precision=o,t.rounding=i,s.minus(e))};G.inverseHyperbolicCosine=G.acosh=function(){var s,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(s=n.precision,e=n.rounding,n.precision=s+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,be=!1,t=t.times(t).minus(1).sqrt().plus(t),be=!0,n.precision=s,n.rounding=e,t.ln()):new n(t)};G.inverseHyperbolicSine=G.asinh=function(){var s,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,be=!1,t=t.times(t).plus(1).sqrt().plus(t),be=!0,n.precision=s,n.rounding=e,t.ln())};G.inverseHyperbolicTangent=G.atanh=function(){var s,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(s=i.precision,e=i.rounding,n=o.sd(),Math.max(n,s)<2*-o.e-1?oe(new i(o),s,e,!0):(i.precision=t=n-o.e,o=_e(o.plus(1),new i(1).minus(o),t+s,1),i.precision=s+4,i.rounding=1,o=o.ln(),i.precision=s,i.rounding=e,o.times(.5))):new i(NaN)};G.inverseSine=G.asin=function(){var s,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(s=rn(i,t+4,n).times(.5),s.s=o.s,s):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};G.inverseTangent=G.atan=function(){var s,e,t,n,o,i,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=ds)return r=rn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=ds)return r=rn(l,m+4,d).times(.5),r.s=u.s,r}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/me+2|0),s=t;s;--s)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(be=!1,e=Math.ceil(a/me),n=1,c=u.times(u),r=new l(u),o=u;s!==-1;)if(o=o.times(c),i=r.minus(o.div(n+=2)),o=o.times(c),r=i.plus(o.div(n+=2)),r.d[e]!==void 0)for(s=e;r.d[s]===i.d[s]&&s--;);return t&&(r=r.times(2<<t-1)),be=!0,oe(r,l.precision=m,l.rounding=d,!0)};G.isFinite=function(){return!!this.d};G.isInteger=G.isInt=function(){return!!this.d&&bt(this.e/me)>this.d.length-2};G.isNaN=function(){return!this.s};G.isNegative=G.isNeg=function(){return this.s<0};G.isPositive=G.isPos=function(){return this.s>0};G.isZero=function(){return!!this.d&&this.d[0]===0};G.lessThan=G.lt=function(s){return this.cmp(s)<0};G.lessThanOrEqualTo=G.lte=function(s){return this.cmp(s)<1};G.logarithm=G.log=function(s){var e,t,n,o,i,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(s==null)s=new l(10),e=!0;else{if(s=new l(s),t=s.d,s.s<0||!t||!t[0]||s.eq(1))return new l(NaN);e=s.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(be=!1,a=m+p,r=vn(u,a),n=e?Zi(l,a+10):vn(s,a),c=_e(r,n,a,1),Xo(c.d,o=m,d))do if(a+=10,r=vn(u,a),n=e?Zi(l,a+10):vn(s,a),c=_e(r,n,a,1),!i){+mt(c.d).slice(o+1,o+15)+1==1e14&&(c=oe(c,m+1,0));break}while(Xo(c.d,o+=10,d));return be=!0,oe(c,m,d)};G.minus=G.sub=function(s){var e,t,n,o,i,r,a,c,u,l,m,d,p=this,f=p.constructor;if(s=new f(s),!p.d||!s.d)return!p.s||!s.s?s=new f(NaN):p.d?s.s=-s.s:s=new f(s.d||p.s!==s.s?p:NaN),s;if(p.s!=s.s)return s.s=-s.s,p.plus(s);if(u=p.d,d=s.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])s.s=-s.s;else if(u[0])s=new f(p);else return new f(c===3?-0:0);return be?oe(s,a,c):s}if(t=bt(s.e/me),l=bt(p.e/me),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,r=d.length):(e=d,t=l,r=u.length),n=Math.max(Math.ceil(a/me),r)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,r=d.length,m=n<r,m&&(r=n),n=0;n<r;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,s.s=-s.s),r=u.length,n=d.length-r;n>0;--n)u[r++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=sn-1;--u[o],u[n]+=sn}u[n]-=d[n]}for(;u[--r]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(s.d=u,s.e=Ji(u,t),be?oe(s,a,c):s):new f(c===3?-0:0)};G.modulo=G.mod=function(s){var e,t=this,n=t.constructor;return s=new n(s),!t.d||!s.s||s.d&&!s.d[0]?new n(NaN):!s.d||t.d&&!t.d[0]?oe(new n(t),n.precision,n.rounding):(be=!1,n.modulo==9?(e=_e(t,s.abs(),0,3,1),e.s*=s.s):e=_e(t,s,0,n.modulo,1),e=e.times(s),be=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return ps(this)};G.naturalLogarithm=G.ln=function(){return vn(this)};G.negated=G.neg=function(){var s=new this.constructor(this);return s.s=-s.s,oe(s)};G.plus=G.add=function(s){var e,t,n,o,i,r,a,c,u,l,m=this,d=m.constructor;if(s=new d(s),!m.d||!s.d)return!m.s||!s.s?s=new d(NaN):m.d||(s=new d(s.d||m.s===s.s?m:NaN)),s;if(m.s!=s.s)return s.s=-s.s,m.minus(s);if(u=m.d,l=s.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(s=new d(m)),be?oe(s,a,c):s;if(i=bt(m.e/me),n=bt(s.e/me),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,r=l.length):(t=l,n=i,r=u.length),i=Math.ceil(a/me),r=i>r?i+1:r+1,o>r&&(o=r,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(r=u.length,o=l.length,r-o<0&&(o=r,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/sn|0,u[o]%=sn;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=Ji(u,n),be?oe(s,a,c):s};G.precision=G.sd=function(s){var e,t=this;if(s!==void 0&&s!==!!s&&s!==1&&s!==0)throw Error(Fn+s);return t.d?(e=hu(t.d),s&&t.e+1>e&&(e=t.e+1)):e=NaN,e};G.round=function(){var s=this,e=s.constructor;return oe(new e(s),s.e+1,e.rounding)};G.sine=G.sin=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+Math.max(t.e,t.sd())+me,n.rounding=1,t=um(n,xu(n,t)),n.precision=s,n.rounding=e,oe(wn>2?t.neg():t,s,e,!0)):new n(NaN)};G.squareRoot=G.sqrt=function(){var s,e,t,n,o,i,r=this,a=r.d,c=r.e,u=r.s,l=r.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?r:1/0);for(be=!1,u=Math.sqrt(+r),u==0||u==1/0?(e=mt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=bt((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(_e(r,i,t+2,1)).times(.5),mt(i.d).slice(0,t)===(e=mt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(oe(i,c+1,0),i.times(i).eq(r))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(oe(n,c+1,1),s=!n.times(n).eq(r));break}return be=!0,oe(n,c,l.rounding,s)};G.tangent=G.tan=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+10,n.rounding=1,t=t.sin(),t.s=1,t=_e(t,new n(1).minus(t.times(t)).sqrt(),s+10,0),n.precision=s,n.rounding=e,oe(wn==2||wn==4?t.neg():t,s,e,!0)):new n(NaN)};G.times=G.mul=function(s){var e,t,n,o,i,r,a,c,u,l=this,m=l.constructor,d=l.d,p=(s=new m(s)).d;if(s.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!s.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?s.s/0:s.s*0);for(t=bt(l.e/me)+bt(s.e/me),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,r=c,c=u,u=r),i=[],r=c+u,n=r;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%sn|0,e=a/sn|0;i[o]=(i[o]+e)%sn|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=Ji(i,t),be?oe(s,m.precision,m.rounding):s};G.toBinary=function(s,e){return ys(this,2,s,e)};G.toDecimalPlaces=G.toDP=function(s,e){var t=this,n=t.constructor;return t=new n(t),s===void 0?t:(Rt(s,0,_n),e===void 0?e=n.rounding:Rt(e,0,8),oe(t,s+t.e+1,e))};G.toExponential=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=pn(n,!0):(Rt(s,0,_n),e===void 0?e=o.rounding:Rt(e,0,8),n=oe(new o(n),s+1,e),t=pn(n,!0,s+1)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toFixed=function(s,e){var t,n,o=this,i=o.constructor;return s===void 0?t=pn(o):(Rt(s,0,_n),e===void 0?e=i.rounding:Rt(e,0,8),n=oe(new i(o),s+o.e+1,e),t=pn(n,!1,s+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};G.toFraction=function(s){var e,t,n,o,i,r,a,c,u,l,m,d,p=this,f=p.d,y=p.constructor;if(!f)return new y(p);if(u=t=new y(1),n=c=new y(0),e=new y(n),i=e.e=hu(f)-p.e-1,r=i%me,e.d[0]=ot(10,r<0?me+r:r),s==null)s=i>0?e:u;else{if(a=new y(s),!a.isInt()||a.lt(u))throw Error(Fn+a);s=a.gt(e)?i>0?e:u:a}for(be=!1,a=new y(mt(f)),l=y.precision,y.precision=i=f.length*me*2;m=_e(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(s)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=_e(s.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=_e(u,n,i,1).minus(p).abs().cmp(_e(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,be=!0,d};G.toHexadecimal=G.toHex=function(s,e){return ys(this,16,s,e)};G.toNearest=function(s,e){var t=this,n=t.constructor;if(t=new n(t),s==null){if(!t.d)return t;s=new n(1),e=n.rounding}else{if(s=new n(s),e===void 0?e=n.rounding:Rt(e,0,8),!t.d)return s.s?t:s;if(!s.d)return s.s&&(s.s=t.s),s}return s.d[0]?(be=!1,t=_e(t,s,0,e,1).times(s),be=!0,oe(t)):(s.s=t.s,t=s),t};G.toNumber=function(){return+this};G.toOctal=function(s,e){return ys(this,8,s,e)};G.toPower=G.pow=function(s){var e,t,n,o,i,r,a=this,c=a.constructor,u=+(s=new c(s));if(!a.d||!s.d||!a.d[0]||!s.d[0])return new c(ot(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,s.eq(1))return oe(a,n,i);if(e=bt(s.e/me),e>=s.d.length-1&&(t=u<0?-u:u)<=im)return o=Tu(c,a,t,n),s.s<0?new c(1).div(o):oe(o,n,i);if(r=a.s,r<0){if(e<s.d.length-1)return new c(NaN);if((s.d[e]&1)==0&&(r=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=r,a}return t=ot(+a,u),e=t==0||!isFinite(t)?bt(u*(Math.log("0."+mt(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?r/0:0):(be=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=ps(s.times(vn(a,n+t)),n),o.d&&(o=oe(o,n+5,1),Xo(o.d,n,i)&&(e=n+10,o=oe(ps(s.times(vn(a,e+t)),e),e+5,1),+mt(o.d).slice(n+1,n+15)+1==1e14&&(o=oe(o,n+1,0)))),o.s=r,be=!0,c.rounding=i,oe(o,n,i))};G.toPrecision=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=pn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Rt(s,1,_n),e===void 0?e=o.rounding:Rt(e,0,8),n=oe(new o(n),s,e),t=pn(n,s<=n.e||n.e<=o.toExpNeg,s)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toSignificantDigits=G.toSD=function(s,e){var t=this,n=t.constructor;return s===void 0?(s=n.precision,e=n.rounding):(Rt(s,1,_n),e===void 0?e=n.rounding:Rt(e,0,8)),oe(new n(t),s,e)};G.toString=function(){var s=this,e=s.constructor,t=pn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()&&!s.isZero()?"-"+t:t};G.truncated=G.trunc=function(){return oe(new this.constructor(this),this.e+1,1)};G.valueOf=G.toJSON=function(){var s=this,e=s.constructor,t=pn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()?"-"+t:t};function mt(s){var e,t,n,o=s.length-1,i="",r=s[0];if(o>0){for(i+=r,e=1;e<o;e++)n=s[e]+"",t=me-n.length,t&&(i+=Mn(t)),i+=n;r=s[e],n=r+"",t=me-n.length,t&&(i+=Mn(t))}else if(r===0)return"0";for(;r%10===0;)r/=10;return i+r}function Rt(s,e,t){if(s!==~~s||s<e||s>t)throw Error(Fn+s)}function Xo(s,e,t,n){var o,i,r,a;for(i=s[0];i>=10;i/=10)--e;return--e<0?(e+=me,o=0):(o=Math.ceil((e+1)/me),e%=me),i=ot(10,me-e),a=s[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),r=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):r=(t<4&&a+1==i||t>3&&a+1==i/2)&&(s[o+1]/i/100|0)==ot(10,e-2)-1||(a==i/2||a==0)&&(s[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),r=(n||t<4)&&a==9999||!n&&t>3&&a==4999):r=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(s[o+1]/i/1e3|0)==ot(10,e-3)-1,r}function Hi(s,e,t){for(var n,o=[0],i,r=0,a=s.length;r<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=ls.indexOf(s.charAt(r++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function sm(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/er(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=Bo(s,1,e.times(o),new s(1));for(var i=t;i--;){var r=e.times(e);e=r.times(r).minus(r).times(8).plus(1)}return s.precision-=t,e}var _e=function(){function s(n,o,i){var r,a=0,c=n.length;for(n=n.slice();c--;)r=n[c]*o+a,n[c]=r%i|0,a=r/i|0;return a&&n.unshift(a),n}function e(n,o,i,r){var a,c;if(i!=r)c=i>r?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,r){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*r+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,r,a,c){var u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I,C,L,N=n.constructor,O=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new N(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-o.e):(c=sn,p=me,l=bt(n.e/p)-bt(o.e/p)),C=v.length,K=R.length,g=new N(O),A=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,i==null?(w=i=N.precision,r=N.rounding):a?w=i+(n.e-o.e)+1:w=i,w<0)A.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,v=v[0],w++;(m<K||d)&&w--;m++)x=d*c+(R[m]||0),A[m]=x/v|0,d=x%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=s(v,d,c),R=s(R,d,c),C=v.length,K=R.length),B=C,k=R.slice(0,C),T=k.length;T<C;)k[T++]=0;L=v.slice(),L.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,k,C,T),u<0?(h=k[0],C!=T&&(h=h*c+(k[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(v,d,c),b=y.length,T=k.length,u=e(y,k,b,T),u==1&&(d--,t(y,C<b?L:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(k,y,T,c),u==-1&&(T=k.length,u=e(v,k,C,T),u<1&&(d++,t(k,C<T?L:v,T,c))),T=k.length):u===0&&(d++,k=[0]),A[m++]=d,u&&k[0]?k[T++]=R[B]||0:(k=[R[B]],T=1);while((B++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,gu=f;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,oe(g,a?i+g.e+1:i,r,f)}return g}}();function oe(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor;e:if(e!=null){if(m=s.d,!m)return s;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=me,r=e,l=m[d=0],c=l/ot(10,o-r-1)%10|0;else if(d=Math.ceil((i+1)/me),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=me,r=i-me+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=me,r=i-me+o,c=r<0?0:l/ot(10,o-r-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(r<0?l:l%ot(10,o-r-1)),u=t<4?(c||n)&&(t==0||t==(s.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?r>0?l/ot(10,o-r):0:m[d-1])%10&1||t==(s.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=s.e+1,m[0]=ot(10,(me-e%me)%me),s.e=-e||0):m[0]=s.e=0,s;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=ot(10,me-i),m[d]=r>0?(l/ot(10,o-r)%ot(10,r)|0)*a:0),u)for(;;)if(d==0){for(i=1,r=m[0];r>=10;r/=10)i++;for(r=m[0]+=a,a=1;r>=10;r/=10)a++;i!=a&&(s.e++,m[0]==sn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=sn)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return be&&(s.e>p.maxE?(s.d=null,s.e=NaN):s.e<p.minE&&(s.e=0,s.d=[0])),s}function pn(s,e,t){if(!s.isFinite())return Bu(s);var n,o=s.e,i=mt(s.d),r=i.length;return e?(t&&(n=t-r)>0?i=i.charAt(0)+"."+i.slice(1)+Mn(n):r>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(s.e<0?"e":"e+")+s.e):o<0?(i="0."+Mn(-o-1)+i,t&&(n=t-r)>0&&(i+=Mn(n))):o>=r?(i+=Mn(o+1-r),t&&(n=t-o-1)>0&&(i=i+"."+Mn(n))):((n=o+1)<r&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-r)>0&&(o+1===r&&(i+="."),i+=Mn(n))),i}function Ji(s,e){var t=s[0];for(e*=me;t>=10;t/=10)e++;return e}function Zi(s,e,t){if(e>rm)throw be=!0,t&&(s.precision=t),Error(Pu);return oe(new s(Qi),e,1,!0)}function rn(s,e,t){if(e>ds)throw Error(Pu);return oe(new s(ji),e,t,!0)}function hu(s){var e=s.length-1,t=e*me+1;if(e=s[e],e){for(;e%10==0;e/=10)t--;for(e=s[0];e>=10;e/=10)t++}return t}function Mn(s){for(var e="";s--;)e+="0";return e}function Tu(s,e,t,n){var o,i=new s(1),r=Math.ceil(n/me+4);for(be=!1;;){if(t%2&&(i=i.times(e),yu(i.d,r)&&(o=!0)),t=bt(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),yu(e.d,r)}return be=!0,i}function fu(s){return s.d[s.d.length-1]&1}function Iu(s,e,t){for(var n,o=new s(e[0]),i=0;++i<e.length;)if(n=new s(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function ps(s,e){var t,n,o,i,r,a,c,u=0,l=0,m=0,d=s.constructor,p=d.rounding,f=d.precision;if(!s.d||!s.d[0]||s.e>17)return new d(s.d?s.d[0]?s.s<0?0:1/0:1:s.s?s.s<0?0:s:0/0);for(e==null?(be=!1,c=f):c=e,a=new d(.03125);s.e>-2;)s=s.times(a),m+=5;for(n=Math.log(ot(2,m))/Math.LN10*2+5|0,c+=n,t=i=r=new d(1),d.precision=c;;){if(i=oe(i.times(s),c,1),t=t.times(++l),a=r.plus(_e(i,t,c,1)),mt(a.d).slice(0,c)===mt(r.d).slice(0,c)){for(o=m;o--;)r=oe(r.times(r),c,1);if(e==null)if(u<3&&Xo(r.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return oe(r,d.precision=f,p,be=!0);else return d.precision=f,r}r=a}}function vn(s,e){var t,n,o,i,r,a,c,u,l,m,d,p=1,f=10,y=s,b=y.d,g=y.constructor,A=g.rounding,k=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(be=!1,l=k):l=e,g.precision=l+=f,t=mt(b),n=t.charAt(0),Math.abs(i=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(s),t=mt(y.d),n=t.charAt(0),p++;i=y.e,n>1?(y=new g("0."+t),i++):y=new g(n+"."+t.slice(1))}else return u=Zi(g,l+2,k).times(i+""),y=vn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?oe(y,k,A,be=!0):y;for(m=y,c=r=y=_e(y.minus(1),y.plus(1),l,1),d=oe(y.times(y),l,1),o=3;;){if(r=oe(r.times(d),l,1),u=c.plus(_e(r,new g(o),l,1)),mt(u.d).slice(0,l)===mt(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Zi(g,l+2,k).times(i+""))),c=_e(c,new g(p),l,1),e==null)if(Xo(c.d,l-f,A,a))g.precision=l+=f,u=r=y=_e(m.minus(1),m.plus(1),l,1),d=oe(y.times(y),l,1),o=a=1;else return oe(c,g.precision=k,A,be=!0);else return g.precision=k,c;c=u,o+=2}}function Bu(s){return String(s.s*s.s/0)}function fs(s,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,s.e=t=t-n-1,s.d=[],n=(t+1)%me,t<0&&(n+=me),n<o){for(n&&s.d.push(+e.slice(0,n)),o-=me;n<o;)s.d.push(+e.slice(n,n+=me));e=e.slice(n),n=me-e.length}else n-=o;for(;n--;)e+="0";s.d.push(+e),be&&(s.e>s.constructor.maxE?(s.d=null,s.e=NaN):s.e<s.constructor.minE&&(s.e=0,s.d=[0]))}else s.e=0,s.d=[0];return s}function am(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ku.test(e))return fs(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(nm.test(e))t=16,e=e.toLowerCase();else if(tm.test(e))t=2;else if(om.test(e))t=8;else throw Error(Fn+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),r=i>=0,n=s.constructor,r&&(e=e.replace(".",""),a=e.length,i=a-i,o=Tu(n,new n(t),i,i*2)),u=Hi(e,t,sn),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=Ji(u,l),s.d=u,be=!1,r&&(s=_e(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?ot(2,c):zo.pow(2,c))),be=!0,s)}function um(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bo(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/er(5,t)),e=Bo(s,2,e,e);for(var o,i=new s(5),r=new s(16),a=new s(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(r.times(o).minus(a))));return e}function Bo(s,e,t,n,o){var i,r,a,c,u=1,l=s.precision,m=Math.ceil(l/me);for(be=!1,c=t.times(t),a=new s(n);;){if(r=_e(a.times(c),new s(e++*e++),l,1),a=o?n.plus(r):n.minus(r),n=_e(r.times(c),new s(e++*e++),l,1),r=a.plus(n),r.d[m]!==void 0){for(i=m;r.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=r,r=i,u++}return be=!0,r.d.length=m+1,r}function er(s,e){for(var t=s;--e;)t*=s;return t}function xu(s,e){var t,n=e.s<0,o=rn(s,s.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return wn=n?4:1,e;if(t=e.divToInt(o),t.isZero())wn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return wn=fu(t)?n?2:3:n?4:1,e;wn=fu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function ys(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(Rt(t,1,_n),n===void 0?n=p.rounding:Rt(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Bu(s);else{for(l=pn(s),r=l.indexOf("."),f?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,r>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-r,d.d=Hi(pn(d),10,o),d.e=d.d.length),m=Hi(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(r<0?i--:(s=new p(s),s.d=m,s.e=i,s=_e(s,d,t,n,0,o),m=s.d,i=s.e,u=gu),r=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(r!==void 0||u)&&(n===0||n===(s.s<0?3:2)):r>a||r===a&&(n===4||u||n===6&&m[t-1]&1||n===(s.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(r=0,l="";r<c;r++)l+=ls.charAt(m[r]);if(f){if(c>1)if(e==16||e==8){for(r=e==16?4:3,--c;c%r;c++)l+="0";for(m=Hi(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=ls.charAt(m[r])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return s.s<0?"-"+l:l}function yu(s,e){if(s.length>e)return s.length=e,!0}function cm(s){return new this(s).abs()}function lm(s){return new this(s).acos()}function mm(s){return new this(s).acosh()}function dm(s,e){return new this(s).plus(e)}function pm(s){return new this(s).asin()}function fm(s){return new this(s).asinh()}function ym(s){return new this(s).atan()}function bm(s){return new this(s).atanh()}function gm(s,e){s=new this(s),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!s.s||!e.s?t=new this(NaN):!s.d&&!e.d?(t=rn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?rn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=rn(this,i,1).times(.5),t.s=s.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(_e(s,e,i,1)),e=rn(this,i,1),this.precision=n,this.rounding=o,t=s.s<0?t.minus(e):t.plus(e)):t=this.atan(_e(s,e,i,1)),t}function Pm(s){return new this(s).cbrt()}function Am(s){return oe(s=new this(s),s.e+1,2)}function wm(s,e,t){return new this(s).clamp(e,t)}function km(s){if(!s||typeof s!="object")throw Error($i+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,_n,"rounding",0,8,"toExpNeg",-Io,0,"toExpPos",0,Io,"maxE",0,Io,"minE",-Io,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=ms[t]),(n=s[t])!==void 0)if(bt(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Fn+t+": "+n);if(t="crypto",o&&(this[t]=ms[t]),(n=s[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Au);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function hm(s){return new this(s).cos()}function Tm(s){return new this(s).cosh()}function Su(s){var e,t,n;function o(i){var r,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,bu(i)){u.s=i.s,be?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(r=0,a=i;a>=10;a/=10)r++;be?r>o.maxE?(u.e=NaN,u.d=null):r<o.minE?(u.e=0,u.d=[0]):(u.e=r,u.d=[i]):(u.e=r,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return fs(u,i.toString())}else if(c!=="string")throw Error(Fn+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),ku.test(i)?fs(u,i):am(u,i)}if(o.prototype=G,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=km,o.clone=Su,o.isDecimal=bu,o.abs=cm,o.acos=lm,o.acosh=mm,o.add=dm,o.asin=pm,o.asinh=fm,o.atan=ym,o.atanh=bm,o.atan2=gm,o.cbrt=Pm,o.ceil=Am,o.clamp=wm,o.cos=hm,o.cosh=Tm,o.div=Im,o.exp=Bm,o.floor=xm,o.hypot=Sm,o.ln=Km,o.log=Cm,o.log10=Lm,o.log2=Rm,o.max=Nm,o.min=Om,o.mod=Mm,o.mul=vm,o.pow=Fm,o.random=_m,o.round=Em,o.sign=Vm,o.sin=Wm,o.sinh=Dm,o.sqrt=qm,o.sub=Um,o.sum=Gm,o.tan=Xm,o.tanh=zm,o.trunc=Ym,s===void 0&&(s={}),s&&s.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)s.hasOwnProperty(t=n[e++])||(s[t]=this[t]);return o.config(s),o}function Im(s,e){return new this(s).div(e)}function Bm(s){return new this(s).exp()}function xm(s){return oe(s=new this(s),s.e+1,3)}function Sm(){var s,e,t=new this(0);for(be=!1,s=0;s<arguments.length;)if(e=new this(arguments[s++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return be=!0,new this(1/0);t=e}return be=!0,t.sqrt()}function bu(s){return s instanceof zo||s&&s.toStringTag===wu||!1}function Km(s){return new this(s).ln()}function Cm(s,e){return new this(s).log(e)}function Rm(s){return new this(s).log(2)}function Lm(s){return new this(s).log(10)}function Nm(){return Iu(this,arguments,"lt")}function Om(){return Iu(this,arguments,"gt")}function Mm(s,e){return new this(s).mod(e)}function vm(s,e){return new this(s).mul(e)}function Fm(s,e){return new this(s).pow(e)}function _m(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:Rt(s,1,_n),n=Math.ceil(s/me),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(Au);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],s%=me,n&&s&&(o=ot(10,me-s),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=me)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<me&&(t-=me-n)}return r.e=t,r.d=a,r}function Em(s){return oe(s=new this(s),s.e+1,this.rounding)}function Vm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function Wm(s){return new this(s).sin()}function Dm(s){return new this(s).sinh()}function qm(s){return new this(s).sqrt()}function Um(s,e){return new this(s).sub(e)}function Gm(){var s=0,e=arguments,t=new this(e[s]);for(be=!1;t.s&&++s<e.length;)t=t.plus(e[s]);return be=!0,oe(t,this.precision,this.rounding)}function Xm(s){return new this(s).tan()}function zm(s){return new this(s).tanh()}function Ym(s){return oe(s=new this(s),s.e+1,1)}G[Symbol.for("nodejs.util.inspect.custom")]=G.toString;G[Symbol.toStringTag]="Decimal";var zo=G.constructor=Su(ms);Qi=new zo(Qi);ji=new zo(ji);var M=zo;import td from"big.js";import or from"bn.js";import Hm from"toformat";var Qm=Hm,Yo=Qm;import nr from"big.js";import Zm from"bn.js";import $m from"decimal.js-light";import Ho from"bn.js";var Ku=9007199254740991;function ne(s){let e=we("Raydium_parseBigNumberish");if(s instanceof Ho)return s;if(typeof s=="string"){if(s.match(/^-?[0-9]+$/))return new Ho(s);e.logWithError(`invalid BigNumberish string: ${s}`)}return typeof s=="number"?(s%1&&e.logWithError(`BigNumberish number underflow: ${s}`),(s>=Ku||s<=-Ku)&&e.logWithError(`BigNumberish number overflow: ${s}`),new Ho(String(s))):typeof s=="bigint"?new Ho(s.toString()):(e.error(`invalid BigNumberish value: ${s}`),new Ho(0))}var tr=we("module/fraction"),bs=Yo(nr),Qo=Yo($m),Jm={[0]:Qo.ROUND_DOWN,[1]:Qo.ROUND_HALF_UP,[2]:Qo.ROUND_UP},ed={[0]:nr.roundDown,[1]:nr.roundHalfUp,[2]:nr.roundUp},Ke=class{constructor(e,t=new Zm(1)){this.numerator=ne(e),this.denominator=ne(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ke(this.denominator,this.numerator)}add(e){let t=e instanceof Ke?e:new Ke(ne(e));return this.denominator.eq(t.denominator)?new Ke(this.numerator.add(t.numerator),this.denominator):new Ke(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ke?e:new Ke(ne(e));return this.denominator.eq(t.denominator)?new Ke(this.numerator.sub(t.numerator),this.denominator):new Ke(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ke?e:new Ke(ne(e));return new Ke(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ke?e:new Ke(ne(e));return new Ke(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||tr.logWithError(`${e} is not an integer.`),e<=0&&tr.logWithError(`${e} is not positive.`),Qo.set({precision:e+1,rounding:Jm[n]});let o=new Qo(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)||tr.logWithError(`${e} is not an integer.`),e<0&&tr.logWithError(`${e} is negative.`),bs.DP=e,bs.RM=ed[n]||1,new bs(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var nd=we("Raydium_amount"),Cu=Yo(td);function od(s,e){let t="0",n="0";if(s.includes(".")){let o=s.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):nd.logWithError(`invalid number string, num: ${s}`)}else t=s;return[t,n.slice(0,e)||n]}var Re=class extends Ke{constructor(t,n,o=!0,i){let r=new or(0),a=gs.pow(new or(t.decimals));if(o)r=ne(n);else{let c=new or(0),u=new or(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=od(n.toString(),t.decimals);c=ne(l),u=ne(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=we(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 Re(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Re(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 Cu.DP=this.token.decimals,new Cu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ru}from"@solana/spl-token";var En={chainId:101,address:id.default.toBase58(),programId:Ru.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},gt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ru.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 hs}from"@solana/web3.js";import{PublicKey as Xe,SystemProgram as Lu,SYSVAR_RENT_PUBKEY as rd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";function S({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var Ps=[S({pubkey:sd,isWritable:!1}),S({pubkey:Lu.programId,isWritable:!1}),S({pubkey:rd,isWritable:!1})];function As({publicKey:s,transformSol:e}){let t=ws(s.toString());if(t instanceof Xe)return e&&t.equals(st)?Z:t;if(e&&t.toString()===st.toBase58())return Z;if(typeof t=="string"){if(t===Xe.default.toBase58())return Xe.default;try{return new Xe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ws(s){try{return new Xe(s)}catch{return s}}var ir=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Vn=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),dt=new Xe("SysvarRent111111111111111111111111111111111"),Nu=new Xe("SysvarC1ock11111111111111111111111111111111"),an=new Xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),ad=new Xe("Sysvar1nstructions1111111111111111111111111"),ks=Lu.programId,Gy=new Xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Xy=new Xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),zy=new Xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Yy=new Xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Hy=new Xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Qy=new Xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),jy=new Xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Zy=new Xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),$y=new Xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Jy=new Xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),eb=new Xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Xe("So11111111111111111111111111111111111111112"),st=Xe.default;function yt(s){return As({publicKey:s,transformSol:!0})}var Ts=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===st.toBase58()||e instanceof hs&&st.equals(e)){this.decimals=gt.decimals,this.symbol=gt.symbol,this.name=gt.name,this.mint=new hs(gt.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?hs.default:As({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ze=Ts;ze.WSOL=new Ts(q(_({},gt),{mint:gt.address}));var Is=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},rr=Is;rr.SOL=new Is(En);import ud from"bn.js";var Ou=new Ke(new ud(100)),at=class extends Ke{toSignificant(e=5,t,n){return this.mul(Ou).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ou).toFixed(e,t,n)}};var cd=we("Raydium_price"),Lt=class extends Ke{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ke(Bs(n.decimals),Bs(o.decimals))}get raw(){return new Ke(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Lt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&cd.logWithError("mul token not equals");let n=super.mul(t);return new Lt({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)}};var Nt=new fn(0),Mu=new fn(1),Ub=new fn(2),Gb=new fn(3),Xb=new fn(5),gs=new fn(10),zb=new fn(100),Yb=new fn(1e3),Hb=new fn(1e4);function Bs(s){return gs.pow(ne(s))}function sr(s,e){let t=s.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function jo(s,e,t){return s.mul(e).add(t).sub(new fn(1)).div(t)}function ar(s,e,t){return s.mul(e).div(t)}function cs(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var un=class{constructor(e){this._owner=e}get publicKey(){return un.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return un.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return un.isKeyPair(this._owner)}get isPublicKey(){return un.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!un.isKeyPair(e)}};import{PublicKey as yd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";import{ComputeBudgetProgram as vu,Keypair as _u,PublicKey as ld,Transaction as Eu,TransactionMessage as md,VersionedTransaction as Vu}from"@solana/web3.js";var X={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{TOKEN_PROGRAM_ID as dd}from"@solana/spl-token";var Fu=we("Raydium_txUtil"),Wu=1644;function ur(s){let e=[],t=[];return s.microLamports&&(e.push(vu.setComputeUnitPrice({microLamports:s.microLamports})),t.push(X.SetComputeUnitPrice)),s.units&&(e.push(vu.setComputeUnitLimit({units:s.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function xo(s,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=s.getLatestBlockhash)==null?void 0:n.call(s,{commitment:t})))==null?void 0:o.blockhash}async function cr(s,e){return s.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);s.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function xs(s,e){s.length<1&&Fu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&Fu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Eu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Wu}catch{return!1}}function fe(s,e){let[t,n]=ld.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function Zo({instructions:s,payer:e,signers:t}){return xs(s,[e,...t])}function $o({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=_u.generate().publicKey.toString()}){let i=new md({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Vu(i).serialize()).toString("base64").length<Wu}catch{return!1}}var pd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),fd=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof Vu&&(e=pd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Jn(s){let e=[];return s.forEach(t=>{t instanceof Eu&&(t.recentBlockhash||(t.recentBlockhash=dd.toBase58()),t.feePayer||(t.feePayer=_u.generate().publicKey)),e.push(fd(t))}),console.log("simulate tx string:",e),e}function ee(s,e,t){return fe([s.toBuffer(),(t!=null?t:bd).toBuffer(),e.toBuffer()],new yd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var Du=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),qu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Uu=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jo=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),yg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Gu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ss=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),lr=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),bg=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Xu=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),eo=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ei=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),mr=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),to=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),gg=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),zu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),gd=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Pd=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ad=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),wd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),no=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Yu=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Pg=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),dr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),ut=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Ag=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),wg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),kg=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),hg=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Tg=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ti={IDO_PROGRAM_ID_V1:gd,IDO_PROGRAM_ID_V2:Pd,IDO_PROGRAM_ID_V3:Ad,IDO_PROGRAM_ID_V4:wd};var kn={OPEN_BOOK_PROGRAM:new ie("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ie("Ray1111111111111111111111111111111111111111"),AMM_V4:new ie("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ie("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ie("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ie("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ie("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ie("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ie("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ie("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ie.default,Router:new ie("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ie("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ie("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ie("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ie("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ie("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ie("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ie("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ie("Ray1111111111111111111111111111111111111111")};import We from"bn.js";var yn=1e4;function Le(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(_({},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 We(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===yn){let c=new We(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new We(yn)),new We(yn-i.transferFeeBasisPoints)),u=new We(i.maximumFee.toString()),l=c.sub(s).gt(u)?s.add(u):c,m=Wn(l.mul(new We(i.transferFeeBasisPoints)),new We(yn)),d=m.gt(r)?r:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Wn(s.mul(new We(i.transferFeeBasisPoints)),new We(yn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function cn(s,e){return s===void 0?e:e===void 0?s:Math.min(s,e)}function Wn(s,e){let{div:t,mod:n}=s.divmod(e);return n.gt(new We(0))?t.add(new We(1)):t}function oo(s,e){if(s.isZero())return new We(0);let t=s.div(e);return t.isZero()?new We(1):s.mod(e).gt(new We(0))?t.add(new We(1)):t}function Ks(s,e,t){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Wn(s.mul(new We(o.transferFeeBasisPoints)),new We(yn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function Cs(s,e,t){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===yn){let a=new We(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new We(yn)),new We(yn-o.transferFeeBasisPoints)),c=new We(o.maximumFee.toString()),u=a.sub(s).gt(c)?s.add(c):a,l=Wn(u.mul(new We(o.transferFeeBasisPoints)),new We(yn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Rs,AddressLookupTableAccount as Co}from"@solana/web3.js";async function Ls({connection:s,address:e,cluster:t="mainnet"}){let n=await on(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Rs(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new Co({key:a,state:Co.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Ko[a.toString()]=c:So[a.toString()]=c}return o}var So={},Ns=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(So[e])return So;let t=new Rs(e),n=await s.getAccountInfo(t);return n&&(So[e]=new Co({key:t,state:Co.deserialize(n.data)})),So},Ko={},Os=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ko[e])return Ko;let t=new Rs(e),n=await s.getAccountInfo(t);return n&&(Ko[e]=new Co({key:t,state:Co.deserialize(n.data)})),Ko};import{PublicKey as Ro,sendAndConfirmTransaction as Ms,SystemProgram as kd,Transaction as ni,TransactionMessage as oi,VersionedTransaction as ii}from"@solana/web3.js";import hd from"axios";var fr=2e3,yr=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 hd.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}=ur(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(kd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Ro(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(X.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!==Ro.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new ni;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 l;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=i!=null?i:await xo(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Jn([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Ms(this.connection,t,this.signers.find(d=>d.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let m=await this.signAllTransactions([t]);if(this.signers.length)for(let d of m)try{d.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(m[0].serialize(),{skipPreflight:r}),signedTx:m[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),r=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=l||{},b=f!=null?f:await xo(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],k=0;for(let T of r){if(++k,k<=p)continue;let h=await Ms(this.connection,T,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(h)}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:y})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));Jn(A);let k=await this.signAllTransactions(A);if(m){let T=0,h=[],w=async()=>{if(!k[T])return;let x=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:y});h.push({txId:x,status:"sent",signedTx:k[T]}),d==null||d([...h]),T++;let B=!1,K=null,I=null,C=L=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let N=h.findIndex(O=>O.txId===x);if(N>-1){if(h[N].status==="error"||h[N].status==="success")return;h[N].status=L.err?"error":"success"}d==null||d([...h]),L.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var L;if(B){clearInterval(K);return}try{let N=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(B=!0,clearInterval(K),C({err:((L=N.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",x))}catch(N){B=!0,clearInterval(K),console.error("getTransaction timeout:",N,x)}},fr)),I=this.connection.onSignature(x,L=>{if(B){this.connection.removeSignatureListener(I);return}B=!0,C(L)},"confirmed"),this.connection.getSignatureStatus(x)};return await w(),{txIds:h.map(x=>x.txId),signedTxs:k}}else{let T=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});T.push(w)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=f,r=Ge(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Os(this.connection):await Ns(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Ro(b));let l=await Ls({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Ro.default.toBase58():i!=null?i:await xo(this.connection,this.blockhashCommitment),d=new oi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ii(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var T;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(Jn([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await cr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let w of h)try{w.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),r=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:r,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),Jn(r),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of r){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await cr(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:f}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(m){let g=0,A=[],k=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++;let h=!1,w=null,x=null,B=K=>{w!==null&&clearInterval(w),x!==null&&this.connection.removeSignatureListener(x);let I=A.findIndex(C=>C.txId===T);if(I>-1){if(A[I].status==="error"||A[I].status==="success")return;A[I].status=K.err?"error":"success"}d==null||d([...A]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(w),B({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(w),console.error("getTransaction timeout:",I,T)}},fr)),x=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,B(K)},"confirmed"),this.connection.getSignatureStatus(T)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=Ge(m,["splitIns","computeBudgetConfig"]),i=n?ur(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...i.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new Ro(A));if(p!==t[l]&&u.length<12&&(Zo({instructions:y,payer:this.feePayer,signers:g})||Zo({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,Zo({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ni().add(...i.instructions,...u)):a.push(new ni().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);Zo({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new ni().add(...i.instructions,...u)):a.push(new ni().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var T;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await xo(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),Jn(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,w=[];for(let x of a){if(++h,h<=b){w.push("tx skipped");continue}let B=await Ms(this.connection,x,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});w.push(B)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),w=[...a.slice(0,b),...h];if(f){let x=0,B=[],K=async()=>{if(!w[x])return;x<b&&(B.push({txId:"",status:"success",signedTx:w[x]}),y==null||y([...B]),x++,K());let I=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:A});B.push({txId:I,status:"sent",signedTx:w[x]}),y==null||y([...B]),x++;let C=!1,L=null,N=null,O=R=>{L!==null&&clearInterval(L),N!==null&&this.connection.removeSignatureListener(N);let v=B.findIndex(z=>z.txId===I);if(v>-1){if(B[v].status==="error"||B[v].status==="success")return;B[v].status=R.err?"error":"success"}y==null||y([...B]),R.err||K()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var R;if(C){clearInterval(L);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(L),O({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(L),console.error("getTransaction timeout:",v,I)}},fr)),N=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:B.map(I=>I.txId),signedTxs:w}}else{let x=[];for(let B=0;B<w.length;B+=1){let K=await this.connection.sendRawTransaction(w[B].serialize(),{skipPreflight:A});x.push(K)}return{txIds:x,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var k;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[]}=A,r=Ge(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await Os(this.connection):await Ns(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let T of c)a[T]===void 0&&u.push(new Ro(T));let l=await Ls({connection:this.connection,address:u});for(let[T,h]of Object.entries(l))a[T]=h;let m=t?ur(t):{instructions:[],instructionTypes:[]},d=await xo(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(_({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],w=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&($o({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||$o({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(T);else{if(b.length===0)throw Error("item ins too big");g+=T===n[g]?1:0;let x={};for(let B of[...new Set(c)])a[B]!==void 0&&(x[B]=a[B]);if(t&&$o({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let B=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ii(B))}else{let B=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ii(B))}y.push(Array.from(new Set(b.map(B=>B.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(B=>p[B]).filter(B=>B!==void 0)),b=[T]}}),b.length>0){let h=[...new Set(b.map(w=>w.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&$o({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ii(w))}else{let w=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ii(w))}y.push(h)}return(k=this.owner)!=null&&k.signer&&y.forEach(T=>{T.some(h=>h.publicKey.equals(this.owner.publicKey))||T.push(this.owner.signer)}),f.forEach((T,h)=>{T.sign(y[h])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async T=>{var I;let{sequentially:h,onTxUpdate:w,skipTxCount:x=0,recentBlockHash:B,skipPreflight:K=!0}=T||{};if(f.map(async(C,L)=>{y[L].length&&C.sign(y[L]),B&&(C.message.recentBlockhash=B)}),Jn(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,L=[];for(let N of f){if(++C,C<=x){console.log("skip tx: ",C),L.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await cr(this.connection,O),L.push(O)}return{txIds:L,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(x,f.length)),L=[...f.slice(0,x),...C];if(h){let N=0,O=[],R=async()=>{if(!L[N])return;if(N<x){O.push({txId:"",status:"success",signedTx:L[N]}),w==null||w([...O]),N++,R();return}let v=await this.connection.sendTransaction(L[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:L[N]}),w==null||w([...O]),N++;let z=!1,H=null,ce=null,se=ae=>{H!==null&&clearInterval(H),ce!==null&&this.connection.removeSignatureListener(ce);let ge=O.findIndex(pe=>pe.txId===v);if(ge>-1){if(O[ge].status==="error"||O[ge].status==="success")return;O[ge].status=ae.err?"error":"success"}w==null||w([...O]),ae.err||R()};this.loopMultiTxStatus&&(H=setInterval(async()=>{var ae;if(z){clearInterval(H);return}try{let ge=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});ge&&(z=!0,clearInterval(H),se({err:((ae=ge.meta)==null?void 0:ae.err)||null}),console.log("tx status from getTransaction:",v))}catch(ge){z=!0,clearInterval(H),console.error("getTransaction timeout:",ge,v)}},fr)),ce=this.connection.onSignature(v,ae=>{if(z){this.connection.removeSignatureListener(ce);return}z=!0,se(ae)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:L}}else{let N=[];for(let O=0;O<L.length;O+=1){let R=await this.connection.sendTransaction(L[O],{skipPreflight:K});N.push(R)}return{txIds:N,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};import{PublicKey as Td}from"@solana/web3.js";import Id from"bn.js";function Bd(s){return typeof s=="object"&&s!==null&&![ze,Re,Td,Ke,Id,Lt,at].some(e=>typeof e=="object"&&s instanceof e)}function pt(s){return typeof s=="string"?ws(s):Array.isArray(s)?s.map(e=>pt(e)):Bd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,pt(t)])):s}import xd from"bn.js";var Ot=new xd(1e6);var ct={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",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",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/v1/tagged/verified",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",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_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",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"},Hu=q(_({},ct),{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",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 Qu="ray_tab_hash",vs="ray_req_hash",Sd=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem(Qu);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem(Qu,s)),s},br=async n=>{var o=n,{logCount:s=1e3,removeLastLog:e}=o,t=Ge(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(vs)||"[]").slice(0,s-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(q(_({},t),{time:Date.now(),session:Sd()}));try{localStorage.setItem(vs,JSON.stringify(i))}catch{if(e){let r=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!r;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(vs,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return br(q(_({},t),{logCount:s,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as Kd,TOKEN_PROGRAM_ID as Cd}from"@solana/spl-token";var gr=we("Raydium_Api"),Fs=new Map,_s=new Map;var Pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=ju.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?Hu.BASE_HOST:ct.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return gr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(gr.error("Request failed"),Promise.reject(r))),this.api.interceptors.response.use(r=>{let{config:a,data:c,status:u}=r,{method:l,baseURL:m,url:d}=a;return n&&br({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),gr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},r=>{let{config:a,response:c={}}=r,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&br({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),gr.error(`${l.toUpperCase()} ${m}${d} ${u||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||ct.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||ct.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||ct.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ju.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||ct.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||ct.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||ct.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||ct.JUP_TOKEN_LIST})).map(t=>q(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?Kd.toBase58():Cd.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||ct.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:r=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||ct.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${r}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||ct.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>Fs.has(r)?(n.push(Fs.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||ct.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Fs.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:r="desc",page:a=1}=e,[c,u]=[t&&yt(t).toBase58(),n&&n!=="undefined"?yt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||ct.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${r}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||ct.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||ct.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||ct.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=_s.get(this.cluster))!=null&&t.length)return _s.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return _s.set(this.cluster,e.data.data),e.data.data}};var Ar="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Zu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Br,SystemProgram as sp}from"@solana/web3.js";import{AccountLayout as Oo,createAssociatedTokenAccountIdempotentInstruction as Hs,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as ap}from"@solana/spl-token";var Es=(...s)=>s.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),De=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=we(t)}createTxBuilder(e){return this.scope.checkOwner(),new yr({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(Es(e))}logInfo(...e){this.logger.info(Es(e))}logAndCreateError(...e){let t=Es(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ep,SystemProgram as tp}from"@solana/web3.js";import np from"bn.js";import{createCloseAccountInstruction as op,createInitializeAccountInstruction as ip,createTransferInstruction as rp,TOKEN_PROGRAM_ID as No}from"@solana/spl-token";import{Keypair as jd,PublicKey as dc}from"@solana/web3.js";import Zd from"bn.js";import{TOKEN_PROGRAM_ID as $d}from"@solana/spl-token";function Rd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function Vs(s,...e){if(!Rd(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${s.length}`)}function Ws(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function $u(s,e){Vs(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var kr=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),ln=(s,e)=>s<<32-e|s>>>e;var eA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ld(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function Ds(s){return typeof s=="string"&&(s=Ld(s)),Vs(s),s}var wr=class{clone(){return this._cloneInto()}},tA={}.toString;function Ju(s){let e=n=>s().update(Ds(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Nd(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;s.setUint32(e+c,r,n),s.setUint32(e+u,a,n)}var ec=(s,e,t)=>s&e^~s&t,tc=(s,e,t)=>s&e^s&t^e&t,hr=class extends wr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=kr(this.buffer)}update(e){Ws(this);let{view:t,buffer:n,blockLen:o}=this;e=Ds(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let c=kr(e);for(;o<=i-r;r+=o)this.process(c,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ws(this),$u(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let m=r;m<o;m++)t[m]=0;Nd(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=kr(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var Od=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),qn=new Uint32Array(64),qs=class extends hr{constructor(){super(64,32,8,!1),this.A=Dn[0]|0,this.B=Dn[1]|0,this.C=Dn[2]|0,this.D=Dn[3]|0,this.E=Dn[4]|0,this.F=Dn[5]|0,this.G=Dn[6]|0,this.H=Dn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:c}=this;return[e,t,n,o,i,r,a,c]}set(e,t,n,o,i,r,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)qn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=qn[m-15],p=qn[m-2],f=ln(d,7)^ln(d,18)^d>>>3,y=ln(p,17)^ln(p,19)^p>>>10;qn[m]=y+qn[m-7]+f+qn[m-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=ln(a,6)^ln(a,11)^ln(a,25),p=l+d+ec(a,c,u)+Od[m]+qn[m]|0,y=(ln(n,2)^ln(n,13)^ln(n,22))+tc(n,o,i)|0;l=u,u=c,c=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,r,a,c,u,l)}roundClean(){qn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var nc=Ju(()=>new qs);import{PublicKey as zd}from"@solana/web3.js";import ac,{isBN as uc}from"bn.js";import{bits as Md,BitStructure as lA,blob as vd,Blob as mA,cstr as dA,f32 as pA,f32be as fA,f64 as yA,f64be as bA,greedy as gA,Layout as Fd,ns64 as PA,ns64be as AA,nu64 as _d,nu64be as wA,offset as Ed,s16 as kA,s16be as hA,s24 as TA,s24be as IA,s32 as Vd,s32be as BA,s40 as xA,s40be as SA,s48 as KA,s48be as CA,s8 as RA,seq as Wd,struct as LA,Structure as Dd,u16 as qd,u16be as NA,u24 as OA,u24be as MA,u32 as Ud,u32be as vA,u40 as FA,u40be as _A,u48 as EA,u48be as VA,u8 as Gd,UInt as Xd,union as WA,Union as DA,unionLayoutDiscriminator as qA,utf8 as UA}from"@solana/buffer-layout";var Tr=Fd,oc=Dd;var Us=Xd;var ic=Gd,Dt=qd;var ri=Ud;var rc=_d;var qe=Vd;var sc=Wd;var xe=vd;var Gs=Md,Xs=Ed;var ro=class extends Tr{constructor(t,n,o){super(t,o);this.blob=xe(t),this.signed=n}decode(t,n=0){let o=new ac(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 ac(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Ir=class extends Tr{constructor(t){super(8,t);this._lower=Gs(ri(),!1),this._upper=Gs(ri(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return _(_({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(s){return new Us(1,s)}function Pt(s){return new Us(4,s)}function P(s){return new ro(8,!1,s)}function re(s){return new ro(16,!1,s)}function cc(s){return new ro(1,!0,s)}function Lo(s){return new ro(8,!0,s)}function lc(s){return new ro(16,!0,s)}var so=class extends Tr{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 F(s){return new so(xe(32),e=>new zd(e),e=>e.toBuffer(),s)}function Ye(s){return new so(ic(),Yd,Hd,s)}function Yd(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function Hd(s){return s?1:0}function mc(s,e){let t=ri("length"),n=E([t,Q(s,Xs(t,-t.span),"values")]);return new so(n,({values:o})=>o,o=>({values:o}),e)}function Qd(s){let e=ri("length"),t=E([e,xe(Xs(e,-e.span),"data")]);return new so(t,({data:n})=>n,n=>({data:n}),s)}function Mt(s){return new so(Qd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var zs=class extends oc{decode(e,t){return super.decode(e,t)}};function E(s,e,t){return new zs(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:uc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=uc(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 sc(s,o,t)}var ao=E([F("mint"),F("owner"),P("amount"),Pt("delegateOption"),F("delegate"),D("state"),Pt("isNativeOption"),P("isNative"),P("delegatedAmount"),Pt("closeAuthorityOption"),F("closeAuthority")]);var lw=we("Raydium_Util");function pc({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=ao.decode(r.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ee(s,c,r.owner).publicKey.equals(i),isNative:!1,programId:r.owner}),o.push({pubkey:i,accountInfo:a,programId:r.owner})}return e&&n.push({mint:dc.default,amount:new Zd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function $e({fromPublicKey:s,programId:e=$d,assignSeed:t}){let n=t?btoa(t).slice(0,32):jd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Jd(s,n,e),seed:n}}function Jd(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=nc(n);return new dc(o)}function Ys(s){let{mint:e,tokenAccount:t,owner:n,programId:o=No}=s;return ip(t,e,n,o)}function hn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=No}=s;return op(e,t,o,n,i)}async function Un(s){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:r}=s,a=await e.getMinimumBalanceForRentExemption(ao.span,n),c=ne(t).add(new np(a)),u=$e({fromPublicKey:o,programId:No});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[tp.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:ao.span,programId:No}),Ys({mint:new ep(gt.address),tokenAccount:u.publicKey,owner:i,programId:No})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:r?[]:[X.CloseAccount],endInstructions:r?[]:[hn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function fc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=No}){return rp(s,e,t,BigInt(String(n)),o,i)}var si=class extends De{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=i!=null?i:!0,this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ee(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=_(_({},{}),t),[i,r,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Gn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ap},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=pc({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:r.context,value:[...r.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=Gn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),r=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&r.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:r,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Br(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Br(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!i||k.pubkey.equals(d))).sort((k,T)=>k.accountInfo.amount.lt(T.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let k=Hs(r,d,r,n,m),T=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&Oo.decode(h.data).mint.equals(n)&&Oo.decode(h.data).owner.equals(r)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else T===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(Z)&&o.amount){let h=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});f.instructions.push(...h.instructions||[]),f.endInstructions.push(...h.endInstructions||[]),f.instructionTypes.push(...h.instructionTypes||[]),f.endInstructionTypes.push(...h.endInstructionTypes||[]),o.amount&&(f.instructions.push(fc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Gn})),f.instructionTypes.push(X.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(hn({owner:r,payer:o.payer||r,tokenAccount:d,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:d,instructionParams:f}}else{let k=$e({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Oo.span),h=sp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:k.seed,newAccountPubkey:k.publicKey,lamports:T+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:Oo.span,programId:m});return f.instructions.push(h,Ys({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),c||(f.endInstructions.push(hn({owner:r,payer:o.payer||r,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Gn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,r=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Hs(r,u,r,t,n);a.instructions=[l],a.instructionTypes=[X.CreateATA],i=u}return o&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[hn({owner:r,payer:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:r=Gn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,r);if(new Br(Z).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Hs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,r);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(Gn)&&Oo.decode(y.data).mint.equals(i)&&Oo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[X.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Gn,amount:i,useSOLBalance:r,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new Br(Z))&&r){let m=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Ge(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=d,f=Ge(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Ce,SystemProgram as Ip}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Rc}from"@solana/spl-token";import{PublicKey as ta}from"@solana/web3.js";var Qs=E([D("instruction")]),js=E([D("instruction")]),up=E([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),re("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),cp=E([P("state"),P("nonce"),F("lpVault"),F("rewardVault"),F(),F(),P(),P(),P("totalReward"),re("perShareReward"),P("lastSlot"),P("perSlotReward")]),lp=E([P("state"),P("nonce"),F("lpVault"),F("rewardVaultA"),P("totalRewardA"),re("perShareRewardA"),P("perSlotRewardA"),D("option"),F("rewardVaultB"),xe(7),P("totalRewardB"),re("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),F()]),mp=E([P(),P("state"),P("nonce"),P("validRewardTokenNum"),re("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(up,5,"rewardInfos"),F("creator"),F(),Q(P(),32,"padding")]),dp=new Proxy(cp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),pp=new Proxy(lp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},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(s,e,t)}}),xr=new Proxy(mp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(_({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),fp=E([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Zs=E([D("instruction"),P("nonce"),Q(fp,5,"rewardTimeInfo")]),$s=E([D("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Js=E([D("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),qw=E([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),ea=E([P("state"),F("id"),F("owner"),P("deposited"),Q(re(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),Uw=E([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),yc=E([P("state"),F("id"),F("owner"),P("deposited"),Q(re(),2,"rewardDebts"),Q(P(),17)]),bc=E([P(),P("state"),F("id"),F("owner"),P("deposited"),Q(re(),5,"rewardDebts"),Q(P(),16)]),qt=E([D("instruction"),P("amount")]),yp=E([F("mint"),F("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),cc("digitShift"),Q(D(),7,"reserved1"),Q(P(),7,"reserved2")]),bp=E([xe(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(D(),32,"reserved1"),Q(yp,4,"votingMints"),Lo("timeOffset"),D("bump"),Q(D(),7,"reserved2"),Q(P(),11,"reserved3")]),gp=E([Lo("startTime"),Lo("endTime"),D("kind"),Q(D(),15,"reserved")]),Pp=E([Q(gp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),D("votingMintConfigIdx"),Q(D(),29,"reserved")]),Ap=E([xe(8),F("voterAuthority"),F("registrar"),Q(Pp,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),Q(D(),94,"reserved")]);import{NATIVE_MINT as $w}from"@solana/spl-token";var Jw=we("Raydium_farm_config"),gc=new ta("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Pc=new ta("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var ek=new ta("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Ac={3:ea,5:yc,6:bc},na=s=>[3,4,5,6].indexOf(s)!==-1,oa=s=>{var r;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=s,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(r=i[e])==null?void 0:r.call(i)},Xn={"Standard SPL":0,"Option tokens":1},jt={[Du.toString()]:3,[qu.toString()]:4,[Uu.toString()]:5,[Jo.toString()]:6,[kn.FARM_PROGRAM_ID_V3.toString()]:3,[kn.FARM_PROGRAM_ID_V4.toString()]:4,[kn.FARM_PROGRAM_ID_V5.toString()]:5,[kn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as Ae,SystemProgram as hc,SYSVAR_CLOCK_PUBKEY as ci,SYSVAR_RENT_PUBKEY as hp,TransactionInstruction as $t}from"@solana/web3.js";import Tc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Nk,createAssociatedTokenAccountIdempotentInstruction as Ok,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import wp from"bn.js";var kp=we("Raydium.farm.util");function ai({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],s);return o}function Zt({programId:s,poolId:e,owner:t,version:n}){let{publicKey:o}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var wc=({programId:s,poolId:e})=>fe([e.toBuffer()],s);function kc(s){return{isSet:new wp(1),rewardPerSecond:ne(s.perSecond),rewardOpenTime:ne(s.openTime),rewardEndTime:ne(s.endTime),rewardType:ne(Xn[s.rewardType])}}function ia(s){return ne(s.endTime).sub(ne(s.openTime)).mul(ne(s.perSecond))}function ui(s){let e=Ac[s];return e||kp.logWithError("invalid version",s),e}var Tp=we("Raydium_farm_instruction"),Gk={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])};function li(s){let{version:e,id:t,ledger:n,programId:o,owner:i}=s,r={3:9,5:10}[e];r||Tp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Qs.span);Qs.encode({instruction:r},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:i,isWritable:!1}),S({pubkey:hc.programId,isWritable:!1}),S({pubkey:hp,isWritable:!1})];return{instruction:new $t({programId:o,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Ic(s){var n;let e=Buffer.alloc(Zs.span);Zs.encode({instruction:0,nonce:new Tc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...Ps,S({pubkey:s.farmId}),S({pubkey:s.farmAuthority,isWritable:!1}),S({pubkey:s.lpVault}),S({pubkey:s.lpMint,isWritable:!1}),S({pubkey:s.lockVault}),S({pubkey:s.lockMint,isWritable:!1}),S({pubkey:(n=s.lockUserAccount)!=null?n:st}),S({pubkey:s.owner,isWritable:!1,isSigner:!0})];for(let o of s.rewardInfo)t.push(S({pubkey:o.rewardMint,isWritable:!1}),S({pubkey:o.rewardVault}),S({pubkey:o.userRewardToken}));return{instruction:new $t({programId:s.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function Bc(s){let e=Buffer.alloc(js.span);js.encode({instruction:5},e);let t=[S({pubkey:Tn,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.lpVault,isWritable:!1}),S({pubkey:s.rewardVault}),S({pubkey:s.userRewardToken}),S({pubkey:s.owner,isWritable:!1,isSigner:!0})];return{instruction:new $t({programId:s.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function ra({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc($s.span);$s.encode({instruction:3,rewardReopenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardPerSecond:ne(o.perSecond)},i);let r=[S({pubkey:Tn,isWritable:!1}),S({pubkey:n.id}),S({pubkey:n.lpVault,isWritable:!1}),S({pubkey:e}),S({pubkey:t}),S({pubkey:s,isWritable:!1,isSigner:!0})];return new $t({programId:n.programId,keys:r,data:i})}function sa({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Js.span);Js.encode({instruction:4,isSet:new Tc(1),rewardPerSecond:ne(o.perSecond),rewardOpenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardType:ne(Xn[o.rewardType])},i);let r=[...Ps,S({pubkey:t.id}),S({pubkey:t.authority,isWritable:!1}),S({pubkey:o.mint,isWritable:!1}),S({pubkey:n}),S({pubkey:e}),S({pubkey:s,isWritable:!1,isSigner:!0})];return new $t({programId:t.programId,keys:r,data:i})}function mi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new Ae(e.programId),new Ae(e.id)],u=Zt({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(qt.span);qt.encode({instruction:2,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:c}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:u}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new Ae(t.rewardInfos[d].vault)})),m.push(S({pubkey:o[d]}));return new $t({programId:a,keys:m,data:l})}function di(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(qt.span);qt.encode({instruction:12,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:o[p]})),d.push(S({pubkey:new Ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function xc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=E([D("instruction"),P("amount")]),m=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:a[0]}),S({pubkey:i,isSigner:!0,isWritable:!1}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1}),S({pubkey:o[1]}),S({pubkey:new Ae(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:r},d),new $t({keys:m,programId:c,data:d})}function pi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(qt.span);qt.encode({instruction:11,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function Sc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(qt.span);qt.encode({instruction:10,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function Kc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(qt.span);qt.encode({instruction:11,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:o[p]})),d.push(S({pubkey:new Ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function Cc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new Ae(e.programId),new Ae(e.id)],u=Zt({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(qt.span);qt.encode({instruction:1,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:hc.programId,isWritable:!1}),S({pubkey:c}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:u}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new Ae(t.rewardInfos[d].vault)})),m.push(S({pubkey:o[d]}));return new $t({programId:a,keys:m,data:l})}var fi=class extends De{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(st)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ia(q(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Jo,txVersion:i,feePayer:r,lockProgram:a}){var x,B;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Ce(e.lpMint.address),lockInfo:{lockMint:(x=a==null?void 0:a.mint)!=null?x:gc,lockVault:(B=a==null?void 0:a.vault)!=null?B:Pc},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(r),m=n!=null?n:this.scope.ownerPubKey,d=$e({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(xr.span);l.addInstruction({instructions:[Ip.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:xr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=wc({programId:new Ce(u.programId),poolId:d.publicKey}),b=ai({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],A=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(Xn[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(kc(K));let{rewardPubKey:I,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=K.mint.equals(st)?new Ce(gt.address):K.mint;A.push({rewardMint:L,rewardVault:ai({programId:u.programId,poolId:d.publicKey,mint:L,type:"rewardVault"}),userRewardToken:I})}let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Ce(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=Ic({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=jt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=pt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,l=n.mint.equals(st)?new Ce(gt.address):n.mint,m=c.rewardInfos.findIndex(A=>new Ce(A.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:st,f=this.createTxBuilder(i),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[ra({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var m;let r=jt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=pt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let u=t||this.scope.ownerPubKey,l=this.createTxBuilder(i);for(let d of n){let p=d.mint.equals(st)?new Ce(gt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Ce(T.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(m=y.vault)!=null?m:st,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:d,payer:u});A&&l.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ra({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=jt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=pt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r),m=o.mint.equals(st)?new Ce(gt.address):o.mint,d=ai({programId:new Ce(n.programId),poolId:new Ce(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=m,l.addInstruction({instructions:[sa({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=jt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=pt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r);for(let m of o){let d=m.mint.equals(st)?new Ce(gt.address):m.mint,p=ai({programId:new Ce(n.programId),poolId:new Ce(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:m,payer:u});y&&l.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=sa({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:m}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:d,programId:p}=n,f=jt[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),na(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Ce(n.programId),new Ce(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],A=Zt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(i);k.addCustomComputeBudget(l),k.addTipInstruction(m);let T={};for(let O of this.scope.account.tokenAccounts)if(a){let R=ee(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&R.equals(O.publicKey)&&(T[O.mint.toString()]=O.publicKey)}else T[O.mint.toString()]=O.publicKey;let h=g.lpMint,w=T[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",T);let x=[];for(let O of d){let R=r&&O.mint.address===Z.toString(),v=T[O.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Ce(O.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});v=z,H&&k.addInstruction(H)}T[O.mint.address]=v,x.push(v)}let B,K=await this.scope.connection.getAccountInfo(A);if(K&&(B=ui(f).decode(K.data)),n.programId!==Jo.toString()&&n.programId!==kn.FARM_PROGRAM_ID_V6.toString()&&!B){let{instruction:O,instructionType:R}=li({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[O],instructionTypes:[R]})}let I=oa({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});I&&this.logAndCreateError(I);let C={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Ce(O))},L=f===6?Cc(C):f===5?Kc(C):Sc(C),N={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[L],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:r,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m,txTipConfig:d}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=jt[n.programId];na(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(m),b.addTipInstruction(d);let g={};for(let I of this.scope.account.tokenAccounts)if(c){let C=ee(this.scope.ownerPubKey,I.mint).publicKey;I.publicKey&&C.equals(I.publicKey)&&(g[I.mint.toString()]=I.publicKey)}else g[I.mint.toString()]=I.publicKey;if(f!==4){let I=Zt({programId:new Ce(n.programId),poolId:new Ce(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)ui(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:N}=li({id:new Ce(y.id),programId:new Ce(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[N]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=r&&A===Z.toString(),T=g[A.toString()];if(!T){let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Ce(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[A.toString()]=T;let h=[];for(let I of p){let C=r&&I.mint.address===Z.toString(),L=g[I.mint.address];if(!L){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Ce(I.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});L=N,O&&b.addInstruction(O)}g[I.mint.address]=L,h.push(L)}let w=oa({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let x={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Ce(I))},B=f===6?mi(x):f===5?di(x):f===4?xc(x):pi(x),K={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[B],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:i,feePayer:r}){var y;this.scope.checkOwner();let a=pt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=jt[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>yt(b.mint.address).equals(yt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:st,m=this.createTxBuilder(r),d;if(t.equals(st)||t.equals(Ce.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ia(q(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new M(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=b.addresses.newAccount,m.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?d=b:(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Rc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=Bc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(o),m.addTipInstruction(i),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(o),m={};for(let f of this.scope.account.tokenAccounts)if(i){let y=ee(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>q(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=jt[y],T=b.address,h=n&&T===Z.toString(),w=m[T];if(!w){let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Ce(T),notUseTokenAccount:h,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:i,checkCreateATAOwner:r});w=L,N&&l.addInstruction(N)}m[T.toString()]=w;let x=[];for(let L of g){let N=n&&L.mint.address===Z.toString(),O=m[L.mint.address];if(!O)if(N){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Ce(L.mint.address),notUseTokenAccount:N,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:i,checkCreateATAOwner:r});O=R,v&&l.addInstruction(v)}else{let R=new Ce(L.mint.address);O=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Rc(this.scope.ownerPubKey,O,this.scope.ownerPubKey,R)]})}m[L.mint.address]=O,x.push(O)}let B=p[A],K={amount:Nt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:B,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Ce(L))},I=k===6?mi(K):k===5?di(K):pi(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as df,NATIVE_MINT as Vr,TOKEN_PROGRAM_ID as Yn}from"@solana/spl-token";import{Keypair as Nr,PublicKey as Y,SystemProgram as Sn,TransactionInstruction as ft}from"@solana/web3.js";import ga from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as hi,TOKEN_2022_PROGRAM_ID as je,TOKEN_PROGRAM_ID as Oe}from"@solana/spl-token";import Mp from"bn.js";import Jt from"bn.js";var He=new Jt(0),Ut=new Jt(1),In=new Jt(-1),it=new Jt(1).shln(64),Sr=new Jt(1).shln(128),yi=it.sub(Ut),bi=64,Lc=Sr.subn(1),At=-443636,ht=-At,Tt=new Jt("4295048016"),It=new Jt("79226673521066979257578248091"),Kr=new Jt("4295048017"),Cr=new Jt("79226673521066979257578248090"),Nc=16,Oc="59543866431248",Mc="184467440737095516",vc="15793534762490258745",Rr=new Jt(10).pow(new Jt(6));var Fc={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:[]},kh=new Jt("18446744073700000000");import Pe from"bn.js";function Lr(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function aa(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function ua(s,e){let t=0;for(let n=0;n<s&&!e.testn(n);n++)t++;return t}function gi(s,e){for(let t=0;t<s;t++)if(e.testn(t))return!1;return!0}function _c(s,e){return gi(s,e)?null:aa(s,e)}function Ec(s,e){return gi(s,e)?null:ua(s,e)}var xh=Buffer.from("amm_config","utf8"),ca=Buffer.from("pool","utf8"),la=Buffer.from("pool_vault","utf8"),xp=Buffer.from("pool_reward_vault","utf8"),Vc=Buffer.from("position","utf8"),Sp=Buffer.from("tick_array","utf8"),Kp=Buffer.from("operation","utf8"),Cp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Rp=Buffer.from("observation","utf8");function Wc(s,e,t,n){return fe([ca,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function ma(s,e,t){return fe([la,e.toBuffer(),t.toBuffer()],s)}function Dc(s,e,t){return fe([xp,e.toBuffer(),t.toBuffer()],s)}function he(s,e,t){return fe([Sp,e.toBuffer(),Lr(t)],s)}function mn(s,e,t,n){return fe([Vc,e.toBuffer(),Lr(t),Lr(n)],s)}function Bt(s,e){return fe([Vc,e.toBuffer()],s)}function Bn(s){return fe([Buffer.from("metadata","utf8"),an.toBuffer(),s.toBuffer()],an)}function Pi(s){return fe([Kp],s)}function Je(s,e){return fe([Cp,e.toBuffer()],s)}function qc(s,e){return fe([Rp,e.toBuffer()],s)}var Uc=Buffer.from("locked_position","utf8");function da(s,e){return fe([Uc,e.toBuffer()],s)}function Mo(s,e){return fe([Uc,e.toBuffer()],s)}var Lp=Buffer.from("support_mint","utf8");function pa(s,e){return fe([Lp,e.toBuffer()],s)}import{PublicKey as Gt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Gc}from"@solana/spl-token";import Ue from"bn.js";import bn from"bn.js";var Ai=class{static getfeeGrowthInside(e,t,n){let o=new bn(0),i=new bn(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let r=new bn(0),a=new bn(0);e.tickCurrent<n.tick?(r=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ye.wrappingSubU128(ye.wrappingSubU128(e.feeGrowthGlobalX64A,o),r),u=ye.wrappingSubU128(ye.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,o),a=ye.mulDivFloor(ye.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,it),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,it),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,o),a=ye.mulDivFloor(ye.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,it),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,it),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],r=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ye.wrappingSubU128(c,u.growthInsideLastX64),m=ye.mulDivFloor(l,t.liquidity,it),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],r=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ye.wrappingSubU128(c,u.growthInsideLastX64),m=ye.mulDivFloor(l,t.liquidity,it),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let r=0;r<o.length;r++){let a=new bn(0);t.liquidityGross.eqn(0)?a=o[r].rewardGrowthGlobalX64:e<t.tick?a=o[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ye.wrappingSubU128(ye.wrappingSubU128(o[r].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let r=0;r<o.length;r++){let a=new bn(0);t.liquidityGross.eqn(0)?a=o[r].rewardGrowthGlobalX64:e<t.tick?a=o[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ye.wrappingSubU128(ye.wrappingSubU128(o[r].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:r}){var b,g,A,k;let a=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=le.getSqrtPriceX64FromTick(t.tickLower),u=le.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=Ie.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Le(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,r,!0),Le(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,r,!0)],[f,y]=[Le(new bn(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,r,!0),Le(new bn(new M(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:cn(d.expirationTime,p.expirationTime)}}};var Np=15,Te=class{static async getTickArrays(e,t,n,o,i,r,a){let c=[],u=$.getTickArrayStartIndexByTick(o,i),l=$.getInitializedTickArrayInRange(r,a,i,u,Math.floor(Np/2));for(let p=0;p<l.length;p++){let{publicKey:f}=he(t,n,l[p]);c.push(f)}let m=(await on(e,c)).map(p=>p!==null?wi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,r){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,r);for(;a==null||a.liquidityGross.lten(0);){if(u=$.getNextTickArrayStartIndex(u,i,r),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,r);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let r=Math.floor(e/Te.tickCount(t)),a=n?$.searchLowBitFromStart(o,i,r-1,1,t):$.searchHightBitFromStart(o,i,r+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=rt-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<rt;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=he(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:r,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,r){let a=$.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(r)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<rt;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if($.checkIsOutOfBoundary(e)){if(e>ht)return!1;let n=$.getTickArrayStartIndexByTick(At,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return rt*e}};var fa=14,xn=class{static maxTickInTickarrayBitmap(e){return e*rt*uo}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!Te.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),r=o?t-Te.tickCount(n):t+Te.tickCount(n);if(r<-i||r>=i)return{isInit:!1,tickIndex:t};let a=n*rt,c=r/a+512;r<0&&r%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=_c(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=Ec(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-Te.tickCount(n)}}}},ki=class{static getBitmapOffset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=xn.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=xn.maxTickInTickarrayBitmap(e),n=-t;if(ht<=t)throw Error(`extensionTickBoundary check error: ${ht}, ${t}`);if(n<=At)throw Error(`extensionTickBoundary check error: ${n}, ${At}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:$.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=Te.tickCount(t),r=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(r,t,o);return this.nextInitializedTickArrayInBitmap(a,r,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:r}=xn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=$.mergeTickArrayBitmap(e).shln(uo-1-a),u=gi(512,c)?null:aa(512,c);if(u!==null){let l=t-u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=gi(512,c)?null:ua(512,c);if(u!==null){let l=t+u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r-Te.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%xn.maxTickInTickarrayBitmap(t),o=Math.floor(n/Te.tickCount(t));return e<0&&n!=0&&(o=uo-o),o}};var Ne=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:f,sqrtPriceX64:y,feeAmount:b}=co.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,r);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(In),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let r=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,r);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let y=this.preInitializedTickArrayStartIndex(e,r);if(y.isExist){let{publicKey:b}=he(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=co.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,r,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(In),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ne.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ki.checkTickArrayIsInit(Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):$.checkTickArrayIsInitialized($.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:r}=this.nextInitializedTickArrayStartIndex(e,Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=he(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/Te.tickCount(e.tickSpacing)),o=t?$.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):$.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=xn.nextInitializedTickArrayStartIndex($.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:r,tickIndex:a}=ki.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<At||t>ht)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let r=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=q(_({},m),{perSecond:ye.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Gt(d)});if(p.tokenMint.equals(Gt.default))continue;if(n<=p.openTime.toNumber()||o.eq(He)){r.push(p);continue}let f=new Ue(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=ye.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),A=ye.mulDivFloor(y,p.emissionsPerSecondX64,it),k=p.rewardTotalEmissioned.add(A);r.push(q(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return r}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let r=$.getTickArrayStartIndexByTick(i,e);if(r>=n||r<o)return!0}return!1}static tickRange(e){let t=xn.maxTickInTickarrayBitmap(e),n=-t;return t>ht&&(t=Te.getArrayStartIndex(ht,e)+Te.tickCount(e)),n<At&&(n=Te.getArrayStartIndex(At,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Te.tickCount(t)*uo}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()]=zc.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=$.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=$.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let r=await Ee(e,i,{batchRequest:n}),a={};for(let c of r){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=wi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let r=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(r.find(l=>l.equals(u.state.programId))||r.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of r)u.push(Bt(p,d).publicKey);let l=await on(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=vo.decode(d.data),f=p.poolId.toString(),y=e.find(B=>B.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=$._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=$._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:T}=Ie.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:k,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>q(_({},B),{pendingReward:new Ue(0)})),leverage:h,tokenFeeAmountA:new Ue(0),tokenFeeAmountB:new Ue(0)}];let w=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),x=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(i){let d=Object.values(m),p=await on(t,d,{batchRequest:o}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=wi.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,k=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[k].toString()],w=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],x=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:K}=await Ai.GetPositionFees(y,g,w,x),I=await Ai.GetPositionRewards(y,g,w,x);g.tokenFeeAmountA=B.gte(new Ue(0))?B:new Ue(0),g.tokenFeeAmountB=K.gte(new Ue(0))?K:new Ue(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ue(0))?I[C]:new Ue(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:r,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var L;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Tt.add(new Ue(1)):It.sub(new Ue(1)):u=le.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Le(i,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=Ne.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((L=p.fee)!=null?L:He),u,c),k=Le(y,d,o,!1),T=le.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new M(1).div(T),w=y.mul(new Ue(Math.floor((1-r)*1e10))).div(new Ue(1e10)),x=Le(w,d,o,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(h).sub(B).abs(),I=B,C=new at(new M(K).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:x,expirationTime:cn(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:r,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ze(q(_({},u),{mint:u.address,isToken2022:u.programId===Gc.toBase58()})),new ze(q(_({},l),{mint:l.address,isToken2022:l.programId===Gc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:k,priceImpact:T,fee:h,remainingAccounts:w,executionPriceX64:x}=Ne.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Gt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),B=q(_({},f),{amount:new Re(m,f.amount),fee:f.fee===void 0?void 0:new Re(m,f.fee)}),K=q(_({},y),{amount:new Re(d,y.amount),fee:y.fee===void 0?void 0:new Re(d,y.fee)}),I=q(_({},b),{amount:new Re(d,b.amount),fee:b.fee===void 0?void 0:new Re(d,b.fee)}),C=new Lt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new Lt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:k.mul(new M(10**(20+d.decimals))).toFixed(0)}),N=new Re(m,h);return{allTrade:p,realAmountIn:B,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:L,priceImpact:T,fee:N,remainingAccounts:w,executionPriceX64:x}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:r,priceLimit:a=new M(0)}){var I;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?It.sub(new Ue(1)):Tt.add(new Ue(1)):l=le.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Le(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=Ne.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:He),l),b=c?e.mintB.address:e.mintA.address,g=Le(d,u[b],o,!1),A=le.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?A:new M(1).div(A),T=d.mul(new Ue(Math.floor((1+r)*1e10))).div(new Ue(1e10)),h=Le(T,u[b],o,!0),w=c?e.currentPrice:new M(1).div(e.currentPrice),x=new M(k).sub(w).abs(),B=w,K=new at(new M(x).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:cn(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=$.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=$.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(r,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-r,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((f=i.rewardApr[0])!=null?f:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[yt(e.mintA.address).toString()],d=o[yt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=le.getSqrtPriceX64FromTick(r),g=le.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),w=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(k.toString()).div(new M(10).pow(f)).mul(d.value)),x=new M(T.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(h.toString()).div(new M(10).pow(f)).mul(d.value)),B=new M(1).div(w.add(x)),I=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),C=3600*24*365,L=e.rewardDefaultInfos.map(N=>{var v,z;let O=N.mint.decimals,R=o[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((z=N.endTime)!=null?z:0)||!N.perSecond||!R||O===void 0?0:new M(R.value).mul(new M(N.perSecond).mul(C)).div(new M(10).pow(O)).mul(B).mul(100).toNumber()});return{feeApr:I,rewardsApr:L,apr:I+L.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=le.getSqrtPriceX64FromTick(n),d=le.getSqrtPriceX64FromTick(o),p=Le(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ue(new M(p.amount.sub((A=p.fee)!=null?A:He).toString()).toFixed(0)),y;if(l.lte(m))y=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ue(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?k:T}else y=t?new Ue(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let b=await Ne.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,g,A,k;let c=le.getSqrtPriceX64FromTick(n),u=le.getSqrtPriceX64FromTick(o),l=a?1+r:1-r,m=Ie.getAmountsFromLiquidity(le.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Le(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Le(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Le(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),Le(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:cn(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Gt(c.id));(await on(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=lo.decode(c.data))});let r=t.map(c=>Je(new Gt(c.programId),new Gt(c.id)).publicKey),a=await Ne.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(_({},c),{[u.id]:q(_({},n[u.id]),{id:new Gt(u.id),version:6,programId:new Gt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(_({},u.config),{id:new Gt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:Je(new Gt(u.programId),new Gt(u.id)).publicKey,exBitmapInfo:a[Je(new Gt(u.programId),new Gt(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]}};var ya={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Xc(s){return q(_({},s),{type:"Concentrated",programId:s.programId.toString(),id:s.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:s.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:s.ammConfig.tradeFeeRate,openTime:s.startTime.toString(),tvl:0,day:ya,week:ya,month:ya,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(_({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ye=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(He)||(i=i.add(Ut)),i}static mulDivFloor(e,t,n){if(n.eq(He))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(He))throw new Error("division by 0");return e.mul(t).add(n.sub(Ut)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new Pe(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Sr).sub(t).mod(Sr)}};function lt(s,e){return ba(s.mul(e),64,256)}function Op(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ba(s,e,t){let n=s.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var le=class{static sqrtPriceX64ToPrice(e,t,n){return ye.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ye.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(He))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(He))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(He))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(He))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(He))return e;let i=t.shln(bi);if(o){let r=i,a=i.add(n.mul(e));return a.gte(r)?ye.mulDivCeil(r,e,a):ye.mulDivRoundingUp(r,Ut,r.div(e).add(n))}else{let r=n.mul(e);if(!i.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(r);return ye.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(bi);if(o)return e.add(i.div(t));{let r=ye.mulDivRoundingUp(i,Ut,t);if(!e.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(r)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<At||e>ht)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new Pe("18445821805675395072"):new Pe("18446744073709551616");return(t&2)!=0&&(n=lt(n,new Pe("18444899583751176192"))),(t&4)!=0&&(n=lt(n,new Pe("18443055278223355904"))),(t&8)!=0&&(n=lt(n,new Pe("18439367220385607680"))),(t&16)!=0&&(n=lt(n,new Pe("18431993317065453568"))),(t&32)!=0&&(n=lt(n,new Pe("18417254355718170624"))),(t&64)!=0&&(n=lt(n,new Pe("18387811781193609216"))),(t&128)!=0&&(n=lt(n,new Pe("18329067761203558400"))),(t&256)!=0&&(n=lt(n,new Pe("18212142134806163456"))),(t&512)!=0&&(n=lt(n,new Pe("17980523815641700352"))),(t&1024)!=0&&(n=lt(n,new Pe("17526086738831433728"))),(t&2048)!=0&&(n=lt(n,new Pe("16651378430235570176"))),(t&4096)!=0&&(n=lt(n,new Pe("15030750278694412288"))),(t&8192)!=0&&(n=lt(n,new Pe("12247334978884435968"))),(t&16384)!=0&&(n=lt(n,new Pe("8131365268886854656"))),(t&32768)!=0&&(n=lt(n,new Pe("3584323654725218816"))),(t&65536)!=0&&(n=lt(n,new Pe("696457651848324352"))),(t&131072)!=0&&(n=lt(n,new Pe("26294789957507116"))),(t&262144)!=0&&(n=lt(n,new Pe("37481735321082"))),e>0&&(n=Lc.div(n)),n}static getTickFromPrice(e,t,n){return le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(It)||e.lt(Tt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Pe(t-64),o=Op(n,32,128),i=new Pe("8000000000000000","hex"),r=0,a=new Pe(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new Pe(0))&&r<Nc;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(i.mul(f)),i=i.shrn(1),r+=1}let u=a.shrn(32),m=o.add(u).mul(new Pe(Oc)),d=ba(m.sub(new Pe(Mc)),64,128).toNumber(),p=ba(m.add(new Pe(vc)),64,128).toNumber();return d==p?d:le.getSqrtPriceX64FromTick(p).lte(e)?p:d}},mo=class{static getTickWithPriceAndTickspacing(e,t,n,o){let r=le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,n,o))/t;return r<0?r=Math.floor(r):r=Math.ceil(r),r*t}static roundPriceWithTickspacing(e,t,n,o){let i=mo.getTickWithPriceAndTickspacing(e,t,n,o),r=le.getSqrtPriceX64FromTick(i);return le.sqrtPriceX64ToPrice(r,n,o)}},Ie=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(He))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(bi),r=t.sub(e);return o?ye.mulDivRoundingUp(ye.mulDivCeil(i,r,t),Ut,e):ye.mulDivFloor(i,r,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(He))throw new Error("sqrtPriceX64A must greater than 0");return o?ye.mulDivCeil(n,t.sub(e),it):ye.mulDivFloor(n,t.sub(e),it)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),r=t.sub(e),a=i.div(r);return o?ye.mulDivRoundingUp(a,Ut,yi):a.shrn(bi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ye.mulDivFloor(n,yi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Ie.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let r=Ie.getLiquidityFromTokenAmountA(e,n,o,!1),a=Ie.getLiquidityFromTokenAmountB(t,e,i);return r.lt(a)?r:a}else return Ie.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Ie.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new Pe(0)};if(e.lt(n)){let r=Ie.getTokenAmountAFromLiquidity(e,n,o,i),a=Ie.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:r,amountB:a}}else return{amountA:new Pe(0),amountB:Ie.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=Ie.getAmountsFromLiquidity(e,t,n,o,r),l=i?1+a:1-a,m=new Pe(new M(c.toString()).mul(l).toFixed(0)),d=new Pe(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:r,epochInfo:a,amountAddFee:c}){var A,k,T,h;let u=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=le.getSqrtPriceX64FromTick(t),m=le.getSqrtPriceX64FromTick(n),d=r?1+i:1-i,p=Ie.getAmountsFromLiquidity(u,l,m,o,r),[f,y]=[Le(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),Le(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[b,g]=[Le(new Pe(new M(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Le(new Pe(new M(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:o,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:cn(f.expirationTime,y.expirationTime)}}},co=class{static swapCompute(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y=!1){if(d.eq(He))throw new Error("amountSpecified must not be 0");if(f||(f=r?Tt.add(Ut):It.sub(Ut)),r){if(f.lt(Tt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(It))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(He),g={amountSpecifiedRemaining:d,amountCalculated:He,sqrtPriceX64:m,tick:u>p?Math.min(p+Te.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new Pe(0)},A=p,k=n[p],T=0,h=!r&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(He)&&!g.sqrtPriceX64.eq(f);){T>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let x=$.nextInitTick(k,g.tick,l,r,h),B=x||null,K=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let C=Ne.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},A,r);if(!C.isExist){if(y)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=C.nextStartIndex;let{publicKey:L}=he(e,t,A);K=L,k=n[A];try{B=$.firstInitializedTick(k,r)}catch{throw Error("not found next tick info")}}w.tickNext=B.tick,w.initialized=B.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),w.tickNext<At?w.tickNext=At:w.tickNext>ht&&(w.tickNext=ht),w.sqrtPriceNextX64=le.getSqrtPriceX64FromTick(w.tickNext);let I;if(r&&w.sqrtPriceNextX64.lt(f)||!r&&w.sqrtPriceNextX64.gt(f)?I=f:I=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=co.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(w.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(w.amountIn.add(w.feeAmount)),g.amountCalculated=g.amountCalculated.sub(w.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(w.amountOut),g.amountCalculated=g.amountCalculated.add(w.amountIn.add(w.feeAmount))),g.sqrtPriceX64.eq(w.sqrtPriceNextX64)){if(w.initialized){let C=B.liquidityNet;r&&(C=C.mul(In)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=w.tickNext!=g.tick&&!r&&k.startTickIndex===w.tickNext,g.tick=r?w.tickNext-1:w.tickNext}else if(g.sqrtPriceX64!=w.sqrtPriceStartX64){let C=le.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&k.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:w,isExist:x}=Te.nextInitializedTickArray(g.tick,l,r,o,i);x&&p!==w&&(g.accounts.push(he(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:He,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i,r){let a={sqrtPriceX64Next:new Pe(0),amountIn:new Pe(0),amountOut:new Pe(0),feeAmount:new Pe(0)},c=o.gte(He);if(c){let l=ye.mulDivFloor(o,Rr.sub(new Pe(i.toString())),Rr);a.amountIn=r?Ie.getTokenAmountAFromLiquidity(t,e,n,!0):Ie.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=le.getNextSqrtPriceX64FromInput(e,n,l,r)}else a.amountOut=r?Ie.getTokenAmountBFromLiquidity(t,e,n,!1):Ie.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(In).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=le.getNextSqrtPriceX64FromOutput(e,n,o.mul(In),r);let u=t.eq(a.sqrtPriceX64Next);return r?(u&&c||(a.amountIn=Ie.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=Ie.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:Ie.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:Ie.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(In))&&(a.amountOut=o.mul(In)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=ye.mulDivCeil(a.amountIn,new Pe(i),Rr.sub(new Pe(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var rt=60,uo=512,$=class{static getTickArrayAddressByTick(e,t,n,o){let i=$.getTickArrayStartIndexByTick(n,o),{publicKey:r}=he(e,t,i);return r}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=$.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=rt)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Te.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Te.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*rt,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*rt,i=Math.floor(t/o)+512,r=Math.abs(i);return{isInitialized:e.testn(r),startIndex:(r-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*rt:e+t*rt}static mergeTickArrayBitmap(e){let t=new Mp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let r=Math.floor(o/(n*rt));return[...$.searchLowBitFromStart(e,t,r-1,i,n),...$.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,uo,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=$.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=he(e,t,c);r.push({tickArrayStartIndex:c,tickArrayAddress:u})}return r}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>$.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=Te.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>$.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=Te.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<At||e>ht}static nextInitTick(e,t,n,o,i){if(Te.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<rt;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=rt-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<rt;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=le.getSqrtPriceX64FromTick(t),i=le.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),i=mo.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=le.getSqrtPriceX64FromTick(i),a=le.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=le.getSqrtPriceX64FromTick(t),i=le.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),i=mo.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=le.getSqrtPriceX64FromTick(i),a=le.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new M(1).div(a)}}};var Yc=E([xe(8),D("bump"),Dt("index"),F(""),Pt("protocolFeeRate"),Pt("tradeFeeRate"),Dt("tickSpacing"),Q(P(),8,"")]),vp=E([Pt("blockTimestamp"),Lo("tickCumulative"),Q(P(),4)]),Hc=E([xe(8),Ye("initialized"),P("recentEpoch"),Dt("observationIndex"),F("poolId"),Q(vp,100,"observations"),Q(P(),4)]),Fp=E([D("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),re("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),re("rewardGrowthGlobalX64")]),lo=E([xe(8),D("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),Dt("tickSpacing"),re("liquidity"),re("sqrtPriceX64"),qe("tickCurrent"),Pt(),re("feeGrowthGlobalX64A"),re("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),re("swapInAmountTokenA"),re("swapOutAmountTokenB"),re("swapInAmountTokenB"),re("swapOutAmountTokenA"),D("status"),Q(D(),7,""),Q(Fp,3,"rewardInfos"),Q(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Q(P(),15*4-3,"padding")]),_p=E([re("growthInsideLastX64"),P("rewardAmountOwed")]),vo=E([xe(8),D("bump"),F("nftMint"),F("poolId"),qe("tickLower"),qe("tickUpper"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(_p,3,"rewardInfos"),Q(P(),8,"")]),vT=E([xe(8),D("bump"),F("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(re(),3,"rewardGrowthInside"),Q(P(),8,"")]),Ep=E([qe("tick"),lc("liquidityNet"),re("liquidityGross"),re("feeGrowthOutsideX64A"),re("feeGrowthOutsideX64B"),Q(re(),3,"rewardGrowthsOutsideX64"),Q(Pt(),13,"")]),wi=E([xe(8),F("poolId"),qe("startTickIndex"),Q(Ep,rt,"ticks"),D("initializedTickCount"),Q(D(),115,"")]),Qc=E([xe(329),Q(F(),100,"whitelistMints")]),zc=E([xe(8),F("poolId"),Q(Q(P(),8),fa,"positiveTickArrayBitmap"),Q(Q(P(),8),fa,"negativeTickArrayBitmap")]),FT=E([P(),D("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(P(),8)]),jc=E([xe(8),D("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),P("recentEpoch"),Q(P(),8)]);Hc.span;var Zc=we("Raydium_Clmm"),Xt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},$c=[188,37,179,131,82,150,84,73],Jc=[16,72,250,198,14,162,212,19],Be=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=E([re("sqrtPriceX64"),P("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:He},g);let A=Buffer.from([...Xt.createPool,...g]);return new ft({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new Y(o.address),new Y(i.address)],{publicKey:m}=Wc(t,r,u,l),{publicKey:d}=qc(t,m),{publicKey:p}=ma(t,m,u),{publicKey:f}=ma(t,m,l),y=Je(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,r,d,u,p,new Y(o.programId||Oe),l,f,new Y(i.programId||Oe),y,a,c)];return{signers:[],instructions:b,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:y,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I){let C=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:x,amountMaxB:B,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let R=Buffer.from([...Xt.openPosition,...O]);return new ft({keys:N,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K){let I=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{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:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:w,amountMaxB:x,withMetadata:B==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...Xt.openPositionWithTokenEx,...N]);return new ft({keys:L,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new Y(e.programId),new Y(e.id)],y;if(l)y=new Y((await l(1))[0]);else{let K=Nr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:w}=Bt(p,y),{publicKey:x}=mn(p,f,o,i),B=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0);return{signers:d,instructions:[B],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new Y(e.programId),new Y(e.id)],y;if(l)y=new Y((await l(1))[0]);else{let K=Nr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:w}=Bt(p,y),{publicKey:x}=mn(p,f,o,i),B=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,u,r,a,c,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,u,r,a,c,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[B],signers:d,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I){let C=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ga(0),amountMaxA:x==="MintA"?B:K,amountMaxB:x==="MintA"?K:B,withMetadata:w==="create",baseFlag:x==="MintA",optionBaseFlag:1},O);let R=Buffer.from([...Xt.openPosition,...O]);return new ft({keys:N,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K){let I=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{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:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new ga(0),amountMaxA:w==="MintA"?x:B,amountMaxB:w==="MintA"?B:x,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...Xt.openPositionWithTokenEx,...N]);return new ft({keys:L,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new Y((await l(1))[0]);else{let K=Nr.generate();p.push(K),d=K.publicKey}let[f,y]=[new Y(e.programId),new Y(e.id)],b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(f,y,b),{publicKey:k}=he(f,y,g),{publicKey:T}=m?ee(n.wallet,d,je):ee(n.wallet,d,Oe),{publicKey:h}=Bn(d),{publicKey:w}=Bt(f,d),{publicKey:x}=mn(f,y,o,i),B=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(t.mintA.address),new Y(t.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(t.mintA.address),new Y(t.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[B],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=E([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:r?je:Oe,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Xt.closePosition,...u]);return new ft({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new Y(e.programId),a=i?ee(n.wallet,o.nftMint,je).publicKey:ee(n.wallet,o.nftMint,Oe).publicKey,{publicKey:c}=Bt(r,o.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,c,i)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A){let k=E([re("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let x=Buffer.from([...Xt.increaseLiquidity,...w]);return new ft({keys:h,programId:e,data:x})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,l]=[new Y(e.programId),new Y(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Bt(u,n.nftMint),{publicKey:g}=mn(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Je(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:c}){let[u,l]=[new Y(e.programId),new Y(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Bt(u,n.nftMint),{publicKey:g}=mn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Je(u,l).publicKey:void 0)],signers:[],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A){let k=E([re("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:new ga(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},w);let x=Buffer.from([...Xt.increaseLiquidity,...w]);return new ft({keys:h,programId:e,data:x})}static decreaseLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([re("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],w=[{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:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],x=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:A},x);let B=Buffer.from([...Xt.decreaseLiquidity,...x]);return new ft({keys:w,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],d=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=he(l,m,d),{publicKey:y}=he(l,m,p),{publicKey:b}=u?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,c),{publicKey:g}=Bt(l,n.nftMint),{publicKey:A}=mn(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new Y(t.rewardInfos[w].vault),ownerRewardVault:o.rewardAccounts[w],rewardMint:new Y(e.rewardDefaultInfos[w].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,A,f,y,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),k,i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Je(l,m).publicKey:void 0);return T.push(h),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:T,instructionTypes:[X.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g){let A=E([P("amount"),P("otherAmountThreshold"),re("sqrtPriceLimitX64"),Ye("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(x=>({pubkey:x,isSigner:!1,isWritable:!0}))],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:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let w=Buffer.from([...Xt.swap,...h]);return new ft({keys:T,programId:e,data:w})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],[d,p]=[new Y(t.vault.A),new Y(t.vault.B)],[f,y]=[new Y(e.mintA.address),new Y(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new Y(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,r,a,c,!0,Je(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],[d,p]=[new Y(t.vault.A),new Y(t.vault.B)],[f,y]=[new Y(e.mintA.address),new Y(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new Y(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,r,a,c,!1,Je(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=E([P("openTime"),P("endTime"),re("emissionsPerSecondX64")]),f=[{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:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:ne(l),endTime:ne(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...Xt.initReward,...y]);return new ft({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a=Dc(i,r,o.mint).publicKey,c=Pi(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,r,c,new Y(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=E([D("rewardIndex"),re("emissionsPerSecondX64"),P("openTime"),P("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:ne(l),endTime:ne(m)},y);let b=Buffer.from([...Xt.setRewardEmissions,...y]);return new ft({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new Y(t.rewardInfos[d].vault),u=new Y(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Pi(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,r,l,new Y(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,r,a){let c=E([D("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{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:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Xt.collectReward,...l]);return new ft({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new Y(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,r,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[X.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new Y((await c(1))[0]);else{let g=Nr.generate();u.push(g),l=g.publicKey}let m=a?ee(i,r,je).publicKey:ee(i,r,Oe).publicKey,{publicKey:d}=Bt(n,r),p=Mo(e,l).publicKey,f=ee(i,l,Oe).publicKey,y=Bn(l).publicKey,b=Be.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:ee(t,r,a?je:Oe).publicKey,positionNftProgram:a?je:Oe});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[X.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1}],g=E([Ye("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...$c,...A]);return new ft({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ee(o,i,Oe),{publicKey:a}=Bt(n,i),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:da(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1}];return new ft({keys:c,programId:e,data:Buffer.from($c)})}static harvestLockPositionInstruction(e){let[t,n]=[new Y(e.poolKeys.programId),new Y(e.poolKeys.id)],o=$.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=$.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=he(t,n,o),{publicKey:a}=he(t,n,i),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Oe),{publicKey:u}=Bt(t,e.ownerPosition.nftMint),{publicKey:l}=mn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new Y(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new Y(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:da(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new Y(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new Y(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:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:new Y(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new Y(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new ft({keys:p,programId:e.programId,data:Buffer.from(Jc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:T,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],x=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new ft({keys:x,programId:e,data:Buffer.from(Jc)})}};var Vp=E([Pt("mintAuthorityOption"),F("mintAuthority"),P("supply"),D("decimals"),D("isInitialized"),Pt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as oI}from"@solana/web3.js";import{MintLayout as rI,TOKEN_PROGRAM_ID as aI}from"@solana/spl-token";var Or=s=>new ze({mint:s.address,decimals:s.decimals,symbol:s.symbol,name:s.name}),Ti=o=>{var i=o,{amount:s,isRaw:e,name:t}=i,n=Ge(i,["amount","isRaw","name"]);return new Re(new ze({mint:yt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var wt=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Ge(i,["address","programId","decimals"]);return _({chainId:101,address:yt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(_({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(_({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(_({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import el from"bn.js";var Pa=new el(25),Mr=new el(1e4);import{PublicKey as gn,SystemProgram as Dp,SYSVAR_RENT_PUBKEY as xI,TransactionInstruction as Fo}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as qp,TOKEN_PROGRAM_ID as Bi}from"@solana/spl-token";var Aa=E([D("instruction"),P("amountIn"),P("minAmountOut")]),wa=E([D("instruction"),P("maxAmountIn"),P("amountOut")]),hI=E([D("instruction"),D("nonce")]),Wp=E([D("instruction"),D("nonce"),P("startTime")]),Ii=E([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),P("swapBase2QuoteFee"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),P("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),P("lpReserve"),Q(P(),3,"padding")]),TI=E([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),Q(P(),64,"padding")]),ka=E([D("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),ha=E([D("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var tl=E([P("fee")]);var nl=we("Raydium_liquidity_instruction");function ol(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=to}=s,u=Buffer.alloc(ka.span);ka.encode({instruction:3,baseAmountIn:ne(o),quoteAmountIn:ne(i),otherAmountMin:ne(a),fixedSide:r==="base"?Nt:Mu},u);let l=[S({pubkey:Bi,isWritable:!1}),S({pubkey:new gn(e.id)}),S({pubkey:new gn(t.authority),isWritable:!1}),S({pubkey:new gn(t.openOrders),isWritable:!1}),S({pubkey:new gn(t.targetOrders)}),S({pubkey:new gn(e.lpMint.address)}),S({pubkey:new gn(t.vault.A)}),S({pubkey:new gn(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new gn(e.marketId),isWritable:!1}),S({pubkey:n.baseTokenAccount}),S({pubkey:n.quoteTokenAccount}),S({pubkey:n.lpTokenAccount}),S({pubkey:n.owner,isWritable:!1,isSigner:!0}),S({pubkey:new gn(t.marketEventQueue),isWritable:!1})),new Fo({programId:new gn(e.programId),keys:l,data:u})}function Ta(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=to}=s,c=pt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(ha.span);ha.encode({instruction:4,lpAmount:ne(o),baseAmountMin:ne(i),quoteAmountMin:ne(r)},l);let m=[S({pubkey:Bi,isWritable:!1}),S({pubkey:c.id}),S({pubkey:c.authority,isWritable:!1}),S({pubkey:c.openOrders}),S({pubkey:c.targetOrders}),S({pubkey:c.mintLp.address}),S({pubkey:c.vault.A}),S({pubkey:c.vault.B})];return u===5?m.push(S({pubkey:a})):(m.push(S({pubkey:c.id})),m.push(S({pubkey:c.id}))),m.push(S({pubkey:c.marketProgramId,isWritable:!1}),S({pubkey:c.marketId}),S({pubkey:c.marketBaseVault}),S({pubkey:c.marketQuoteVault}),S({pubkey:c.marketAuthority,isWritable:!1}),S({pubkey:n.lpTokenAccount}),S({pubkey:n.baseTokenAccount}),S({pubkey:n.quoteTokenAccount}),S({pubkey:n.owner,isWritable:!1,isSigner:!0}),S({pubkey:c.marketEventQueue}),S({pubkey:c.marketBids}),S({pubkey:c.marketAsks})),new Fo({programId:c.programId,keys:m,data:l})}return new Fo({programId:c.programId,keys:[]})}function Ia({programId:s,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:r,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:T,pcAmount:h,ammConfigId:w,feeDestinationId:x}){let B=E([D("instruction"),D("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:qp,isSigner:!1,isWritable:!1},{pubkey:Dp.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:x,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:A,openTime:k,coinAmount:T,pcAmount:h},I),{instruction:new Fo({keys:K,programId:s,data:I}),instructionType:X.AmmV4CreatePool}}function Up({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=to},i){let r=pt(s),a=Buffer.alloc(Aa.span);Aa.encode({instruction:9,amountIn:ne(t),minAmountOut:ne(n)},a);let c=[S({pubkey:Bi,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.openOrders})];return i===4&&c.push(S({pubkey:r.targetOrders})),c.push(S({pubkey:r.vault.A}),S({pubkey:r.vault.B})),i===5&&c.push(S({pubkey:o})),c.push(S({pubkey:r.marketProgramId,isWritable:!1}),S({pubkey:r.marketId}),S({pubkey:r.marketBids}),S({pubkey:r.marketAsks}),S({pubkey:r.marketEventQueue}),S({pubkey:r.marketBaseVault}),S({pubkey:r.marketQuoteVault}),S({pubkey:r.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Fo({programId:r.programId,keys:c,data:a})}function Gp({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=to},i){let r=pt(s),a=Buffer.alloc(wa.span);wa.encode({instruction:11,maxAmountIn:ne(t),amountOut:ne(n)},a);let c=[S({pubkey:Bi,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.openOrders}),S({pubkey:r.targetOrders}),S({pubkey:r.vault.A}),S({pubkey:r.vault.B})];return i===5&&c.push(S({pubkey:o})),c.push(S({pubkey:r.marketProgramId,isWritable:!1}),S({pubkey:r.marketId}),S({pubkey:r.marketBids}),S({pubkey:r.marketAsks}),S({pubkey:r.marketEventQueue}),S({pubkey:r.marketBaseVault}),S({pubkey:r.marketQuoteVault}),S({pubkey:r.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Fo({programId:r.programId,keys:c,data:a})}function vr(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return Up(q(_({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Gp(q(_({},a),{maxAmountIn:o,amountOut:i}),t);nl.logWithError("invalid params","params",s)}throw nl.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var fo=5e4,Xp=E([P("x"),P("y"),P("price")]),zp=E([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q(Xp,fo,"DataElement")]);function Yp(s,e){return[0,fo-2]}function Hp(s){return[0,fo-2]}function Qp(s){return[0,fo-2]}function jp(s,e,t){let[n,o]=Yp(e,t),i=n,r=o,a=0,c=e*s.multiplier/t;for(;i<=r;){if(a=Math.floor((r+i)/2),a===0||a>=fo-2)return[a,a,!1];let u=s.DataElement[a].x*s.multiplier/s.DataElement[a].y,l=s.DataElement[a-1].x*s.multiplier/s.DataElement[a-1].y,m=s.DataElement[a+1].x*s.multiplier/s.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)r=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ba(s,e,t){let[n,o,i]=jp(s,e,t);if(!i)return 0;if(n===o){let r=s.DataElement[n].x;return e*s.multiplier/r}else{let r=s.DataElement[n].x,a=s.DataElement[n].y,c=s.DataElement[o].x,u=s.DataElement[o].y,l=t*(c*a-r*u),m=r*l,d=(c-r)*(e*a-r*t)*u,p=m+d;return e*s.multiplier*l/p}}function po(s,e,t){return e*s.multiplier/t}function il(s,e,t){return e*t/s.multiplier}function Zp(s,e){let[t,n]=Hp(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>fo-2)return[r,r,!1];let c=s.DataElement[r].x,u=s.DataElement[r-1].x,l=s.DataElement[r+1].x;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<u)i=r-1;else{if(a>u&&a<c)return[r-1,r,!0];if(a>c&&a<l)return[r,r+1,!0];o=r+1}}return[r,r,!1]}function $p(s,e){let[t,n]=Qp(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=fo-2)return[r,r,!1];let c=s.DataElement[r].y,u=s.DataElement[r-1].y,l=s.DataElement[r+1].y;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<l)o=r+1;else{if(a<u&&a>c)return[r-1,r,!0];if(a<c&&a>l)return[r,r+1,!0];i=r-1}}return[r,r,!1]}function rl(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=Zp(s,o);if(!a)return[0,0,!1,a];if(i===r)return[s.DataElement[r].price,s.DataElement[r].y,!1,a];{let c=s.DataElement[i].x,u=s.DataElement[r].x,l=s.DataElement[i].price,m=s.DataElement[r].price,d=s.DataElement[i].y,p=s.DataElement[r].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,y;return n?(f=l+(m-l)*(e-c)/(u-c),y=d-(o-c)*s.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-o)*s.multiplier/l),[f,y,!1,a]}}}function Jp(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=$p(s,o);if(!a)return[0,0,!1,a];if(i===r)return[s.DataElement[r].price,s.DataElement[r].x,!1,a];{let c=s.DataElement[i].x,u=s.DataElement[r].x,l=s.DataElement[i].price,m=s.DataElement[r].price,d=s.DataElement[i].y,p=s.DataElement[r].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,y;return n?(f=l+(m-l)*(d-e)/(d-p),y=c+m*(d-o)/s.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(o-p)/s.multiplier),[f,y,!1,a]}}}function ef(s,e){let t=rl(s,e,0,!1);return t[3]?t[0]:0}function sl(s,e,t,n){let o=Ba(s,e,t),i=po(s,e,o),r=po(s,t,o),a=po(s,n,o),c=!0,[u,l,m,d]=rl(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return il(s,p,o)}}function al(s,e,t,n){let o=Ba(s,e,t),i=po(s,e,o),r=po(s,t,o),a=po(s,n,o),c=!1,[u,l,m,d]=Jp(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return il(s,p,o)}}function tf(s){let e=zp.decode(s);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ul(s,e,t,n){let o=ef(s,po(s,e,Ba(s,e,t)))/s.multiplier;return n?o:1/o}var xi=class{constructor({connection:e,modelDataPubKey:t=to}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=tf(e==null?void 0:e.data))}}};import{PublicKey as rf}from"@solana/web3.js";import nB from"bn.js";import{TOKEN_PROGRAM_ID as sf}from"@solana/spl-token";import{PublicKey as nf}from"@solana/web3.js";var of=we("Raydium_liquidity_serum");function cl({programId:s,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=nf.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw of.logWithError("unable to find a viable program address nonce","params",{programId:s,marketId:e}),new Error("unable to find a viable program address nonce")}function Fr({programId:s}){let{publicKey:e}=fe([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function yo({name:s,programId:e,marketId:t}){let{publicKey:n}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function af({programId:s,marketId:e}){let{publicKey:t}=fe([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function Sa({programId:s}){return fe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function Ka({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=yo({name:"amm_associated_seed",programId:a,marketId:t}),l=yo({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Sa({programId:a}),p=yo({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=yo({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=yo({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=af({programId:a,marketId:t}),g=yo({name:"target_associated_seed",programId:a,marketId:t}),A=yo({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=cl({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:r,lpDecimals:i,version:s,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:rf.default,configId:Fr({programId:a})}}var xa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},_r=s=>{let e={},t=sf.toBase58();return Object.keys(s).map(n=>{let o=s[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:wt({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:wt({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:xa,week:xa,month:xa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Fr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:wt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Ze from"bn.js";import{PublicKey as Si}from"@solana/web3.js";import Ki from"bn.js";import{TOKEN_PROGRAM_ID as pl}from"@solana/spl-token";import{SystemProgram as bo,SYSVAR_RENT_PUBKEY as cf,Transaction as ll,TransactionInstruction as lf}from"@solana/web3.js";import{createInitializeAccountInstruction as ml,TOKEN_PROGRAM_ID as dl}from"@solana/spl-token";function uf(s="accountFlags"){let e=new Ir(s);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ca=E([xe(5),uf("accountFlags"),F("ownAddress"),P("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),F("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),xe(7)]);function mf({programId:s,marketInfo:e}){let t=E([D("version"),Pt("instruction"),P("baseLotSize"),P("quoteLotSize"),Dt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:cf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new lf({keys:n,programId:s,data:o})}async function Er({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new ll,o=await s.getMinimumBalanceForRentExemption(165);n.add(bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:dl}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:dl}),ml(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ml(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(Ca.span),space:Ca.span,programId:t.programId}));let i=new ll;return i.add(bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await s.getMinimumBalanceForRentExemption((r=t.requestQueueSpace)!=null?r:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await s.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await s.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await s.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),mf({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.InitAccount,X.InitAccount]},{transaction:i,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var _o=class extends De{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),A=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),k=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),T=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),h=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),w=$e({fromPublicKey:y,programId:pl,assignSeed:b&&`${b}-baseVault`}),x=$e({fromPublicKey:y,programId:pl,assignSeed:b&&`${b}-quoteVault`}),B=0,K=new Ki(100);function I(){let z=new Ki(0);for(;;)try{return{vaultOwner:Si.createProgramAddressSync([g.publicKey.toBuffer(),z.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:z}}catch{if(z.iaddn(1),z.gt(new Ki(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:L}=I(),N=new Ki(Math.round(10**e.decimals*n)),O=new Ki(Math.round(n*10**t.decimals*o));if(N.eq(Nt))throw Error("lot size is too small");if(O.eq(Nt))throw Error("tick size or lot size is too small");let R=await Er({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:x,vaultOwner:C,requestQueue:A,eventQueue:k,bids:T,asks:h,feeRateBps:B,quoteDustThreshold:K,vaultSignerNonce:L,baseLotSize:N,quoteLotSize:O,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let z of R.slice(1,R.length))v.addInstruction({instructions:z.transaction.instructions,signers:z.signer,instructionTypes:z.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new Si(e.mint),quoteMint:new Si(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new Si(e.mint),quoteMint:new Si(t.mint)}})}};var Ci=class extends De{constructor(t){super(t);this.stableLayout=new xi({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:kn.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let r=new Ze(new M(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Or(t[i?"mintB":"mintA"]),[c,u]=[new Ze(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ze(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ze(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",r.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=Nt;r.isZero()||(d=m==="base"?sr(r.mul(u),c):sr(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=sr(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new at(new Ze(1)).add(o),y=new at(new Ze(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Re(a,d),k=new Re(a,b),T=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:T,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:r,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",r),(i.isZero()||r.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:r.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[i.token,r.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),w=[g,A],x=[k,T],B=[i.raw,r.raw],K=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),x.reverse(),B.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,L]=w,[N,O]=x,[R,v]=B,z=o!=null?o:await this.getAmmPoolKeys(n.id),H=this.createTxBuilder(p),J=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ce}=J,se=Ge(J,["tokenAccount"]);H.addInstruction(se);let Se=await f.handleTokenAccount({side:"in",amount:v,mint:L.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ae}=Se,ge=Ge(Se,["tokenAccount"]);H.addInstruction(ge);let Me=await f.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:pe}=Me,te=Ge(Me,["tokenAccount"]);return H.addInstruction(te),H.addInstruction({instructions:[ol({poolInfo:n,poolKeys:z,userKeys:{baseTokenAccount:ce,quoteTokenAccount:ae,lpTokenAccount:pe,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:z.lookupTableAccount?[z.lookupTableAccount]:[]}),H.addCustomComputeBudget(m),H.addTipInstruction(d),l===0?await H.buildV0():H.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:i,baseAmountMin:r,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(n.lpMint.address)];this.logDebug("lpAmount:",i),this.logDebug("baseAmountMin:",r),this.logDebug("quoteAmountMin:",a),i.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",i.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:x}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:B}=L,K=Ge(L,["tokenAccount"]);h.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:I}=N,C=Ge(N,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Ta({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:B,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),u===0?await h.buildV0():h.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:r,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Yn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:y,feePayer:b}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let g=this.createTxBuilder(b),A={};for(let z of this.scope.account.tokenAccountRawInfos)(A[z.accountInfo.mint.toString()]===void 0||ee(this.scope.ownerPubKey,z.accountInfo.mint,Yn).publicKey.equals(z.pubkey))&&(A[z.accountInfo.mint.toString()]=z.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let T=o.add(a!=null?a:new Ze(0)),h=t.mintA.address===ze.WSOL.mint.toString(),w=t.mintB.address===ze.WSOL.mint.toString(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),x===void 0)throw new Error("base token account not found");let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),K===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=x,A[t.mintB.address]=K,r!==void 0&&!(a!=null&&a.isZero())){let z=jt[r.programId],H=Zt({programId:new tt(r.programId),poolId:new tt(r.id),owner:this.scope.ownerPubKey,version:z}),ce,se=await this.scope.connection.getAccountInfo(H);if(se&&(ce=ui(z).decode(se.data)),z!==6&&!ce){let{instruction:Me,instructionType:ke}=li({id:new tt(r.id),programId:new tt(r.programId),version:z,ledger:H,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Me],instructionTypes:[ke]})}let ae=[];for(let Me of r.rewardInfos){let ke=Me.mint.address===ze.WSOL.mint.toString();if(A[Me.mint.address])ae.push(A[Me.mint.address]);else{let{account:Ct,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Me.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!ke,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Ct||this.logAndCreateError("farm reward account not found:",Me.mint.address),Et&&g.addInstruction(Et),ae.push(Ct)}}let ge=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],pe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ge,lpAccount:k,rewardAccounts:ae},te=jt[r.programId],J=te===6?mi(pe):te===5?di(pe):pi(pe),Se={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[J],instructionTypes:[Se[te]]})}let C=await this.getAmmPoolKeys(t.id),L=Ta({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[x,K]:[K,x],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Be.openPositionFromBaseInstructions(q(_({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},i),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:r,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let A=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),k=u.useSOLBalance&&o.mint.equals(Vr),T=u.useSOLBalance&&i.mint.equals(Vr),h=this.createTxBuilder(g),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(x||{});let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:A,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||B===void 0)throw Error("you don't has some token account");let I=Ka({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:f},{instruction:L,instructionType:N}=Ia(q(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:B,userLpVault:ee(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[L],instructionTypes:[N]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=lr,marketProgram:n=Gu,feeDestinationId:o=zu,tokenProgram:i,baseMintInfo:r,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:T,feePayer:h}){var $n,ko,ho;let w=this.scope.ownerPubKey,x=m.feePayer||(($n=this.scope.owner)==null?void 0:$n.publicKey),B=m.useSOLBalance&&r.mint.equals(Vr),K=m.useSOLBalance&&a.mint.equals(Vr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-market`}),L=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-request`}),N=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-event`}),O=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-bids`}),R=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-asks`}),v=$e({fromPublicKey:w,programId:Yn,assignSeed:I&&`${I}-baseVault`}),z=$e({fromPublicKey:w,programId:Yn,assignSeed:I&&`${I}-quoteVault`}),H=0,ce=new Ze(100);function se(){let Wt=new Ze(0);for(;;)try{return{vaultOwner:tt.createProgramAddressSync([C.publicKey.toBuffer(),Wt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Wt}}catch{if(Wt.iaddn(1),Wt.gt(new Ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:ae,vaultSignerNonce:ge}=se(),pe=new Ze(Math.round(10**r.decimals*b)),te=new Ze(Math.round(b*10**a.decimals*g));if(pe.eq(Nt))throw Error("lot size is too small");if(te.eq(Nt))throw Error("tick size or lot size is too small");let J=await Er({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ae,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:z,requestQueue:L,eventQueue:N,bids:O,asks:R,feeRateBps:H,quoteDustThreshold:ce,vaultSignerNonce:ge,baseLotSize:pe,quoteLotSize:te,lowestFeeMarket:d}}),Se=this.createTxBuilder(h);Se.addInstruction({instructions:J[0].transaction.instructions,signers:J[0].signer});for await(let Wt of J.slice(1,J.length))Se.addInstruction({instructions:Wt.transaction.instructions,signers:Wt.signer,instructionTypes:Wt.instructionTypes});let{account:Me,instructionParams:ke}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:B?{payer:x,amount:c}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:f,checkCreateATAOwner:y,assignSeed:B&&I?`${I}-wsol`:void 0});Se.addInstruction(ke||{});let{account:Ct,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:x,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&I?`${I}-wsol`:void 0});if(Se.addInstruction(Et||{}),Me===void 0)throw Error("you don't has base token account");if(Ct===void 0)throw Error("you don't has quote token account");let et=Ka({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Vt={programId:t,ammId:et.id,ammAuthority:et.authority,ammOpenOrders:et.openOrders,lpMint:et.lpMint,coinMint:et.baseMint,pcMint:et.quoteMint,coinVault:et.baseVault,pcVault:et.quoteVault,withdrawQueue:et.withdrawQueue,ammTargetOrders:et.targetOrders,poolTempLp:et.lpVault,marketProgramId:et.marketProgramId,marketId:et.marketId,ammConfigId:et.configId,feeDestinationId:o},{instruction:rs,instructionType:ss}=Ia(q(_({},Vt),{userWallet:this.scope.ownerPubKey,userCoinVault:Me,userPcVault:Ct,userLpVault:ee(this.scope.ownerPubKey,et.lpMint,i).publicKey,nonce:et.nonce,openTime:l,coinAmount:c,pcAmount:u}));Se.addInstruction({instructions:[rs],instructionTypes:[ss]});let wo=B||K?[((ko=ke==null?void 0:ke.instructions)==null?void 0:ko[0])||((ho=Et==null?void 0:Et.instructions)==null?void 0:ho[0])].filter(Wt=>!!Wt):void 0;return A===0?Se.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:wo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Vt)}):Se.sizeCheckBuild({computeBudgetConfig:k,splitIns:wo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Vt)})}async getCreatePoolFee({programId:t}){let n=Fr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return tl.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:r}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,A=t.version===4,k;if(A)k=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let N=ul(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new M(1e6).div(N*1e6):k=new M(N*1e6).div(1e6)}let T=n,h=new Ze(0),w=new Ze(0);if(!T.isZero())if(A){w=Wn(T.mul(Pa),Mr);let N=T.sub(w),O=f.add(N);h=y.mul(N).div(O)}else{w=T.mul(new Ze(2)).div(new Ze(1e4));let N=T.sub(w);p==="quote"?h=new Ze(sl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):h=new Ze(al(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let x=new Ze(new M(h.toString()).mul(1-r).toFixed(0)),B=h,K=x,I=new M(h.toString()).div(new M(T.sub(w).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new M(h.toString()).div(10**g).div(new M(T.sub(w).toString()).div(10**b)));let C=k.sub(I).div(k).mul(100);return{amountOut:B,minAmountOut:K,currentPrice:k,executionPrice:I,priceImpact:C,fee:w}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:r}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${r*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new M(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ze(0),A=n;if(!A.isZero()){A.gt(y)&&(A=y.sub(new Ze(1)));let K=y.sub(A);g=f.mul(A).div(K).mul(Mr).div(Mr.sub(Pa))}let k=new Ze(new M(g.toString()).mul(1+r).toFixed(0)),T=g,h=k;this.logDebug("amountIn:",new M(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!A.isZero()&&(w=new M(A.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${w.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let x=b.mul(T.toString()),B=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:w,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:r,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){let p=this.createTxBuilder(d),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=u||{},[g,A]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(w||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:k,associatedOnly:f});let{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(B||{}),x===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:x,outputTokenUseSolBalance:T,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[vr({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[I===4?X.AmmV4SwapBaseIn:X.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Ee(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},r=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Ii.decode(m.accountInfo.data);i[String(t[l])]=q(_({},d),{programId:m.accountInfo.owner}),r.push(d.baseVault,d.quoteVault)}let a={},c=await Ee(this.scope.connection,r.map(l=>({pubkey:new tt(l)})),n);for(let l=0;l<r.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+r[l]);a[String(r[l])]=new Ze(df.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=q(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=_r({[t]:n}),i=o[t],r=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:r[0]}}};import{PublicKey as j}from"@solana/web3.js";import xt from"bn.js";import{AccountLayout as fl,createAssociatedTokenAccountIdempotentInstruction as yl,TOKEN_2022_PROGRAM_ID as Hn,TOKEN_PROGRAM_ID as Ri}from"@solana/spl-token";var Li=class extends De{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var x;let{programId:t,owner:n=((x=this.scope.owner)==null?void 0:x.publicKey)||j.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new xt(new j(o.address).toBuffer()).gt(new xt(new j(i.address).toBuffer()))?[i,o,new M(1).div(a)]:[o,i,a],A=le.priceToSqrtPriceX64(g,y.decimals,b.decimals),k=[],T=[];y.programId===Hn.toBase58()&&T.push(pa(t,new j(y.address)).publicKey),b.programId===Hn.toBase58()&&T.push(pa(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((B,K)=>{B&&k.push(T[K])});let w=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:k});return f.addInstruction(w),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(_({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:w.address.mintAVault.toString(),B:w.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:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:b,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.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:[]},burnPercent:0},Fc),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),w=n.useSOLBalance&&e.mintB.address===Z.toString(),[x,B]=r==="MintA"?[a,c]:[c,a],{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),A.addInstruction(I||{});let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(L||{}),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:q(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(O),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:r,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),w=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});x&&(k=x),A.addInstruction(B||{});let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(k===void 0||T===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),L=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(L),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:L.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=c.useSOLBalance&&t.mintA.address===Z.toString(),k=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(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:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:l});w&&(g=w),y.addInstruction(x||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=n!=null?n:await this.getClmmPoolKeys(t.id),K=Be.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:B,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(I=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:I.owner.equals(Hn)});return y.addInstruction(K),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===Z.toString(),A=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k&&(y=k),f.addInstruction(T||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(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:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(w||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=await this.getClmmPoolKeys(t.id),B=Be.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:x,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(Hn)});return f.addInstruction(B),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:B.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=i.useSOLBalance&&t.mintA.address===Z.toString(),g=i.useSOLBalance&&t.mintB.address===Z.toString(),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=T,h&&y.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,x&&y.addInstruction(x);let B=[];for(let O of t.rewardDefaultInfos){let R=i.useSOLBalance&&O.mint.address===Z.toString(),v;if(O.mint.address===t.mintA.address)v=A;else if(O.mint.address===t.mintB.address)v=k;else{let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});v=z,H&&y.addInstruction(H)}B.push(v)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(N=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:N.owner.equals(Hn),C=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:B},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let L=_({},C.address);if(i.closePosition){let O=await Be.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),L=_(_({},L),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=ei,authProgramId:n=mr,poolProgramId:o=eo,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Be.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:f.owner.equals(Hn)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=ei,authProgramId:n=mr,clmmProgram:o=eo,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=i||await this.getClmmPoolKeys(r.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let g=vo.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),k=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});T=w,x&&y.addInstruction(x);let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:u});h=B,K&&y.addInstruction(K);let I={},C=[];for(let ae of f.rewardInfos){let ge=a.useSOLBalance&&ae.mint.address===Z.toString(),pe=I[ae.mint.address];if(!pe){let{account:te,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ae.mint.programId),mint:new j(ae.mint.address),notUseTokenAccount:ge,owner:this.scope.ownerPubKey,skipCloseAccount:!ge,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ge?!1:c});pe=te,J&&y.addInstruction(J)}I[ae.mint.address]=pe,C.push(pe)}let L=Mo(t,r.lockNftMint).publicKey,N=ee(this.scope.ownerPubKey,r.lockNftMint,Ri).publicKey,O=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=he(new j(f.programId),r.poolId,O),{publicKey:z}=he(new j(f.programId),r.poolId,R),{publicKey:H}=mn(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),ce=[];for(let ae=0;ae<f.rewardInfos.length;ae++)ce.push({poolRewardVault:new j(f.rewardInfos[ae].vault),ownerRewardVault:C[ae],rewardMint:new j(f.rewardInfos[ae].mint.address)});let se=await Be.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:N,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:H,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:v,tickArrayUpper:z,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:ce,exTickArrayBitmap:Je(o,r.poolId).publicKey});return y.addInstruction({instructions:[se],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var m;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let c=this.createTxBuilder(a),u=t!=null?t:await this.getClmmPoolKeys(e.id),l=Be.closePositionInstructions({poolInfo:e,poolKeys:u,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(m=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:m.owner.equals(Hn)});return c.addCustomComputeBudget(i),c.addTipInstruction(r),c.addInstruction(l).versionBuild({txVersion:o,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),l=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(n.mint.address),mint:new j(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new xt(new M(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:i});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Be.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new j(n.mint.programId),mint:new j(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ye.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(r),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===Z.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(p.mint.programId),mint:new j(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new xt(new M(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=Be.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new j(p.mint.programId),mint:new j(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:ye.decimalToX64(p.perSecond)}});d=_(_({},d),k.address),m.addInstruction(k)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let l=this.createTxBuilder(u),m=t.useSOLBalance&&n.mint.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new xt(new M(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:m?!1:o,checkCreateATAOwner:i});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Be.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ye.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(r),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===Z.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(p.mint.programId),mint:new j(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new xt(new M(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});b&&m.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),A=Be.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new j(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:ye.decimalToX64(p.perSecond)}});m.addInstruction(A),d=_(_({},d),A.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u}){let l=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());l||this.logAndCreateError("reward mint error","not found reward mint",n);let m=this.createTxBuilder(u),d=t.useSOLBalance&&n.equals(Z),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(l.mint.programId),mint:n,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:o,checkCreateATAOwner:i});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Be.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(r),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l={};for(let m of n){let d=e.rewardDefaultInfos.find(A=>A.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals(Z),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(d.mint.programId),mint:m,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Be.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(r),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=g?Tt.add(new xt(1)):It.sub(new xt(1)):T=le.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:A?!1:l,checkCreateATAOwner:m});h=B,K&&b.addInstruction(K)}let w;if(!w){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=B,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new j(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=n.toString()===e.mintB.address?Tt.add(new xt(1)):It.sub(new xt(1)):T=le.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:A?!1:l,checkCreateATAOwner:m});h=B,K&&b.addInstruction(K)}let w;if(!w){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=B,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Be.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new j(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=ei,lockAuth:d=mr,clmmProgram:p=eo}){var k,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)i?ee(this.scope.ownerPubKey,h.accountInfo.mint,a).publicKey.equals(h.pubkey)&&(f[h.accountInfo.mint.toString()]=h.pubkey):f[h.accountInfo.mint.toString()]=h.pubkey;let y=Object.values(t).flat().map(h=>h.nftMint),b=await Ee(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var w,x;g[h.pubkey.toBase58()]=(x=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?x:null});let A=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let w=h,x=o.useSOLBalance&&w.mintA.address===Z.toString(),B=o.useSOLBalance&&w.mintB.address===Z.toString(),K=f[w.mintA.address];if(!K)if(x){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new j(w.mintA.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});K=O,R&&A.addInstruction(R)}else{let O=new j(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintA.programId)),A.addInstruction({instructions:[yl(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new j(w.mintA.programId))]})}let I=f[w.mintB.address];if(!I)if(B){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new j(w.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:i,checkCreateATAOwner:r});I=O,R&&A.addInstruction(R)}else{let O=new j(w.mintB.address);I=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintB.programId)),A.addInstruction({instructions:[yl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,O,new j(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=I;let C=[];for(let O of w.rewardDefaultInfos){let R=o.useSOLBalance&&O.mint.address===Z.toString(),v=f[O.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:i});v=z,H&&A.addInstruction(H)}f[O.mint.address]=v,C.push(v)}let L=await this.getClmmPoolKeys(w.id),N=[];for(let O=0;O<L.rewardInfos.length;O++)N.push({poolRewardVault:new j(L.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new j(L.rewardInfos[O].mint.address)});for(let O of t[h.id]){let R=(k=n==null?void 0:n[h.id])==null?void 0:k[O.nftMint.toBase58()];if(R){let v=ee(this.scope.ownerPubKey,R.lockNftMint,Ri).publicKey,z=$.getTickArrayStartIndexByTick(O.tickLower,L.config.tickSpacing),H=$.getTickArrayStartIndexByTick(O.tickUpper,L.config.tickSpacing),{publicKey:ce}=he(new j(L.programId),R.poolId,z),{publicKey:se}=he(new j(L.programId),R.poolId,H),{publicKey:ae}=mn(new j(L.programId),R.poolId,O.tickLower,O.tickUpper),ge=Mo(m,R.lockNftMint).publicKey,pe=Be.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:ge,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:v,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:ae,vaultA:new j(L.vault.A),vaultB:new j(L.vault.B),tickArrayLower:ce,tickArrayUpper:se,userVaultA:K,userVaultB:I,mintA:new j(L.mintA.address),mintB:new j(L.mintB.address),rewardAccounts:N,exTickArrayBitmap:Je(p,R.poolId).publicKey});A.addInstruction({instructions:[pe],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let v=Be.decreaseLiquidityInstructions({poolInfo:w,poolKeys:L,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new xt(0),amountMinA:new xt(0),amountMinB:new xt(0),nft2022:(T=g[O.nftMint.toBase58()])==null?void 0:T.equals(Hn)});A.addInstruction(v)}}}return c===0?A.sizeCheckBuildV0({computeBudgetConfig:u}):A.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Pi(e).publicKey);return t?Qc.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=eo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new xt(1))).map(r=>Bt(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=vo.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=ei}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new xt(1))).map(c=>Mo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=jc.decode(c.data);i.push(u)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(c=>c.positionId)),a=[];return r.forEach(c=>{if(!c)return;let u=vo.decode(c.data);a.push(u)}),i.map((c,u)=>({position:a[u],lockInfo:c}))}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 j(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=lo.decode(r.accountInfo.data),c=le.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(_({},a),{currentPrice:c,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await Ee(this.scope.connection,Array.from(n).map(c=>({pubkey:new j(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Yc.decode(c.accountInfo.data))});let r=await Ne.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:wt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ri.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?zn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:wt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ri.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?zn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:q(_({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ne.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await To({connection:this.scope.connection,mints:Array.from(n).map(m=>new j(m))}),{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}]),c=Xc(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(fl.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(fl.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(_({},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:c.config,rewardInfos:i[e].rewardInfos.filter(m=>!m.tokenVault.equals(j.default)).map(m=>({mint:wt({address:m.tokenMint.toBase58(),programId:Ri.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:r}}};import{PublicKey as U}from"@solana/web3.js";import{AccountLayout as xf,NATIVE_MINT as Vo,TOKEN_PROGRAM_ID as St,createAssociatedTokenAccountIdempotentInstruction as Wo}from"@solana/spl-token";import bl from"bn.js";import Wr from"bn.js";function Ra(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function pf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Ra(s,e).gt(Ni)&&(t=t.add(new Wr(1))),[t,e]}var Ni=new Wr(0),Oi=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),i=t.add(e);return o.div(i)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),i=n.sub(e),[r]=pf(o,i);return r}static lpTokensToTradingTokens(e,t,n,o,i){let r=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:r,tokenAmount1:a};if(i===1)return Ra(e.mul(n),t).gt(Ni)&&r.gt(Ni)&&(r=r.add(new Wr(1))),Ra(e.mul(o),t).gt(Ni)&&a.gt(Ni)&&(a=a.add(new Wr(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import ff from"bn.js";var vt=class{static tradingFee(e,t){return jo(e,t,Ot)}static protocolFee(e,t){return ar(e,t,Ot)}static fundFee(e,t){return ar(e,t,Ot)}static creatorFee(e,t){return jo(e,t,Ot)}static splitCreatorFee(e,t,n){return ar(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Ot),o=Ot.sub(t);return n.add(o).sub(new ff(1)).div(o)}};var Mi=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,i,r,a,c){let u=new bl(0),l=vt.tradingFee(e,o),m;c?(u=vt.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=vt.protocolFee(l,r),p=vt.protocolFee(l,a),f=Oi.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=vt.creatorFee(f,i),y=f.sub(u)),{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:l,protocolFee:d,fundFee:p,creatorFee:u}}static swapBaseOutput(e,t,n,o,i,r,a,c){let u,l=new bl(0),m;if(c)m=e;else{let b=vt.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Oi.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=vt.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=vt.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=vt.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=vt.protocolFee(u,r),y=vt.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Qe from"bn.js";import{PublicKey as _i,TransactionInstruction as Cn,Keypair as Tf,SystemProgram as Oa}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Dr,TOKEN_2022_PROGRAM_ID as Ma,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";var yf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),lS=Buffer.from("amm_config","utf8"),bf=Buffer.from("pool","utf8"),gf=Buffer.from("pool_lp_mint","utf8"),Pf=Buffer.from("pool_vault","utf8"),Af=Buffer.from("observation","utf8"),wf=Buffer.from("permission","utf8");function Eo(s){return fe([yf],s)}function La(s,e,t,n){return fe([bf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function kf(s,e){return fe([gf,e.toBuffer()],s)}function gl(s,e,t){return fe([Pf,e.toBuffer(),t.toBuffer()],s)}function vi(s,e){return fe([Af,e.toBuffer()],s)}function Na({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=Eo(e).publicKey,r=s||La(e,t,n,o).publicKey,a=kf(e,r).publicKey,c=gl(e,r,n).publicKey,u=gl(e,r,o).publicKey,l=vi(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var hf=Buffer.from("locked_liquidity","utf8");function Fi(s,e){return fe([hf,e.toBuffer()],s)}function Pl(s,e){return fe([wf,e.toBuffer()],s)}var If=we("Raydium_cpmm"),Rn={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])};function Al(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=La(s,t,i,r).publicKey,w=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(h),isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:ks,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1}],x=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:k},x),new Cn({keys:w,programId:s,data:Buffer.from([...Rn.initialize,...x])})}function wl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=E([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Ma,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return If.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Cn({keys:b,programId:s,data:Buffer.from([...Rn.deposit,...g])})}function kl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=E([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Ma,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Cn({keys:b,programId:s,data:Buffer.from([...Rn.withdraw,...g])})}function qr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=E([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},A),new Cn({keys:g,programId:s,data:Buffer.from([...Rn.swapBaseInput,...A])})}function hl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=E([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},A),new Cn({keys:g,programId:s,data:Buffer.from([...Rn.swapBaseOutput,...A])})}async function Tl(s){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=s,r=[],[a,c]=[new _i(t.id),new _i(t.lpMint.address)],u;if(i)u=new _i((await i(1))[0]);else{let g=Tf.generate();r.push(g),u=g.publicKey}let{publicKey:l}=ee(o,u,Kn),{publicKey:m}=Bn(u),{publicKey:d}=Fi(s.lockProgram,u),{publicKey:p}=ee(e.wallet,c,Kn),{publicKey:f}=ee(s.lockAuthProgram,c,Kn),y=Bf({programId:s.lockProgram,auth:s.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new _i(n.vault.A),poolVaultB:new _i(n.vault.B),metadataAccount:m,lpAmount:s.lpAmount,withMetadata:(b=s.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:r,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function Bf({programId:s,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:i,nftAccount:r,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Oa.programId,isSigner:!1,isWritable:!1},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1}],A=E([P("lpAmount"),Ye("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let T=Buffer.from([...Rn.lockCpLiquidity,...k]);return new Cn({keys:g,programId:s,data:T})}function va({programId:s,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:i,mintLp:r,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:no,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Yu,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Ma,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1}],A=E([P("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let T=Buffer.from([...Rn.collectCpFee,...k]);return new Cn({keys:g,programId:s,data:T})}function Fa(s,e,t,n,o,i,r,a,c,u,l,m,d){let p=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:Oa.programId,isSigner:!1,isWritable:!1}];return new Cn({keys:p,programId:s,data:Rn.collectCreatorFee})}function Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w){let x=E([P("amountA"),P("amountB"),P("openTime"),D("feeOn")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:A,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:Oa.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(x.span);return x.encode({amountA:k,amountB:T,openTime:h,feeOn:w},K),new Cn({keys:B,programId:s,data:Buffer.from([...Rn.initializeWithPermission,...K])})}var Bl=E([xe(8),D("bump"),Ye("disableCreatePool"),Dt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),F("protocolOwner"),F("fundOwner"),P("creatorFeeRate"),Q(P(),15)]),Ur=E([xe(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),P("epoch"),D("feeOn"),Ye("enableCreatorFee"),Q(D(),6),P("creatorFeesMintA"),P("creatorFeesMintB"),Q(P(),28)]),TS=E([xe(8),F("configId"),Q(P(),30)]);var Ei=class extends De{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ee(this.scope.connection,e.map(m=>({pubkey:new U(m)}))),o={},i=new Set,r=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Ur.decode(d.accountInfo.data);o[String(e[m])]=q(_({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),r.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ee(this.scope.connection,m.map(p=>({pubkey:new U(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Bl.decode(f.data)}}let c={},u=await Ee(this.scope.connection,r.map(m=>({pubkey:new U(m)})));for(let m=0;m<r.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+r[m]);c[String(r[m])]=new Qe(xf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA).sub(d.creatorFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB).sub(d.creatorFeesMintB);l[m]=q(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[r,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return q(_({},n),{[o]:q(_({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:Eo(i.programId).publicKey,mintA:wt({address:r,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[r])!=null&&c.feeConfig?zn((u=t[r])==null?void 0:u.feeConfig):void 0}}),mintB:wt({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?zn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await To({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=wt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?zn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=wt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?zn(n[t.mintB.toBase58()].feeConfig):void 0}}),r=wt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:St.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:r,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Eo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:vi(t.programId,new U(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=Ge(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,z,H;let b=i.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new Qe(new U(p.mintA.address).toBuffer()).lte(new Qe(new U(p.mintB.address).toBuffer())),[A,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=i.useSOLBalance&&A.address===Vo.toBase58(),x=i.useSOLBalance&&k.address===Vo.toBase58(),[B,K]=[new U(A.address),new U(k.address)],I=this.createTxBuilder(d),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:B,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:T}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:r,checkCreateATAOwner:a});I.addInstruction(L||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new U(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:b,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(I.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let R=Na({poolId:e,programId:t,configId:new U(u.id),mintA:B,mintB:K});return I.addInstruction({instructions:[Al(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,B,K,R.lpMint,C,N,ee(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((z=A.programId)!=null?z:St),new U((H=k.programId)!=null?H:St),R.observationId,T,h,o)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(_({},R),{mintA:A,mintB:k,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:r,computeResult:a,computeBudgetConfig:c,txTipConfig:u,config:l,txVersion:m,feePayer:d}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(_({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new at(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=k.amount,h=t.mintA.address===Vo.toString(),w=t.mintB.address===Vo.toString(),x=this.createTxBuilder(d),[B,K]=[new U(t.mintA.address),new U(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(i?o:T).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(C||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(N||{}),!I&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=ce,v=Ge(ce,["tokenAccount"]);x.addInstruction(v);let z=n!=null?n:await this.getCpmmPoolKeys(t.id),H=new at(new Qe(1)).sub(r);return x.addInstruction({instructions:[wl(new U(t.programId),this.scope.ownerPubKey,new U(z.authority),new U(t.id),R,I,L,new U(z.vault.A),new U(z.vault.B),B,K,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:H.mul(g).quotient,i?A.amount:T,i?T:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:z.lookupTableAccount?[z.lookupTableAccount]:[]}),x.addCustomComputeBudget(c),x.addTipInstruction(u),x.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,z;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u,closeWsol:l=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let m=new at(new Qe(1)).sub(i),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(o.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(o.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Le(p,t.mintA.extensions.feeConfig,y,!1),Le(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],w=T.equals(Z),x=h.equals(Z),B,K,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});B=I,C&&k.addInstruction(C);let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(x&&l),associatedOnly:!x,checkCreateATAOwner:!1});K=L,N&&k.addInstruction(N),(!B||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let O=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[kl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),O,B,K,new U(R.vault.A),new U(R.vault.B),T,h,new U(t.lpMint.address),o,p.sub((v=b.fee)!=null?v:new Qe(0)),f.sub((z=g.fee)!=null?z:new Qe(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),k.addCustomComputeBudget(r),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,L,N,O,R,v;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:r,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,k]=[new U(t.mintA.address),new U(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new Qe((1+c)*1e4)).div(new Qe(1e4)):a.outputAmount=a.outputAmount.mul(new Qe((1-c)*1e4)).div(new Qe(1e4));let T=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:St),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});x&&g.addInstruction(x);let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new U((L=t.mintB.programId)!=null?L:St),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!w||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:w,mintBTokenAcc:B,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?hl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?w:B,o?B:w,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:St),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:St),o?A:k,o?k:A,vi(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):qr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?w:B,o?B:w,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((N=t[o?"mintA":"mintB"].programId)!=null?N:St),new U((O=t[o?"mintB":"mintA"].programId)!=null?O:St),o?A:k,o?k:A,vi(new U(t.programId),new U(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?X.CpmmSwapBaseOut:X.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:i,txVersion:r,feePayer:a,feeNftOwner:c}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let u=this.createTxBuilder(a),l=(d=e.poolKeys)!=null?d:await this.getCpmmPoolKeys(t.id),m=await Tl({poolInfo:t,poolKeys:l,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:c!=null?c:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:dr,lockAuthProgram:(y=e.authProgram)!=null?y:pr,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return u.addInstruction(m),u.addCustomComputeBudget(o),u.addTipInstruction(i),u.versionBuild({txVersion:r,extInfo:m.address})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=dr,authProgram:r=pr,cpmmProgram:a,computeBudgetConfig:c,txTipConfig:u,txVersion:l,closeWsol:m=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let d=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(d),[f,y]=[new U(t.mintA.address),new U(t.mintB.address)],b=f.equals(Z),g=y.equals(Z),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});A=T,h&&p.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,x&&p.addInstruction(x),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let B=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,o,St),{publicKey:I}=Fi(i,o),{publicKey:C}=ee(r,new U(t.lpMint.address),St);return p.addInstruction({instructions:[va({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:K,lockPda:I,poolId:new U(t.id),mintLp:new U(B.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new U(B.vault.A),poolVaultB:new U(B.vault.B),mintA:f,mintB:y,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[X.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){var d;let{lockInfo:t,programId:n=dr,authProgram:o=pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,A]=[new U(f.mintA.address),new U(f.mintB.address)],k=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],w=m[f.mintB.address];if(!h)if(k){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new U(f.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});h=C,L&&l.addInstruction(L),m[f.mintA.address]=C}else{let C=new U(f.mintA.address);h=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintA.programId)),l.addInstruction({instructions:[Wo(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!w)if(T){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new U(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});w=C,L&&l.addInstruction(L),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);w=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Wo(this.scope.ownerPubKey,w,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=w}(!h||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:w});let x=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:B}=ee(u,b,St),{publicKey:K}=Fi(n,b),{publicKey:I}=ee(o,new U(f.lpMint.address),St);l.addInstruction({instructions:[va({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:b,nftAccount:B,lockPda:K,poolId:new U(f.id),mintLp:new U(x.mintLp.address),userVaultA:h,userVaultB:w,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.vault.B),mintA:g,mintB:A,lockLpVault:I,lpFeeAmount:y,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:r}):l.sizeCheckBuild({computeBudgetConfig:r})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=Ge(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var z,H,ce;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((z=this.scope.owner)==null?void 0:z.publicKey),A=new Qe(new U(f.mintA.address).toBuffer()).lte(new Qe(new U(f.mintB.address).toBuffer())),[k,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,w]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=i.useSOLBalance&&k.address===Vo.toBase58(),B=i.useSOLBalance&&T.address===Vo.toBase58(),[K,I]=[new U(k.address),new U(T.address)],C=this.createTxBuilder(d),{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:w}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),L===void 0||O===void 0)throw Error("you don't has some token account");let v=Na({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[Il(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,L,O,ee(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((H=k.programId)!=null?H:St),new U((ce=T.programId)!=null?ce:St),v.observationId,Pl(t,this.scope.ownerPubKey).publicKey,h,w,o,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(_({},v),{mintA:k,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=no,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=a||this.scope.ownerPubKey,u=this.createTxBuilder(c),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[m,d,p,f]=[new U(e.mintA.address),new U(e.mintB.address),new U(e.mintA.programId),new U(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(m,p),b=this.scope.account.getAssociatedTokenAccount(d,f);return u.addInstruction({instructions:[Wo(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Wo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Fa(n,this.scope.ownerPubKey,new U(l.authority),new U(l.id),new U(l.config.id),new U(l.vault.A),new U(l.vault.B),m,d,y,b,p,f)],instructionTypes:[]}),u.addCustomComputeBudget(i),u.addTipInstruction(r),u.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,programId:t=no,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=i||this.scope.ownerPubKey,a=this.createTxBuilder(r),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(A=>A.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new U(l.mintA.address),new U(l.mintB.address),new U(l.mintA.programId),new U(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[Wo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[Wo(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Fa(t,this.scope.ownerPubKey,new U(m.authority),new U(m.id),new U(m.config.id),new U(m.vault.A),new U(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,r=e.feeOn===0||e.feeOn===2,a=i?Mi.swapBaseInput(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,r):Mi.swapBaseOutput(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,r),c=new M(a.outputAmount.toString()).div(a.inputAmount.toString()),u=a.outputAmount.mul(new Qe((1-o)*1e4)).div(new Qe(1e4));return{allTrade:a.inputAmount.eq(t),amountIn:t,amountOut:a.outputAmount,minAmountOut:u,executionPrice:c,fee:a.tradeFee,priceImpact:e.poolPrice.sub(c).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var T,h,w,x,B,K,I,C,L;let c=1-Number(i.toSignificant())/100,u=new Qe(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Le(u,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),m=u.sub((T=l.fee)!=null?T:new Qe(0)),d=new Qe(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(w=(h=l.fee)==null?void 0:h.toString())!=null?w:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:Nt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Sf(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Le(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new at(new Qe(1)).add(i),g=new at(new Qe(1)).sub(i),A=Le(b.mul(y.amount.sub((x=y.fee)!=null?x:new Qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),k=Le(g.mul(y.amount.sub((B=y.fee)!=null?B:new Qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(I=(K=y.fee)==null?void 0:K.toString())!=null?I:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(L=(C=A.fee)==null?void 0:C.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}};function Sf(s,e,t,n){let o=s.mul(e).div(n);!o.isZero()&&!s.mul(e).mod(n).isZero()&&(o=o.add(new Qe(1)));let i=s.mul(t).div(n);return!i.isZero()&&!s.mul(t).mod(n).isZero()&&(i=i.add(new Qe(1))),{amountA:o,amountB:i}}import{PublicKey as ve,SystemProgram as Xf}from"@solana/web3.js";import{createTransferInstruction as Wl,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as Uo,createAssociatedTokenAccountIdempotentInstruction as Ha,createSyncNativeInstruction as zf}from"@solana/spl-token";import nt from"bn.js";var xl={[Ss.toBase58()]:3},Sl={3:Ss};var _a=E([xe(5),xe(8),F("ownAddress"),P("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),F("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),xe(7)]),Kl={3:_a};import{PublicKey as Cl}from"@solana/web3.js";var Gr=we("Serum"),Xr=class{static getProgramId(e){let t=Sl[e];return t||Gr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=xl[t];return n||Gr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Kl[e];return t||Gr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Cl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Gr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Cl.default,nonce:o}}};import{PublicKey as de,SystemProgram as Kf,TransactionInstruction as Cf}from"@solana/web3.js";import go from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Rf,TOKEN_2022_PROGRAM_ID as Lf,TOKEN_PROGRAM_ID as Nf}from"@solana/spl-token";function Of(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var w;let y=[],b=[S({pubkey:Nf,isWritable:!1}),S({pubkey:Lf,isWritable:!1}),S({pubkey:Rf,isWritable:!1}),S({pubkey:Kf.programId,isWritable:!1}),S({pubkey:e,isSigner:!0})];b.push(S({pubkey:t})),b.push(S({pubkey:o}));let g=[c,u],A=[l,m],k=[i,r,a];for(let x=0;x<g.length;x++){let B=g[x],K=k[x]===B.mintA.address;if(b.push(S({pubkey:new de(B.programId),isWritable:!1})),x===g.length-1?b.push(S({pubkey:o})):b.push(S({pubkey:n})),b.push(S({pubkey:new de(k[x])})),b.push(S({pubkey:new de(k[x+1])})),B.version===6){let I=A[x];b.push(S({pubkey:new de(I.config.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new de(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new de(B.observationId)})),b.push(S({pubkey:Vn})),b.push(S({pubkey:Je(new de(B.programId),new de(B.id)).publicKey})),y.push(Mf(B.sqrtPriceX64.toString(),K));for(let C of(w=f[x])!=null?w:[])b.push(S({pubkey:new de(C)}))}else if(B.version===5){let I=A[x];b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.authority),isWritable:!1})),b.push(S({pubkey:new de(I.marketProgramId)})),b.push(S({pubkey:new de(I.marketAuthority)})),b.push(S({pubkey:Xu,isWritable:!1})),b.push(S({pubkey:new de(I.openOrders)})),b.push(S({pubkey:new de(I.vault.A)})),b.push(S({pubkey:new de(I.vault.B)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.marketId)})),b.push(S({pubkey:new de(I.marketBids)})),b.push(S({pubkey:new de(I.marketAsks)})),b.push(S({pubkey:new de(I.marketEventQueue)})),b.push(S({pubkey:new de(I.marketBaseVault)})),b.push(S({pubkey:new de(I.marketQuoteVault)}))}else if(B.version===4){let I=A[x],C=B.status!==1;b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.authority),isWritable:!1})),b.push(S({pubkey:new de(C?I.id:I.marketProgramId)})),b.push(S({pubkey:new de(C?I.id:I.marketAuthority)})),b.push(S({pubkey:new de(C?I.id:I.openOrders)})),b.push(S({pubkey:new de(I.vault.A)})),b.push(S({pubkey:new de(I.vault.B)})),b.push(S({pubkey:new de(C?I.id:I.marketId)})),b.push(S({pubkey:new de(C?I.id:I.marketBids)})),b.push(S({pubkey:new de(C?I.id:I.marketAsks)})),b.push(S({pubkey:new de(C?I.id:I.marketEventQueue)})),b.push(S({pubkey:new de(C?I.id:I.marketBaseVault)})),b.push(S({pubkey:new de(C?I.id:I.marketQuoteVault)}))}else if(B.version===7){let I=A[x];b.push(S({pubkey:new de(I.authority)})),b.push(S({pubkey:new de(I.config.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new de(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new de(B.observationId)}))}else throw Error("pool type error")}let T=E([D("insId"),P("amountIn"),P("amountOut"),Q(re(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new Cf({keys:b,programId:s,data:h})}function Mf(s,e){if(s)if(e){let t=new go(s).div(new go(25));return t.gt(Kr)?t:Kr}else{let t=new go(s).mul(new go(25));return t.lt(Cr)?t:Cr}else return e?Kr:Cr}function Rl({routeProgram:s,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=pt(m),p=t.equals(d.mintA.address)?Tt.add(Ut):It.sub(Ut);return Be.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new go(0)),sqrtPriceLimitX64:p,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[qr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new de(m[d?"mintA":"mintB"].address),new de(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[vr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new go(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Of(s,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new go(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}import{ASSOCIATED_TOKEN_PROGRAM_ID as zr,TOKEN_2022_PROGRAM_ID as qf,TOKEN_PROGRAM_ID as qa}from"@solana/spl-token";import{SystemProgram as en,TransactionInstruction as Yt}from"@solana/web3.js";import qo from"bn.js";var Qn=E([P(),P("epoch"),D("curveType"),Dt("index"),P("migrateFee"),P("tradeFeeRate"),P("maxShareFeeRate"),P("minSupplyA"),P("maxLockRate"),P("minSellRateA"),P("minMigrateRateA"),P("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),Q(P(),16)]),vf=E([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),dn=E([P(),P("epoch"),D("bump"),D("status"),D("mintDecimalsA"),D("mintDecimalsB"),D("migrateType"),P("supply"),P("totalSellA"),P("virtualA"),P("virtualB"),P("realA"),P("realB"),P("totalFundRaisingB"),P("protocolFee"),P("platformFee"),P("migrateFee"),vf.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),D("mintProgramFlag"),D("cpmmCreatorFeeOn"),Q(D(),62)]),ZK=E([P(),P("epoch"),F("poolId"),F("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),Q(P(),8)]),Ll=E([D("migrateType"),D("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Ff=E([P("epoch"),D("index"),F("configId"),Ll.replicate("bondingCurveParam"),Q(P(),50)]),Ln=E([P(),P("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Q(D(),64,"name"),Q(D(),256,"web"),Q(D(),256,"img"),F("cpConfigId"),P("creatorFeeRate"),F("transferFeeExtensionAuth"),Q(D(),180),mc(Ff,"platformCurve")]);var _f=Buffer.from("vault_auth_seed","utf8"),nC=Buffer.from("global_config","utf8"),Ef=Buffer.from("pool_vesting","utf8"),Vf=Buffer.from("platform_config","utf8"),Wf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Df=Buffer.from("creator_fee_vault_auth_seed","utf8");function zt(s){return fe([_f],s)}function Do(s,e,t){return fe([ca,e.toBuffer(),t.toBuffer()],s)}function Ea(s,e,t){return fe([la,e.toBuffer(),t.toBuffer()],s)}function Po(s){return fe([Buffer.from("__event_authority","utf8")],s)}function Va(s,e){return fe([Vf,e.toBuffer()],s)}function Vi(s,e,t){return fe([Ef,e.toBuffer(),t.toBuffer()],s)}function Pn(s,e,t){return fe([e.toBuffer(),t.toBuffer()],s)}function Wa(s){return fe([Wf],s)}function An(s,e,t){return fe([e.toBuffer(),t.toBuffer()],s)}function Da(s){return fe([Df],s)}var Ht={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])};function Nl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=E([D("decimals"),Mt("name"),Mt("symbol"),Mt("uri")]),w=E([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),D("cpmmCreatorFeeOn")]),x=E([D("index"),P("supply"),P("totalFundRaisingB"),D("migrateType")]),B=E([D("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:qa,isSigner:!1,isWritable:!1},{pubkey:qa,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),L=Buffer.alloc(b.type==="ConstantCurve"?B.span:x.span);return h.encode({decimals:d,name:p,symbol:f,uri:y},I),b.type==="ConstantCurve"?B.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?x.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&x.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),w.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:T},C),new Yt({keys:K,programId:s,data:Buffer.from([...Ht.initializeV2,...I,...L,...C])})}function Ol(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=E([D("decimals"),Mt("name"),Mt("symbol"),Mt("uri")]),w=E([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),D("cpmmCreatorFeeOn"),D("transferFeeExtensionParamsOption"),E([Dt("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),x=E([D("index"),P("supply"),P("totalFundRaisingB"),D("migrateType")]),B=E([D("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:qf,isSigner:!1,isWritable:!1},{pubkey:qa,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),L=Buffer.alloc(y.type==="ConstantCurve"?B.span:x.span);return h.encode({decimals:m,name:d,symbol:p,uri:f},I),y.type==="ConstantCurve"?B.encode(q(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?x.encode(q(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&x.encode(q(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),w.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:k,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new qo(0)}},C),new Yt({keys:K,programId:s,data:Buffer.from([...Ht.initializeWithToken2022,...I,...L,...C])})}function Yr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountB"),P("minAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.buyExactIn,...w])})}function Ml(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountA"),P("maxAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.buyExactOut,...w])})}function Hr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountA"),P("minAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.sellExactIn,...w])})}function vl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountB"),P("maxAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.sellExactOut,...w])})}function Ua(s,e,t,n,o,i,r,a,c){let u=E([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Yt({keys:l,programId:s,data:Buffer.from([...Ht.claimVestedToken,...m])})}function Ga(s,e,t,n,o,i){let r=E([P("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:en.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Yt({keys:a,programId:s,data:Buffer.from([...Ht.createVestingAccount,...c])})}function Xa(s,e,t,n,o,i,r,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:en.programId,isSigner:!1,isWritable:!0},{pubkey:zr,isSigner:!1,isWritable:!0}];return new Yt({keys:u,programId:s,data:Ht.claimPlatformFee})}function Fl(s,e,t,n,o,i,r,a,c,u,l,m,d){let p=E([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Mt("name"),Mt("web"),Mt("img"),P("creatorFeeRate")]),f=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Yt({keys:f,programId:s,data:Buffer.from([...Ht.createPlatformConfig,...y])})}function _l(s,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],i;if(n.type==="updateClaimFeeWallet"){let r=E([D("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=E([D("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=E([D("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);i=Buffer.alloc(r.span),r.encode(_({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=E([D("index"),P("value")]);i=Buffer.alloc(r.span),r.encode({index:3,value:n.value},i)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let r=E([D("index"),Mt("value")]);i=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?r.encode({index:4,value:n.value},i):n.type==="updateWeb"?r.encode({index:5,value:n.value},i):n.type==="updateImg"&&r.encode({index:6,value:n.value},i)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let r=E([D("index")]);i=Buffer.alloc(r.span),r.encode({index:7},i)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let r=E([D("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Mt("name"),Mt("web"),Mt("img"),F("transferFeeExtensionAuth"),P("creatorFeeRate")]);i=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),r.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},i)}else throw Error("updateInfo params type error");return new Yt({keys:o,programId:s,data:Buffer.from([...Ht.updatePlaformConfig,...i])})}function za(s,e,t,n,o,i,r,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1}];return new Yt({keys:c,programId:s,data:Ht.claimPlatformFeeFromVault})}function Ya(s,e,t,n,o,i,r){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1}];return new Yt({keys:a,programId:s,data:Ht.claimCreatorFee})}var fC=new qo("18446744073709551615");import Qr from"bn.js";var jn=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var jr=class extends jn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB.add(i)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new Qr(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new Qr(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(r),u=a.mul(n).div(r).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new Qr(0))||m.lt(new Qr(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return oo(o,i)}};import tn from"bn.js";import Zr from"bn.js";var $r=class extends jn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new Zr(0)))throw Error("invalid input 1");let a=new Zr(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new Zr(0))||t.lt(new Zr(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return oo(o,n)}};import Ft from"bn.js";import El from"bn.js";var Wi=class{static _multipler(e){return new M(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new M(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 El(o.mul(this._Q64).toFixed(0))}};Wi._Q64=new M(new El(1).shln(64).toString());var Jr=class extends jn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualA.mul(e.realA).toString()).div(Wi._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new Ft(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Ft(3)).sub(i),u=t.mul(new Ft(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new Ft(2)).mul(it).div(l);if(!m.gt(new Ft(0)))throw Error("a need gt 0");if(!yi.gt(m))throw Error("a need lt u64 max");if(m.lt(new Ft(0))||u.lt(new Ft(0)))throw Error("invalid input 0");return{a:m,b:new Ft(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Ft(2).mul(n).mul(it).div(e.virtualA);return new Ft(new M(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return oo(e.virtualA.mul(o),new Ft(2).mul(it)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=oo(e.virtualA.mul(o),new Ft(2).mul(it));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Ft(2).mul(n).mul(it).div(e.virtualA),i=new Ft(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Kt=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let l=this.getCurve(e),m=l.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),d=l.getPoolInitPriceByInit(q(_({},m),{decimalA:c,decimalB:u})),p=o.div(new tn(t-1)),f=new tn(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,k=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(k),w=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(w.amountA.amount),k=k.add(w.amountB);let x=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:c,decimalB:u,curveType:e});y.push({price:x,totalSellSupply:new M(A.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:i}){return this.getCurve(i).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(Ot).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new tn(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(Ot);if(n.lt(u))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(o),m=e.mul(r.minMigrateRateA).div(Ot);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new tn(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new tn(10).pow(new tn(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new tn(100);if(p.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(i),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,A;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),A=g.sub(T)}else b=f,g=t,A=m;let k=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Ks(b,c,u),amountB:g,splitFee:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=Cs(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(i).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),A=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:A}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(i),m=Ks(t,c,u),d=m.fee?m.amount.sub(m.fee):m.amount,p=l.sellExactIn({poolInfo:e,amount:d}),f=this.calculateFee({amount:p,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Kt.getCurve(i).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Cs(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new tn(0):e.mul(n).div(r),c=r.isZero()?new tn(0):e.mul(o).div(r),u=r.isZero()?new tn(0):e.mul(i).div(r),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return jo(e,t,Ot)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Ot),o=Ot.sub(t);return n.add(o).sub(new tn(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new tn(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return jr;case 1:return $r;case 2:return Jr}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as Ao,TOKEN_PROGRAM_ID as Ve,createAssociatedTokenAccountIdempotentInstruction as _t,createSyncNativeInstruction as Uf,getTransferFeeConfig as es,unpackMint as ts}from"@solana/spl-token";import ue from"bn.js";import{PublicKey as Vl,SystemProgram as Gf}from"@solana/web3.js";var ns={initPriceX64:new ue("515752397214619"),supply:new ue(1e15),totalSellA:new ue(7931e11),totalFundRaisingB:new ue(85e9),totalFundRaisingBUSD:new ue(125e8),totalLockedAmount:new ue("0"),cliffPeriod:new ue("0"),unlockPeriod:new ue("0"),decimals:6,virtualA:new ue("1073471847374405"),virtualB:new ue("30050573465"),realA:new ue(0),realB:new ue(0),protocolFee:new ue(0),platformId:new Vl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ue(0),cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)}},Zn=new ue(1e4);var Di=class extends De{constructor(e){super(e)}async createLaunchpad(L){var N=L,{programId:e=ut,authProgramId:t,platformId:n=ns.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:A,minMintAAmount:k,slippage:T,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:x,token2022:B,transferFeeExtensionParams:K,creatorFeeOn:I=0}=N,C=Ge(N,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn"]);var Wt,zi,Ja,eu,tu,nu,ou,iu,ru,su,au;let O=this.createTxBuilder(g);t=t!=null?t:zt(e).publicKey,B=!!K,B&&(l="cpmm");let R=d;if(!R&&m){let Qt=await this.scope.connection.getAccountInfo(m);Qt&&(R=Qn.decode(Qt.data))}R||this.logAndCreateError("config not found");let v=R.mintB,z=R.curveType,{publicKey:H}=Do(e,o,v),{publicKey:ce}=Ea(e,H,o),{publicKey:se}=Ea(e,H,v),{publicKey:ae}=Bn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${v.toBase58()}, decimals A:${i}/B:${r}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let pe=(await this.scope.api.fetchLaunchConfigs()).find(Qt=>Qt.key.pubKey===m.toBase58()),te=(Wt=C==null?void 0:C.supply)!=null?Wt:new ue(pe.defaultParams.supplyInit),J=(zi=C==null?void 0:C.totalSellA)!=null?zi:new ue(pe.defaultParams.totalSellA),Se=(Ja=C==null?void 0:C.totalFundRaisingB)!=null?Ja:new ue(pe.defaultParams.totalFundRaisingB),Me=(eu=C==null?void 0:C.totalLockedAmount)!=null?eu:new ue(0),ke=p;if(!p){let Qt=await this.scope.connection.getAccountInfo(n);Qt||this.logAndCreateError("platform id not found:",n.toString()),ke=Ln.decode(Qt.data).feeRate}let Et=Kt.getCurve(R.curveType).getInitParam({supply:te,totalFundRaising:Se,totalSell:J,totalLockedAmount:Me,migrateFee:R.migrateFee}),et;try{et=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let Vt={epoch:new ue(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(tu=et==null?void 0:et.decimals)!=null?tu:r,supply:te,totalSellA:J,mintA:new Vl(o),mintB:v,virtualA:Et.a,virtualB:Et.b,realA:ns.realA,realB:ns.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:ns.protocolFee,platformFee:ke,platformId:n,configId:m,vaultA:ce,vaultB:se,creator:this.scope.ownerPubKey,totalFundRaisingB:Se,vestingSchedule:{totalLockedAmount:Me,cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)},mintProgramFlag:B?1:0,cpmmCreatorFeeOn:I},rs=Kt.getCurve(R.curveType),{c:ss}=rs.getInitParam({supply:Vt.supply,totalFundRaising:Vt.totalFundRaisingB,totalLockedAmount:Me,totalSell:R.curveType===0?Vt.totalSellA:new ue(0),migrateFee:R.migrateFee});try{Kt.checkParam({supply:Vt.supply,totalFundRaising:Vt.totalFundRaisingB,totalSell:ss,totalLockedAmount:Me,decimals:Vt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(Qt){this.logAndCreateError(`check create mint params failed, ${Qt.message}`)}O.addInstruction({instructions:[B?Ol(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,se,i,a,c,u||"https://",{type:z===0?"ConstantCurve":z===1?"FixedCurve":z===2?"LinearCurve":"ConstantCurve",totalSellA:J,migrateType:l,supply:te,totalFundRaisingB:Se},Me,(nu=C==null?void 0:C.cliffPeriod)!=null?nu:new ue(0),(ou=C==null?void 0:C.unlockPeriod)!=null?ou:new ue(0),I,K):Nl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,se,ae,i,a,c,u||"https://",{type:z===0?"ConstantCurve":z===1?"FixedCurve":z===2?"LinearCurve":"ConstantCurve",totalSellA:J,migrateType:l,supply:te,totalFundRaisingB:Se},Me,(iu=C==null?void 0:C.cliffPeriod)!=null?iu:new ue(0),(ru=C==null?void 0:C.unlockPeriod)!=null?ru:new ue(0),I)]});let wo=B?await this.scope.connection.getEpochInfo():void 0,$n=K?{epoch:BigInt((wo==null?void 0:wo.epoch)||0),maximumFee:BigInt((su=K==null?void 0:K.maxinumFee.toString())!=null?su:0),transferFeeBasisPoints:(au=K==null?void 0:K.transferFeeBasePoints)!=null?au:0}:void 0,ko={amountA:{amount:new ue(0),fee:void 0,expirationTime:void 0},amountB:new ue(0),splitFee:{platformFee:new ue(0),shareFee:new ue(0),protocolFee:new ue(0),creatorFee:new ue(0)}},ho;if(x!=null&&x.length&&O.addInstruction({signers:x}),!C.createOnly){let{builder:Qt,extInfo:Xl}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:B?Ao:void 0,mintA:o,mintB:v,poolInfo:Vt,buyAmount:A,minMintAAmount:k,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:ke,slippage:T,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!$n,transferFeeConfigA:$n?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:$n,newerTransferFee:$n}:void 0,fromCreate:!0});O.addInstruction(_({},Qt.AllTxData)),ko=_({},Xl),ho=(this.scope.cluster==="devnet"||f===1)&&C.shareFeeReceiver?[Qt.allInstructions[0]]:void 0}return O.addTipInstruction(b),f===0?O.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:ko,splitIns:ho,address:q(_({},Vt),{poolId:H})}):O.sizeCheckBuild({computeBudgetConfig:y,swapInfo:ko,splitIns:ho,address:q(_({},Vt),{poolId:H})})}async buyToken({programId:e=ut,authProgramId:t,mintA:n,mintAProgram:o=Ve,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:w=!1}){var J,Se,Me;p.lte(new ue(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let x=this.createTxBuilder(d),{publicKey:B}=Do(e,n,i);t=t!=null?t:zt(e).publicKey;let K=h;if(!w)if(K)o=Ao;else{let ke=await this.scope.connection.getAccountInfo(n);if(ke&&ke.owner.equals(Ao)){o=ke.owner;let Ct=ts(n,ke,o);K=es(Ct)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),L=T&&C,N=L?this.scope.account.getAssociatedTokenAccount(i,Ve):null,O=C;if(x.addInstruction({instructions:[_t(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...L?[_t(this.scope.ownerPubKey,N,this.scope.ownerPubKey,i,Ve),Gf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N,lamports:BigInt(p.toString())}),Uf(N)]:[]]}),!L){let{account:ke,instructionParams:Ct}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:O?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!O,notUseTokenAccount:O,associatedOnly:O?!1:A,checkCreateATAOwner:k});ke&&(N=ke),x.addInstruction(Ct||{})}N||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let ke=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});ke||this.logAndCreateError("cannot found pool:",B.toBase58()),R=dn.decode(ke.data)}let v=a,z=await Ee(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ke=>({pubkey:ke})));if(!v){let ke=z.find(Ct=>Ct.pubkey.equals(R.configId));(!ke||!ke.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Qn.decode(ke.accountInfo.data)}let H=z.find(ke=>ke.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Kt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountA.amount.toString()).sub((Se=(J=se.amountA.fee)==null?void 0:J.toString())!=null?Se:0),ge=y?new M(Zn.sub(y).toNumber()/Zn.toNumber()).clampedTo(0,1):new M(1),pe=f!=null?f:y?new ue(ae.mul(ge).toFixed(0)):se.amountA.amount.sub((Me=se.amountA.fee)!=null?Me:new ue(0));se.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${se.amountA.toString()}, input ${i.toBase58()} amount: ${se.amountB.toString()}`);let te=g?ee(g,i,Ve).publicKey:void 0;return te&&x.addInstruction({instructions:[_t(this.scope.ownerPubKey,te,g,i)]}),x.addInstruction({instructions:[Yr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,I,N,R.vaultA,R.vaultB,n,i,o,Ve,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,se.amountB.lt(p)?se.amountB:p,pe,b,te)]}),x.addCustomComputeBudget(l),x.addTipInstruction(m),x.versionBuild({txVersion:u,extInfo:q(_({},se),{decimalOutAmount:ae,minDecimalOutAmount:new M(pe.toString())})})}async buyTokenExactOut({programId:e=ut,authProgramId:t,mintA:n,mintAProgram:o=Ve,mintB:i=Nn,poolInfo:r,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new ue(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ue(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let w=this.createTxBuilder(p),{publicKey:x}=Do(e,n,i);t=t!=null?t:zt(e).publicKey;let B=r;if(!B){let te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});te||this.logAndCreateError("cannot found pool:",x.toBase58()),B=dn.decode(te.data)}let K=a,I=await Ee(this.scope.connection,[K?void 0:B.configId,B.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!K){let te=I.find(J=>J.pubkey.equals(B.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",B.configId.toBase58()),K=Qn.decode(te.accountInfo.data)}let C=I.find(te=>te.pubkey.equals(B.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",B.configId.toBase58());let L=Ln.decode(C.accountInfo.data);u=u||L.feeRate;let N=c;if(!h)if(N)o=Ao;else{let te=await this.scope.connection.getAccountInfo(n);if(te&&te.owner.equals(Ao)){o=te.owner;let J=ts(n,te,o);N=es(J)||void 0}}let O=Kt.buyExactOut({poolInfo:B,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:L.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),R=new M(O.amountB.toString()),v=b?new M(Zn.add(b).toNumber()/Zn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new M(1),z=(f!=null?f:b)?new ue(R.mul(v).toFixed(0)):O.amountB,H=this.scope.account.getAssociatedTokenAccount(n,o),ce=null,se=i.equals(Nn);w.addInstruction({instructions:[_t(this.scope.ownerPubKey,H,this.scope.ownerPubKey,n,o)]});let{account:ae,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:se?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!se,notUseTokenAccount:se,associatedOnly:se?!1:k,checkCreateATAOwner:T});ae&&(ce=ae),w.addInstruction(ge||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let pe=A?ee(A,i,Ve).publicKey:void 0;return pe&&w.addInstruction({instructions:[_t(this.scope.ownerPubKey,pe,A,i)]}),w.addInstruction({instructions:[Ml(e,this.scope.ownerPubKey,t,B.configId,B.platformId,x,H,ce,B.vaultA,B.vaultB,n,i,o,Ve,Pn(e,B.platformId,i).publicKey,An(e,B.creator,i).publicKey,y,z,g,pe)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:z,outAmount:y}})}async sellToken({programId:e=ut,authProgramId:t,mintAProgram:n=Ve,mintA:o,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:zt(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ue(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=Do(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(Ao)){n=J.owner;let Se=ts(o,J,n);x=es(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(B=C),h.addInstruction(L||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let J=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",w.toBase58()),R=dn.decode(J.data)}let v=a,z=await Ee(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(J=>({pubkey:J})));if(!v){let J=z.find(Se=>Se.pubkey.equals(R.configId));(!J||!J.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Qn.decode(J.accountInfo.data)}let H=z.find(J=>J.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Kt.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountB.toString()),ge=y?new M(Zn.sub(y).toNumber()/Zn.toNumber()).clampedTo(0,1):new M(1),pe=f!=null?f:y?new ue(ae.mul(ge).toFixed(0)):se.amountB;pe.lte(new ue(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let te=g?ee(g,i,Ve).publicKey:void 0;return te&&h.addInstruction({instructions:[_t(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[Hr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,w,B,K,R.vaultA,R.vaultB,o,i,n,Ve,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,se.amountA.amount.lt(p)?se.amountA.amount:p,pe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:pe}})}async sellTokenExactOut({programId:e=ut,authProgramId:t,mintAProgram:n=Ve,mintA:o,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:zt(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ue(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=Do(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(Ao)){n=J.owner;let Se=ts(o,J,n);x=es(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(B=C),h.addInstruction(L||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let J=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",w.toBase58()),R=dn.decode(J.data)}let v=a,z=await Ee(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(J=>({pubkey:J})));if(!v){let J=z.find(Se=>Se.pubkey.equals(R.configId));(!J||!J.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Qn.decode(J.accountInfo.data)}let H=z.find(J=>J.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Kt.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountA.amount.toString()),ge=y?new M(Zn.add(y).toNumber()/Zn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),pe=(f!=null?f:y)?new ue(ae.mul(ge).toFixed(0)):se.amountA.amount,te=g?ee(g,i,Ve).publicKey:void 0;return te&&h.addInstruction({instructions:[_t(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[vl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,w,B,K,R.vaultA,R.vaultB,o,i,n,Ve,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,p,pe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:pe}})}async createPlatformConfig({programId:e=ut,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,cpConfigId:i,migrateCpLockNftScale:r,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:A}=Va(e,t);return g.addInstruction({instructions:[Fl(e,t,n,o,A,i,a,r,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:A}})}async updatePlatformConfig({programId:e=ut,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Va(e,t).publicKey;return u.addInstruction({instructions:[_l(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimPlatformFee({programId:e=ut,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:c=Ve,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:zt(e).publicKey;let f=r,y=a;if(!f){let A=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});A||this.logAndCreateError("cannot found pool:",o.toBase58());let k=dn.decode(A.data),T=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Qn.decode(T.data).mintB,y=y!=null?y:k.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=ee(this.scope.ownerPubKey,f,Ve).publicKey;return p.addInstruction({instructions:[_t(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Xa(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=ut,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:zt(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:dn.span},{memcmp:{offset:dn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=dn.decode(m.account.data);if(d.platformFee.lte(new ue(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Ve).publicKey;u.addInstruction({instructions:[_t(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Xa(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,Ve)]})}),u.addTipInstruction(a),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=ut,poolId:t,beneficiary:n,shareAmount:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});o.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=Vi(e,t,n).publicKey;return u.addInstruction({instructions:[Ga(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=ut,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=this.createTxBuilder(r);n.length===0&&this.logAndCreateError("beneficiaryList is null");let c=await this.getRpcPoolInfo({poolId:t});return n.reduce((l,m)=>l.add(m.shareAmount),c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(l=>{let m=Vi(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ga(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=ut,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=zt(e).publicKey,m=o||Vi(e,t,this.scope.ownerPubKey).publicKey,d=n;if(!d){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),d=dn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Ve).publicKey;return u.addInstruction({instructions:[_t(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Ve)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=ut,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=zt(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||Vi(e,d,this.scope.ownerPubKey).publicKey,b=ee(this.scope.ownerPubKey,f.mintA,Ve).publicKey;c.addInstruction({instructions:[_t(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,Ve)]})}),i===0?c.sizeCheckBuildV0({computeBudgetConfig:r}):c.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=ut,platformId:t,mintB:n,mintBProgram:o=Ve,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=Pn(e,t,n).publicKey,d=Wa(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[_t(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),za(e,t,i!=null?i:this.scope.ownerPubKey,d,m,p,n,o)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:r})}async claimMultipleVaultPlatformFee({programId:e=ut,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:i,feePayer:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(r),l={};return t.forEach(async m=>{var b,g;let d=Wa(e).publicKey,p=Pn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Nn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});A&&(y=A),u.addInstruction(k||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[za(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:Ve)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:i}):u.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=ut,mintB:t,mintBProgram:n=Ve,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=An(e,this.scope.ownerPubKey,t).publicKey,l=Da(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[_t(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Ya(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=ut,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=this.createTxBuilder(i);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:Ve,l=An(e,this.scope.ownerPubKey,c).publicKey,m=Da(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[_t(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),Ya(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?r.sizeCheckBuildV0({computeBudgetConfig:o}):r.sizeCheckBuild({computeBudgetConfig:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Ee(this.scope.connection,e.map(c=>({pubkey:c})),t),o={},i=[];for(let c=0;c<e.length;c++){let u=n[c];if(u===null||!u.accountInfo)throw Error("fetch pool info error: "+e[c].toBase58());let l=dn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(_({},l),{poolId:e[c],programId:u.accountInfo.owner}),i.push(l.configId)}let r=await Ee(this.scope.connection,i.map(c=>({pubkey:c})),t),a={};for(let c=0;c<i.length;c++){let u=r[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+i[c].toBase58());let l=Qn.decode(u.accountInfo.data);a[i[c].toBase58()]=q(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(_({},c),{[u]:q(_({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new nt(0),qi=class extends De{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ne(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[hn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[hn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,l=e.amountOut,m=u.amount.token.mint.equals(Z),d=l.amount.token.mint.equals(Z),p=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Uo:Fe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:m?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!d)g=this.scope.account.getAssociatedTokenAccount(f,l.amount.token.isToken2022?Uo:Fe);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?Uo:Fe,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=h,w&&c.addInstruction(w)}d&&c.addInstruction({endInstructions:[hn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Fe})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let h=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?Uo:Fe)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Rl({routeProgram:i,inputMint:p,swapInfo:q(_({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[Wl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:w}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[Wl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return c.addInstruction(T),r===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:T.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:T.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:c=new nt(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let A=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,k=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:w,remainingAccounts:x},launchPoolInfo:B,launchAuthProgramId:K,launchSwapInfo:I,outAmount:C,minOutAmount:L}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:k,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),N=e.toString()===T.poolInfo.mintA.address,O=f.useSOLBalance&&T.poolInfo.mintA.address===Z.toBase58(),R=f.useSOLBalance&&T.poolInfo.mintB.address===Z.toBase58(),v={},z;!r||r.equals(new M(0))?z=N?Tt.add(new nt(1)):It.sub(new nt(1)):z=le.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let H=this.createTxBuilder(A),[ce,se]=[new ve(T.poolInfo.mintA.address),new ve(T.poolInfo.mintB.address)],[ae,ge]=[new ve(T.poolInfo.mintA.programId),new ve(T.poolInfo.mintB.programId)],pe=this.scope.account.getAssociatedTokenAccount(ce,ae),te=this.scope.account.getAssociatedTokenAccount(se,ge);H.addInstruction({instructions:[Ha(this.scope.ownerPubKey,pe,this.scope.ownerPubKey,ce,ae),Ha(this.scope.ownerPubKey,te,this.scope.ownerPubKey,se,ge)]}),(N&&O||!N&&R)&&H.addInstruction({instructions:[Xf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?pe:te,lamports:BigInt(h.toString())}),zf(N?pe:te)]}),v[T.poolInfo.mintA.address]=pe,v[T.poolInfo.mintB.address]=te,(!pe||!te)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:pe,ownerTokenAccountB:te}),H.addInstruction(n?Be.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:pe,tokenAccountB:te},outputMint:N?se:ce,amountOut:w,amountInMax:h,sqrtPriceLimitX64:z,remainingAccounts:x}):Be.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:pe,tokenAccountB:te},inputMint:new ve(e),amountIn:t,amountOutMin:w,sqrtPriceLimitX64:z,remainingAccounts:x}));let J=B.mintProgramFlag===0?Fe:Uo,Se=this.scope.account.getAssociatedTokenAccount(B.mintA,J),Me=v[B.mintB.toBase58()];if(H.addInstruction({instructions:[Ha(this.scope.ownerPubKey,Se,this.scope.ownerPubKey,B.mintA,J)]}),!Me){let ke=B.mintB.equals(Z),{account:Ct,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:B.mintB,notUseTokenAccount:ke,owner:this.scope.ownerPubKey,skipCloseAccount:!ke,createInfo:ke?{payer:this.scope.ownerPubKey,amount:w}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Me=Ct,Et&&H.addInstruction(Et)}return H.addInstruction({instructions:[Yr(B.programId,this.scope.ownerPubKey,K,B.configId,B.platformId,new ve(i),Se,Me,B.vaultA,B.vaultB,B.mintA,B.mintB,J,Fe,Pn(B.programId,B.platformId,B.mintB).publicKey,An(B.programId,B.creator,B.mintB).publicKey,I.amountB.lt(w)?I.amountB:w,L,c,u)]}),H.addCustomComputeBudget(b),H.versionBuild({txVersion:g,extInfo:{routes:[{mint:new ve(e),amount:n?h:t,decimal:T.poolInfo[N?"mintA":"mintB"].decimals},{mint:N?se:ce,amount:w,decimal:T.poolInfo[N?"mintB":"mintA"].decimals},{mint:B.mintA,amount:C,decimal:B.mintDecimalsA}],outAmount:C,minOutAmount:L}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new nt(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var O,R,v,z,H,ce;let f=r>0?new M(r).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():r,y=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==y.poolInfo.mintA.address&&e.toString()!==y.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let b=e.toString()===y.poolInfo.mintA.address,g=y.poolInfo[b?"mintB":"mintA"],A=n?await Ne.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new ve(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await Ne.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),k=l;if(k||(k=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(i)})),g.address!==k.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${k.mintB.toBase58()})`);let T=m;if(!T){let se=await this.scope.connection.getAccountInfo(k.platformId);T=Ln.decode(se.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(k.mintA),w=zt(k.programId).publicKey,x=h.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(O=h.extensions.feeConfig.olderTransferFee.epoch)!=null?O:a==null?void 0:a.epoch)!=null?R:0),maximumFee:BigInt(h.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((z=(v=h.extensions.feeConfig.newerTransferFee.epoch)!=null?v:a==null?void 0:a.epoch)!=null?z:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,B=n?t:A.minAmountOut.amount.raw,K=Kt.buyExactIn({poolInfo:k,amountB:B,protocolFeeRate:k.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:k.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:x,slot:d!=null?d:await this.scope.connection.getSlot()}),I=K.amountA.amount.sub((H=K.amountA.fee)!=null?H:new nt(0)),C=new M(I.toString()),L=new nt(1e4),N=f?new M(L.sub(new nt(f*1e4)).toNumber()/L.toNumber()).clampedTo(0,1):new M(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?A.maxAmountIn.amount:t,clmmAmountOut:B,remainingAccounts:A.remainingAccounts},clmmComputeInfo:A,launchPoolInfo:k,launchAuthProgramId:w,launchMintTransferFeeConfig:x,launchSwapInfo:K,outAmount:K.amountA.amount.sub((ce=K.amountA.fee)!=null?ce:new nt(0)),minOutAmount:new nt(C.mul(N).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new nt(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}){let d=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,p=await this.scope.fetchEpochInfo(),{clmmPoolData:f,clmmComputeAmount:{remainingAccounts:y},launchPoolInfo:b,launchAuthProgramId:g,launchSwapInfo:A,minLaunchOutAmount:k,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),w=this.createTxBuilder(d),x={},B=b.mintProgramFlag===0?Fe:Uo,{account:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!K)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let I=b.mintB.equals(Z),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:b.mintB,notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(L&&w.addInstruction(L),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);x[b.mintB.toBase58()]=C,w.addInstruction({instructions:[Hr(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new ve(n),K,C,b.vaultA,b.vaultB,b.mintA,b.mintB,B,Fe,Pn(b.programId,b.platformId,b.mintB).publicKey,An(b.programId,b.creator,b.mintB).publicKey,A.amountA.amount.lt(e)?A.amountA.amount:e,k,r,a)]});let N=b.mintB.toString()===f.poolInfo.mintA.address,O=c.useSOLBalance&&f.poolInfo.mintA.address===Z.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===Z.toBase58(),v;!o||o.equals(new M(0))?v=N?Tt.add(new nt(1)):It.sub(new nt(1)):v=le.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[z,H]=[new ve(f.poolInfo.mintA.address),new ve(f.poolInfo.mintB.address)],[ce,se]=[new ve(f.poolInfo.mintA.programId),new ve(f.poolInfo.mintB.programId)],ae=O?void 0:this.scope.account.getAssociatedTokenAccount(z,ce),ge=R?void 0:this.scope.account.getAssociatedTokenAccount(H,se);if(!ae){let{account:pe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ce,mint:z,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?e:0},associatedOnly:!1,checkCreateATAOwner:u});ae=pe,te&&w.addInstruction(te)}if(!ge){let{account:pe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:se,mint:H,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?0:e},associatedOnly:!1,checkCreateATAOwner:u});ge=pe,te&&w.addInstruction(te)}return x[f.poolInfo.mintA.address]=ae,x[f.poolInfo.mintB.address]=ge,(!ae||!ge)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ae,ownerTokenAccountB:ge}),w.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ae,tokenAccountB:ge},inputMint:new ve(f.poolKeys[N?"mintA":"mintB"].address),amountIn:k,amountOutMin:h,sqrtPriceLimitX64:v,remainingAccounts:y})),w.addCustomComputeBudget(l),w.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:k,decimal:b.mintDecimalsB},{mint:new ve(f.poolKeys[N?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[N?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new nt(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,L,N,O;let l=o>0?new M(o).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(n)}));let d=m.mintB,p=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(d.toString()!==p.poolInfo.mintA.address&&d.toString()!==p.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let f=d.toString()===p.poolInfo.mintA.address,y=p.poolInfo[f?"mintB":"mintA"],b=u;if(!b){let R=await this.scope.connection.getAccountInfo(m.platformId);b=Ln.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),A=zt(m.programId).publicKey,k=g.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((L=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?L:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((O=(N=g.extensions.feeConfig.newerTransferFee.epoch)!=null?N:i==null?void 0:i.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=Kt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:k,slot:await this.scope.connection.getSlot()}),h=T.amountB,w=new M(h.toString()),x=new nt(1e4),B=l?new M(x.sub(new nt(l*1e4)).toNumber()/x.toNumber()).clampedTo(0,1):new M(1),K=new nt(w.mul(B).toFixed(0)),I=await Ne.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:K,tokenOut:y,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo()});return{clmmPoolData:p,clmmComputeAmount:I,launchPoolInfo:m,launchAuthProgramId:A,launchMintTransferFeeConfig:k,launchSwapInfo:T,minLaunchOutAmount:K,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=lr,clmm:n=eo,cpmm:o=no}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ii.offsetOf("baseMint"),length:64}}),r=E([F("baseMint"),F("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),c=E([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:lo.span}],dataSlice:{offset:lo.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Ur.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===ve.default.toString()?Z:e,t=t.toString()===ve.default.toString()?Z:t;let r={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),r[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&r[f.id.toString()]===void 0&&(r[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=_r(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new ve(y.mintA.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new ve(y.mintB.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(Fe)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(Fe)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await To({connection:this.scope.connection,mints:Array.from(o).map(y=>new ve(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>q(_({},y),{[b]:q(_({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,k,T,h,w,x,B,K;let m=l===void 0?new nt(0):e.raw.mul(new nt(l.feeBps.toNumber())).div(new nt(1e4)),d=e.raw.sub(m),p=new Re(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(_({},t),{address:yt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(_({},this.computeAmountOut({itemPool:I,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",I.version,I.id.toString(),C.message)}this.logDebug("direct done");for(let[I,C]of Object.entries(o)){let L={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:L,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var ce,se,ae,ge;let z=R===void 0?On:R.data.amountOut.amount.raw.sub((se=(ce=R.data.amountOut.fee)==null?void 0:ce.raw)!=null?se:On),H=v===void 0?On:v.data.amountOut.amount.raw.sub((ge=(ae=v.data.amountOut.fee)==null?void 0:ae.raw)!=null?ge:On);return z.lt(H)?1:-1})[0];if(N===void 0)continue;let O=new Re(Or(L),N.data.amountOut.amount.raw.sub((A=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?A:On));for(let R of C.out)try{let v=this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(q(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new Lt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(k=v.amountOut.fee)==null?void 0:k.raw)!=null?T:On)}).toFixed()),priceImpact:new M(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,R],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Re(N.data.amountOut.amount.token,((x=(w=N.data.amountOut.fee)==null?void 0:w.raw)!=null?x:On).add((K=(B=v.amountOut.fee)==null?void 0:B.raw)!=null?K:On)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:cn(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",R.version,R.id.toString(),v.message)}}return b.filter(I=>(I.allTrade||this.logDebug(`pool ${I.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),I.allTrade)).sort((I,C)=>I.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(On)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:k}=Ne.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(y.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[k],expirationTime:cn(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:r});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ti(q(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ti(q(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Re(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ti(q(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ti(q(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Re(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let i=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};r.size>0&&(await Ee(this.scope.connection,Array.from(r).map(l=>({pubkey:new ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=_a.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Xr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:q(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Sa({programId:new ve(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Eo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:wt({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:q(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Yf,Transaction as Qa,TransactionInstruction as Hf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qf}from"@solana/spl-token";import Dl from"bn.js";var kt=class extends De{static getPdaPoolId(e,t){return fe([kt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return fe([kt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Dl(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(l=>kt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<kt.VERSION_PROJECT.length;l++)a.push(...r.map(m=>kt.getPdaOwnerId(t,m,o,l).publicKey));let c=await on(e,[...r,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=r[d],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==kt.POOL_LAYOUT.span||b.data.length!==kt.OWNER_LAYOUT.span)continue;let g=kt.POOL_LAYOUT.decode(y.data),A=kt.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(B=>B.debtAmount.gt(new Dl(0))).filter(B=>!B).length!==3,w=i>k&&i<T&&g.status===1,x=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:kt.VERSION_PROJECT[m],openTime:k,endTime:T,canClaim:x,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,K)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:A.tokenInfo[K].debtAmount.add(A.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(ze.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(ze.WSOL.mint),associatedOnly:u.mintAddress.equals(ze.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),r.push(l)}o.addInstruction({instructions:[kt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let l of e){let m=[];for(let d of l.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(ze.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(ze.WSOL.mint),associatedOnly:d.mintAddress.equals(ze.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[kt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:i,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return xs(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Qa().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Qa().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Qa().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=E([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Qf,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 Hf({keys:i,programId:e,data:a})}},nn=kt;nn.CLAIMED_NUM=3,nn.POOL_LAYOUT=E([xe(8),D("bump"),D("status"),P("openTime"),P("endTime"),F("ammId"),Q(E([D("mintDecimals"),F("mintAddress"),F("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),kt.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),nn.OWNER_LAYOUT=E([xe(8),D("bump"),D("version"),F("poolId"),F("owner"),P("lpAmount"),Q(E([F("mintAddress"),P("debtAmount"),P("claimedAmount")]),kt.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),nn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Yf(e)),nn.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},nn.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Gi}from"@solana/web3.js";import Gl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Zf,TransactionInstruction as ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";var jf=E([D("instruction"),rc("amount")]),Ui=E([D("instruction")]);function os({programId:s},e){let t=[{pubkey:Ul,isSigner:!1,isWritable:!1},{pubkey:Nu,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Ui.span);return Ui.encode({instruction:2},n),new ql({keys:t,programId:s,data:n})}function ja(s){let{poolConfig:e,userKeys:t,side:n}=s,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,r=Buffer.alloc(Ui.span);Ui.encode({instruction:2},r);let a=[{pubkey:Ul,isWritable:!1,isSigner:!1},{pubkey:Zf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ql({programId:e.programId,keys:a,data:r})}var $f={[ti.IDO_PROGRAM_ID_V1.toString()]:1,[ti.IDO_PROGRAM_ID_V2.toString()]:2,[ti.IDO_PROGRAM_ID_V3.toString()]:3,[ti.IDO_PROGRAM_ID_V4.toString()]:4},Go=class extends De{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i,feePayer:r}){let a=this.createTxBuilder(r),c=$f[t.programId];c||this.logAndCreateError("invalid version",c);let u=pt(t),[l,m]=[!new Gl(e.coin).isZero(),!new Gl(e.pc).isZero()],d=u.projectInfo.mint.address.equals(Z),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:o});!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&f&&a.addInstruction(f);let y=u.buyInfo.mint.address.equals(Z),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!p&&m&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),m&&g&&a.addInstruction(g),(!p||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[os({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[os({programId:new Gi(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[os({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let A={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:b,ledgerAccount:new Gi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[ja(q(_({},A),{side:"base"}))]:[],...m?[ja(q(_({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as Jf}from"@solana/web3.js";import{MintLayout as ey,TOKEN_2022_PROGRAM_ID as Za,TOKEN_PROGRAM_ID as $a}from"@solana/spl-token";var Xi=class extends De{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:r,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(r),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(En.address,En),this._mintGroup.official.add(En.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Za.toBase58():$a.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Za.toBase58():$a.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Za.toBase58():$a.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return En;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(_({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new Jf(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=ey.decode(r.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:r.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var is=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:r,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new un(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=we("Raydium"),this.farm=new fi({scope:this,moduleName:"Raydium_Farm"}),this.account=new si({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ci({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Xi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new qi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Li({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ei({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new nn({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new _o({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Go({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Di({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:r||Date.now()-a,offset:a}})}static async load(e){var l;let t=ty({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new Pr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new is(q(_({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Ar);return this._owner.publicKey}setOwner(e){return this._owner=e?new un(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Zu);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw console.error(Ar),new Error(Ar)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){if(this.cluster==="devnet")return[];let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(o=>q(_({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{is as Raydium};
1
+ var zl=Object.defineProperty,Yl=Object.defineProperties;var Hl=Object.getOwnPropertyDescriptors;var Yi=Object.getOwnPropertySymbols;var cu=Object.prototype.hasOwnProperty,lu=Object.prototype.propertyIsEnumerable;var uu=(s,e,t)=>e in s?zl(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,_=(s,e)=>{for(var t in e||(e={}))cu.call(e,t)&&uu(s,t,e[t]);if(Yi)for(var t of Yi(e))lu.call(e,t)&&uu(s,t,e[t]);return s},q=(s,e)=>Yl(s,Hl(e));var Ge=(s,e)=>{var t={};for(var n in s)cu.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&Yi)for(var n of Yi(s))e.indexOf(n)<0&&lu.call(s,n)&&(t[n]=s[n]);return t};import{merge as ty}from"lodash";import ju from"axios";import{PublicKey as pu}from"@solana/web3.js";import{get as mu,set as Ql}from"lodash";var as=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}},du={},jl={};function we(s){let e=mu(du,s);if(!e){let t=mu(jl,s);e=new as({name:s,logLevel:t}),Ql(du,s,e)}return e}import{MINT_SIZE as Zl,TOKEN_PROGRAM_ID as $l,getTransferFeeConfig as Jl,unpackMint as em}from"@solana/spl-token";var us=we("Raydium_accountInfo_util");async function on(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=_({batchRequest:!1},t),r=cs(e,i),a=new Array(r.length).fill([]);if(n){let c=r.map(m=>{let d=s._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=cs(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&us.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:y,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&us.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new pu(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&us.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function Ee(s,e,t){let n=await on(s,e.map(o=>o.pubkey),t);return e.map((o,i)=>q(_({},o),{accountInfo:n[i]}))}async function To({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ee(s,e.map(c=>({pubkey:yt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Zl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=em(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(_({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||$l,feeConfig:(a=Jl(u))!=null?a:void 0})}return o[pu.default.toBase58()]=o[Z.toBase58()],o}import fn from"bn.js";var Io=9e15,_n=1e9,ls="0123456789abcdef",Qi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ji="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ms={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Io,maxE:Io,crypto:!1},gu,wn,be=!0,$i="[DecimalError] ",Fn=$i+"Invalid argument: ",Pu=$i+"Precision limit exceeded",Au=$i+"crypto unavailable",wu="[object Decimal]",bt=Math.floor,ot=Math.pow,tm=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,nm=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,om=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ku=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,sn=1e7,me=7,im=9007199254740991,rm=Qi.length-1,ds=ji.length-1,G={toStringTag:wu};G.absoluteValue=G.abs=function(){var s=new this.constructor(this);return s.s<0&&(s.s=1),oe(s)};G.ceil=function(){return oe(new this.constructor(this),this.e+1,2)};G.clampedTo=G.clamp=function(s,e){var t,n=this,o=n.constructor;if(s=new o(s),e=new o(e),!s.s||!e.s)return new o(NaN);if(s.gt(e))throw Error(Fn+e);return t=n.cmp(s),t<0?s:n.cmp(e)>0?e:new o(n)};G.comparedTo=G.cmp=function(s){var e,t,n,o,i=this,r=i.d,a=(s=new i.constructor(s)).d,c=i.s,u=s.s;if(!r||!a)return!c||!u?NaN:c!==u?c:r===a?0:!r^c<0?1:-1;if(!r[0]||!a[0])return r[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==s.e)return i.e>s.e^c<0?1:-1;for(n=r.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(r[e]!==a[e])return r[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};G.cosine=G.cos=function(){var s,e,t=this,n=t.constructor;return t.d?t.d[0]?(s=n.precision,e=n.rounding,n.precision=s+Math.max(t.e,t.sd())+me,n.rounding=1,t=sm(n,xu(n,t)),n.precision=s,n.rounding=e,oe(wn==2||wn==3?t.neg():t,s,e,!0)):new n(1):new n(NaN)};G.cubeRoot=G.cbrt=function(){var s,e,t,n,o,i,r,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(be=!1,i=l.s*ot(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=mt(l.d),s=l.e,(i=(s-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=ot(t,1/3),s=bt((s+1)/3)-(s%3==(s<0?-1:2)),i==1/0?t="5e"+s:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+s),n=new m(t),n.s=l.s):n=new m(i.toString()),r=(s=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=_e(u.plus(l).times(a),u.plus(c),r+2,1),mt(a.d).slice(0,r)===(t=mt(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t=="9999"||!o&&t=="4999"){if(!o&&(oe(a,s+1,0),a.times(a).times(a).eq(l))){n=a;break}r+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(oe(n,s+1,1),e=!n.times(n).times(n).eq(l));break}return be=!0,oe(n,s,m.rounding,e)};G.decimalPlaces=G.dp=function(){var s,e=this.d,t=NaN;if(e){if(s=e.length-1,t=(s-bt(this.e/me))*me,s=e[s],s)for(;s%10==0;s/=10)t--;t<0&&(t=0)}return t};G.dividedBy=G.div=function(s){return _e(this,new this.constructor(s))};G.dividedToIntegerBy=G.divToInt=function(s){var e=this,t=e.constructor;return oe(_e(e,new t(s),0,1,1),t.precision,t.rounding)};G.equals=G.eq=function(s){return this.cmp(s)===0};G.floor=function(){return oe(new this.constructor(this),this.e+1,3)};G.greaterThan=G.gt=function(s){return this.cmp(s)>0};G.greaterThanOrEqualTo=G.gte=function(s){var e=this.cmp(s);return e==1||e===0};G.hyperbolicCosine=G.cosh=function(){var s,e,t,n,o,i=this,r=i.constructor,a=new r(1);if(!i.isFinite())return new r(i.s?1/0:NaN);if(i.isZero())return a;t=r.precision,n=r.rounding,r.precision=t+Math.max(i.e,i.sd())+4,r.rounding=1,o=i.d.length,o<32?(s=Math.ceil(o/3),e=(1/er(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=Bo(r,1,i.times(e),new r(1),!0);for(var c,u=s,l=new r(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return oe(i,r.precision=t,r.rounding=n,!0)};G.hyperbolicSine=G.sinh=function(){var s,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=Bo(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/er(5,s)),o=Bo(i,2,o,o,!0);for(var r,a=new i(5),c=new i(16),u=new i(20);s--;)r=o.times(o),o=o.times(a.plus(r.times(c.times(r).plus(u))))}return i.precision=e,i.rounding=t,oe(o,e,t,!0)};G.hyperbolicTangent=G.tanh=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+7,n.rounding=1,_e(t.sinh(),t.cosh(),n.precision=s,n.rounding=e)):new n(t.s)};G.inverseCosine=G.acos=function(){var s,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?rn(t,o,i):new t(0):new t(NaN):e.isZero()?rn(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),s=rn(t,o+4,i).times(.5),t.precision=o,t.rounding=i,s.minus(e))};G.inverseHyperbolicCosine=G.acosh=function(){var s,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(s=n.precision,e=n.rounding,n.precision=s+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,be=!1,t=t.times(t).minus(1).sqrt().plus(t),be=!0,n.precision=s,n.rounding=e,t.ln()):new n(t)};G.inverseHyperbolicSine=G.asinh=function(){var s,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,be=!1,t=t.times(t).plus(1).sqrt().plus(t),be=!0,n.precision=s,n.rounding=e,t.ln())};G.inverseHyperbolicTangent=G.atanh=function(){var s,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(s=i.precision,e=i.rounding,n=o.sd(),Math.max(n,s)<2*-o.e-1?oe(new i(o),s,e,!0):(i.precision=t=n-o.e,o=_e(o.plus(1),new i(1).minus(o),t+s,1),i.precision=s+4,i.rounding=1,o=o.ln(),i.precision=s,i.rounding=e,o.times(.5))):new i(NaN)};G.inverseSine=G.asin=function(){var s,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(s=rn(i,t+4,n).times(.5),s.s=o.s,s):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};G.inverseTangent=G.atan=function(){var s,e,t,n,o,i,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=ds)return r=rn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=ds)return r=rn(l,m+4,d).times(.5),r.s=u.s,r}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/me+2|0),s=t;s;--s)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(be=!1,e=Math.ceil(a/me),n=1,c=u.times(u),r=new l(u),o=u;s!==-1;)if(o=o.times(c),i=r.minus(o.div(n+=2)),o=o.times(c),r=i.plus(o.div(n+=2)),r.d[e]!==void 0)for(s=e;r.d[s]===i.d[s]&&s--;);return t&&(r=r.times(2<<t-1)),be=!0,oe(r,l.precision=m,l.rounding=d,!0)};G.isFinite=function(){return!!this.d};G.isInteger=G.isInt=function(){return!!this.d&&bt(this.e/me)>this.d.length-2};G.isNaN=function(){return!this.s};G.isNegative=G.isNeg=function(){return this.s<0};G.isPositive=G.isPos=function(){return this.s>0};G.isZero=function(){return!!this.d&&this.d[0]===0};G.lessThan=G.lt=function(s){return this.cmp(s)<0};G.lessThanOrEqualTo=G.lte=function(s){return this.cmp(s)<1};G.logarithm=G.log=function(s){var e,t,n,o,i,r,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(s==null)s=new l(10),e=!0;else{if(s=new l(s),t=s.d,s.s<0||!t||!t[0]||s.eq(1))return new l(NaN);e=s.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(be=!1,a=m+p,r=vn(u,a),n=e?Zi(l,a+10):vn(s,a),c=_e(r,n,a,1),Xo(c.d,o=m,d))do if(a+=10,r=vn(u,a),n=e?Zi(l,a+10):vn(s,a),c=_e(r,n,a,1),!i){+mt(c.d).slice(o+1,o+15)+1==1e14&&(c=oe(c,m+1,0));break}while(Xo(c.d,o+=10,d));return be=!0,oe(c,m,d)};G.minus=G.sub=function(s){var e,t,n,o,i,r,a,c,u,l,m,d,p=this,f=p.constructor;if(s=new f(s),!p.d||!s.d)return!p.s||!s.s?s=new f(NaN):p.d?s.s=-s.s:s=new f(s.d||p.s!==s.s?p:NaN),s;if(p.s!=s.s)return s.s=-s.s,p.plus(s);if(u=p.d,d=s.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])s.s=-s.s;else if(u[0])s=new f(p);else return new f(c===3?-0:0);return be?oe(s,a,c):s}if(t=bt(s.e/me),l=bt(p.e/me),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,r=d.length):(e=d,t=l,r=u.length),n=Math.max(Math.ceil(a/me),r)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,r=d.length,m=n<r,m&&(r=n),n=0;n<r;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,s.s=-s.s),r=u.length,n=d.length-r;n>0;--n)u[r++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=sn-1;--u[o],u[n]+=sn}u[n]-=d[n]}for(;u[--r]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(s.d=u,s.e=Ji(u,t),be?oe(s,a,c):s):new f(c===3?-0:0)};G.modulo=G.mod=function(s){var e,t=this,n=t.constructor;return s=new n(s),!t.d||!s.s||s.d&&!s.d[0]?new n(NaN):!s.d||t.d&&!t.d[0]?oe(new n(t),n.precision,n.rounding):(be=!1,n.modulo==9?(e=_e(t,s.abs(),0,3,1),e.s*=s.s):e=_e(t,s,0,n.modulo,1),e=e.times(s),be=!0,t.minus(e))};G.naturalExponential=G.exp=function(){return ps(this)};G.naturalLogarithm=G.ln=function(){return vn(this)};G.negated=G.neg=function(){var s=new this.constructor(this);return s.s=-s.s,oe(s)};G.plus=G.add=function(s){var e,t,n,o,i,r,a,c,u,l,m=this,d=m.constructor;if(s=new d(s),!m.d||!s.d)return!m.s||!s.s?s=new d(NaN):m.d||(s=new d(s.d||m.s===s.s?m:NaN)),s;if(m.s!=s.s)return s.s=-s.s,m.minus(s);if(u=m.d,l=s.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(s=new d(m)),be?oe(s,a,c):s;if(i=bt(m.e/me),n=bt(s.e/me),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,r=l.length):(t=l,n=i,r=u.length),i=Math.ceil(a/me),r=i>r?i+1:r+1,o>r&&(o=r,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(r=u.length,o=l.length,r-o<0&&(o=r,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/sn|0,u[o]%=sn;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=Ji(u,n),be?oe(s,a,c):s};G.precision=G.sd=function(s){var e,t=this;if(s!==void 0&&s!==!!s&&s!==1&&s!==0)throw Error(Fn+s);return t.d?(e=hu(t.d),s&&t.e+1>e&&(e=t.e+1)):e=NaN,e};G.round=function(){var s=this,e=s.constructor;return oe(new e(s),s.e+1,e.rounding)};G.sine=G.sin=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+Math.max(t.e,t.sd())+me,n.rounding=1,t=um(n,xu(n,t)),n.precision=s,n.rounding=e,oe(wn>2?t.neg():t,s,e,!0)):new n(NaN)};G.squareRoot=G.sqrt=function(){var s,e,t,n,o,i,r=this,a=r.d,c=r.e,u=r.s,l=r.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?r:1/0);for(be=!1,u=Math.sqrt(+r),u==0||u==1/0?(e=mt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=bt((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(_e(r,i,t+2,1)).times(.5),mt(i.d).slice(0,t)===(e=mt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(oe(i,c+1,0),i.times(i).eq(r))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(oe(n,c+1,1),s=!n.times(n).eq(r));break}return be=!0,oe(n,c,l.rounding,s)};G.tangent=G.tan=function(){var s,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(s=n.precision,e=n.rounding,n.precision=s+10,n.rounding=1,t=t.sin(),t.s=1,t=_e(t,new n(1).minus(t.times(t)).sqrt(),s+10,0),n.precision=s,n.rounding=e,oe(wn==2||wn==4?t.neg():t,s,e,!0)):new n(NaN)};G.times=G.mul=function(s){var e,t,n,o,i,r,a,c,u,l=this,m=l.constructor,d=l.d,p=(s=new m(s)).d;if(s.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!s.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?s.s/0:s.s*0);for(t=bt(l.e/me)+bt(s.e/me),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,r=c,c=u,u=r),i=[],r=c+u,n=r;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%sn|0,e=a/sn|0;i[o]=(i[o]+e)%sn|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=Ji(i,t),be?oe(s,m.precision,m.rounding):s};G.toBinary=function(s,e){return ys(this,2,s,e)};G.toDecimalPlaces=G.toDP=function(s,e){var t=this,n=t.constructor;return t=new n(t),s===void 0?t:(Rt(s,0,_n),e===void 0?e=n.rounding:Rt(e,0,8),oe(t,s+t.e+1,e))};G.toExponential=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=pn(n,!0):(Rt(s,0,_n),e===void 0?e=o.rounding:Rt(e,0,8),n=oe(new o(n),s+1,e),t=pn(n,!0,s+1)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toFixed=function(s,e){var t,n,o=this,i=o.constructor;return s===void 0?t=pn(o):(Rt(s,0,_n),e===void 0?e=i.rounding:Rt(e,0,8),n=oe(new i(o),s+o.e+1,e),t=pn(n,!1,s+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};G.toFraction=function(s){var e,t,n,o,i,r,a,c,u,l,m,d,p=this,f=p.d,y=p.constructor;if(!f)return new y(p);if(u=t=new y(1),n=c=new y(0),e=new y(n),i=e.e=hu(f)-p.e-1,r=i%me,e.d[0]=ot(10,r<0?me+r:r),s==null)s=i>0?e:u;else{if(a=new y(s),!a.isInt()||a.lt(u))throw Error(Fn+a);s=a.gt(e)?i>0?e:u:a}for(be=!1,a=new y(mt(f)),l=y.precision,y.precision=i=f.length*me*2;m=_e(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(s)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=_e(s.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=_e(u,n,i,1).minus(p).abs().cmp(_e(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],y.precision=l,be=!0,d};G.toHexadecimal=G.toHex=function(s,e){return ys(this,16,s,e)};G.toNearest=function(s,e){var t=this,n=t.constructor;if(t=new n(t),s==null){if(!t.d)return t;s=new n(1),e=n.rounding}else{if(s=new n(s),e===void 0?e=n.rounding:Rt(e,0,8),!t.d)return s.s?t:s;if(!s.d)return s.s&&(s.s=t.s),s}return s.d[0]?(be=!1,t=_e(t,s,0,e,1).times(s),be=!0,oe(t)):(s.s=t.s,t=s),t};G.toNumber=function(){return+this};G.toOctal=function(s,e){return ys(this,8,s,e)};G.toPower=G.pow=function(s){var e,t,n,o,i,r,a=this,c=a.constructor,u=+(s=new c(s));if(!a.d||!s.d||!a.d[0]||!s.d[0])return new c(ot(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,s.eq(1))return oe(a,n,i);if(e=bt(s.e/me),e>=s.d.length-1&&(t=u<0?-u:u)<=im)return o=Tu(c,a,t,n),s.s<0?new c(1).div(o):oe(o,n,i);if(r=a.s,r<0){if(e<s.d.length-1)return new c(NaN);if((s.d[e]&1)==0&&(r=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=r,a}return t=ot(+a,u),e=t==0||!isFinite(t)?bt(u*(Math.log("0."+mt(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?r/0:0):(be=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=ps(s.times(vn(a,n+t)),n),o.d&&(o=oe(o,n+5,1),Xo(o.d,n,i)&&(e=n+10,o=oe(ps(s.times(vn(a,e+t)),e),e+5,1),+mt(o.d).slice(n+1,n+15)+1==1e14&&(o=oe(o,n+1,0)))),o.s=r,be=!0,c.rounding=i,oe(o,n,i))};G.toPrecision=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=pn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(Rt(s,1,_n),e===void 0?e=o.rounding:Rt(e,0,8),n=oe(new o(n),s,e),t=pn(n,s<=n.e||n.e<=o.toExpNeg,s)),n.isNeg()&&!n.isZero()?"-"+t:t};G.toSignificantDigits=G.toSD=function(s,e){var t=this,n=t.constructor;return s===void 0?(s=n.precision,e=n.rounding):(Rt(s,1,_n),e===void 0?e=n.rounding:Rt(e,0,8)),oe(new n(t),s,e)};G.toString=function(){var s=this,e=s.constructor,t=pn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()&&!s.isZero()?"-"+t:t};G.truncated=G.trunc=function(){return oe(new this.constructor(this),this.e+1,1)};G.valueOf=G.toJSON=function(){var s=this,e=s.constructor,t=pn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()?"-"+t:t};function mt(s){var e,t,n,o=s.length-1,i="",r=s[0];if(o>0){for(i+=r,e=1;e<o;e++)n=s[e]+"",t=me-n.length,t&&(i+=Mn(t)),i+=n;r=s[e],n=r+"",t=me-n.length,t&&(i+=Mn(t))}else if(r===0)return"0";for(;r%10===0;)r/=10;return i+r}function Rt(s,e,t){if(s!==~~s||s<e||s>t)throw Error(Fn+s)}function Xo(s,e,t,n){var o,i,r,a;for(i=s[0];i>=10;i/=10)--e;return--e<0?(e+=me,o=0):(o=Math.ceil((e+1)/me),e%=me),i=ot(10,me-e),a=s[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),r=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):r=(t<4&&a+1==i||t>3&&a+1==i/2)&&(s[o+1]/i/100|0)==ot(10,e-2)-1||(a==i/2||a==0)&&(s[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),r=(n||t<4)&&a==9999||!n&&t>3&&a==4999):r=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(s[o+1]/i/1e3|0)==ot(10,e-3)-1,r}function Hi(s,e,t){for(var n,o=[0],i,r=0,a=s.length;r<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=ls.indexOf(s.charAt(r++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function sm(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/er(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=Bo(s,1,e.times(o),new s(1));for(var i=t;i--;){var r=e.times(e);e=r.times(r).minus(r).times(8).plus(1)}return s.precision-=t,e}var _e=function(){function s(n,o,i){var r,a=0,c=n.length;for(n=n.slice();c--;)r=n[c]*o+a,n[c]=r%i|0,a=r/i|0;return a&&n.unshift(a),n}function e(n,o,i,r){var a,c;if(i!=r)c=i>r?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,r){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*r+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,r,a,c){var u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I,C,L,N=n.constructor,O=n.s==o.s?1:-1,R=n.d,v=o.d;if(!R||!R[0]||!v||!v[0])return new N(!n.s||!o.s||(R?v&&R[0]==v[0]:!v)?NaN:R&&R[0]==0||!v?O*0:O/0);for(c?(p=1,l=n.e-o.e):(c=sn,p=me,l=bt(n.e/p)-bt(o.e/p)),C=v.length,K=R.length,g=new N(O),A=g.d=[],m=0;v[m]==(R[m]||0);m++);if(v[m]>(R[m]||0)&&l--,i==null?(w=i=N.precision,r=N.rounding):a?w=i+(n.e-o.e)+1:w=i,w<0)A.push(1),f=!0;else{if(w=w/p+2|0,m=0,C==1){for(d=0,v=v[0],w++;(m<K||d)&&w--;m++)x=d*c+(R[m]||0),A[m]=x/v|0,d=x%v|0;f=d||m<K}else{for(d=c/(v[0]+1)|0,d>1&&(v=s(v,d,c),R=s(R,d,c),C=v.length,K=R.length),B=C,k=R.slice(0,C),T=k.length;T<C;)k[T++]=0;L=v.slice(),L.unshift(0),I=v[0],v[1]>=c/2&&++I;do d=0,u=e(v,k,C,T),u<0?(h=k[0],C!=T&&(h=h*c+(k[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(v,d,c),b=y.length,T=k.length,u=e(y,k,b,T),u==1&&(d--,t(y,C<b?L:v,b,c))):(d==0&&(u=d=1),y=v.slice()),b=y.length,b<T&&y.unshift(0),t(k,y,T,c),u==-1&&(T=k.length,u=e(v,k,C,T),u<1&&(d++,t(k,C<T?L:v,T,c))),T=k.length):u===0&&(d++,k=[0]),A[m++]=d,u&&k[0]?k[T++]=R[B]||0:(k=[R[B]],T=1);while((B++<K||k[0]!==void 0)&&w--);f=k[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,gu=f;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,oe(g,a?i+g.e+1:i,r,f)}return g}}();function oe(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor;e:if(e!=null){if(m=s.d,!m)return s;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=me,r=e,l=m[d=0],c=l/ot(10,o-r-1)%10|0;else if(d=Math.ceil((i+1)/me),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=me,r=i-me+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=me,r=i-me+o,c=r<0?0:l/ot(10,o-r-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(r<0?l:l%ot(10,o-r-1)),u=t<4?(c||n)&&(t==0||t==(s.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?r>0?l/ot(10,o-r):0:m[d-1])%10&1||t==(s.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=s.e+1,m[0]=ot(10,(me-e%me)%me),s.e=-e||0):m[0]=s.e=0,s;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=ot(10,me-i),m[d]=r>0?(l/ot(10,o-r)%ot(10,r)|0)*a:0),u)for(;;)if(d==0){for(i=1,r=m[0];r>=10;r/=10)i++;for(r=m[0]+=a,a=1;r>=10;r/=10)a++;i!=a&&(s.e++,m[0]==sn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=sn)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return be&&(s.e>p.maxE?(s.d=null,s.e=NaN):s.e<p.minE&&(s.e=0,s.d=[0])),s}function pn(s,e,t){if(!s.isFinite())return Bu(s);var n,o=s.e,i=mt(s.d),r=i.length;return e?(t&&(n=t-r)>0?i=i.charAt(0)+"."+i.slice(1)+Mn(n):r>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(s.e<0?"e":"e+")+s.e):o<0?(i="0."+Mn(-o-1)+i,t&&(n=t-r)>0&&(i+=Mn(n))):o>=r?(i+=Mn(o+1-r),t&&(n=t-o-1)>0&&(i=i+"."+Mn(n))):((n=o+1)<r&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-r)>0&&(o+1===r&&(i+="."),i+=Mn(n))),i}function Ji(s,e){var t=s[0];for(e*=me;t>=10;t/=10)e++;return e}function Zi(s,e,t){if(e>rm)throw be=!0,t&&(s.precision=t),Error(Pu);return oe(new s(Qi),e,1,!0)}function rn(s,e,t){if(e>ds)throw Error(Pu);return oe(new s(ji),e,t,!0)}function hu(s){var e=s.length-1,t=e*me+1;if(e=s[e],e){for(;e%10==0;e/=10)t--;for(e=s[0];e>=10;e/=10)t++}return t}function Mn(s){for(var e="";s--;)e+="0";return e}function Tu(s,e,t,n){var o,i=new s(1),r=Math.ceil(n/me+4);for(be=!1;;){if(t%2&&(i=i.times(e),yu(i.d,r)&&(o=!0)),t=bt(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),yu(e.d,r)}return be=!0,i}function fu(s){return s.d[s.d.length-1]&1}function Iu(s,e,t){for(var n,o=new s(e[0]),i=0;++i<e.length;)if(n=new s(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function ps(s,e){var t,n,o,i,r,a,c,u=0,l=0,m=0,d=s.constructor,p=d.rounding,f=d.precision;if(!s.d||!s.d[0]||s.e>17)return new d(s.d?s.d[0]?s.s<0?0:1/0:1:s.s?s.s<0?0:s:0/0);for(e==null?(be=!1,c=f):c=e,a=new d(.03125);s.e>-2;)s=s.times(a),m+=5;for(n=Math.log(ot(2,m))/Math.LN10*2+5|0,c+=n,t=i=r=new d(1),d.precision=c;;){if(i=oe(i.times(s),c,1),t=t.times(++l),a=r.plus(_e(i,t,c,1)),mt(a.d).slice(0,c)===mt(r.d).slice(0,c)){for(o=m;o--;)r=oe(r.times(r),c,1);if(e==null)if(u<3&&Xo(r.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return oe(r,d.precision=f,p,be=!0);else return d.precision=f,r}r=a}}function vn(s,e){var t,n,o,i,r,a,c,u,l,m,d,p=1,f=10,y=s,b=y.d,g=y.constructor,A=g.rounding,k=g.precision;if(y.s<0||!b||!b[0]||!y.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:y.s!=1?NaN:b?0:y);if(e==null?(be=!1,l=k):l=e,g.precision=l+=f,t=mt(b),n=t.charAt(0),Math.abs(i=y.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)y=y.times(s),t=mt(y.d),n=t.charAt(0),p++;i=y.e,n>1?(y=new g("0."+t),i++):y=new g(n+"."+t.slice(1))}else return u=Zi(g,l+2,k).times(i+""),y=vn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?oe(y,k,A,be=!0):y;for(m=y,c=r=y=_e(y.minus(1),y.plus(1),l,1),d=oe(y.times(y),l,1),o=3;;){if(r=oe(r.times(d),l,1),u=c.plus(_e(r,new g(o),l,1)),mt(u.d).slice(0,l)===mt(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(Zi(g,l+2,k).times(i+""))),c=_e(c,new g(p),l,1),e==null)if(Xo(c.d,l-f,A,a))g.precision=l+=f,u=r=y=_e(m.minus(1),m.plus(1),l,1),d=oe(y.times(y),l,1),o=a=1;else return oe(c,g.precision=k,A,be=!0);else return g.precision=k,c;c=u,o+=2}}function Bu(s){return String(s.s*s.s/0)}function fs(s,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,s.e=t=t-n-1,s.d=[],n=(t+1)%me,t<0&&(n+=me),n<o){for(n&&s.d.push(+e.slice(0,n)),o-=me;n<o;)s.d.push(+e.slice(n,n+=me));e=e.slice(n),n=me-e.length}else n-=o;for(;n--;)e+="0";s.d.push(+e),be&&(s.e>s.constructor.maxE?(s.d=null,s.e=NaN):s.e<s.constructor.minE&&(s.e=0,s.d=[0]))}else s.e=0,s.d=[0];return s}function am(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ku.test(e))return fs(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(nm.test(e))t=16,e=e.toLowerCase();else if(tm.test(e))t=2;else if(om.test(e))t=8;else throw Error(Fn+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),r=i>=0,n=s.constructor,r&&(e=e.replace(".",""),a=e.length,i=a-i,o=Tu(n,new n(t),i,i*2)),u=Hi(e,t,sn),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=Ji(u,l),s.d=u,be=!1,r&&(s=_e(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?ot(2,c):zo.pow(2,c))),be=!0,s)}function um(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bo(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/er(5,t)),e=Bo(s,2,e,e);for(var o,i=new s(5),r=new s(16),a=new s(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(r.times(o).minus(a))));return e}function Bo(s,e,t,n,o){var i,r,a,c,u=1,l=s.precision,m=Math.ceil(l/me);for(be=!1,c=t.times(t),a=new s(n);;){if(r=_e(a.times(c),new s(e++*e++),l,1),a=o?n.plus(r):n.minus(r),n=_e(r.times(c),new s(e++*e++),l,1),r=a.plus(n),r.d[m]!==void 0){for(i=m;r.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=r,r=i,u++}return be=!0,r.d.length=m+1,r}function er(s,e){for(var t=s;--e;)t*=s;return t}function xu(s,e){var t,n=e.s<0,o=rn(s,s.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return wn=n?4:1,e;if(t=e.divToInt(o),t.isZero())wn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return wn=fu(t)?n?2:3:n?4:1,e;wn=fu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function ys(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(Rt(t,1,_n),n===void 0?n=p.rounding:Rt(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Bu(s);else{for(l=pn(s),r=l.indexOf("."),f?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,r>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-r,d.d=Hi(pn(d),10,o),d.e=d.d.length),m=Hi(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(r<0?i--:(s=new p(s),s.d=m,s.e=i,s=_e(s,d,t,n,0,o),m=s.d,i=s.e,u=gu),r=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(r!==void 0||u)&&(n===0||n===(s.s<0?3:2)):r>a||r===a&&(n===4||u||n===6&&m[t-1]&1||n===(s.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(r=0,l="";r<c;r++)l+=ls.charAt(m[r]);if(f){if(c>1)if(e==16||e==8){for(r=e==16?4:3,--c;c%r;c++)l+="0";for(m=Hi(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=ls.charAt(m[r])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return s.s<0?"-"+l:l}function yu(s,e){if(s.length>e)return s.length=e,!0}function cm(s){return new this(s).abs()}function lm(s){return new this(s).acos()}function mm(s){return new this(s).acosh()}function dm(s,e){return new this(s).plus(e)}function pm(s){return new this(s).asin()}function fm(s){return new this(s).asinh()}function ym(s){return new this(s).atan()}function bm(s){return new this(s).atanh()}function gm(s,e){s=new this(s),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!s.s||!e.s?t=new this(NaN):!s.d&&!e.d?(t=rn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?rn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=rn(this,i,1).times(.5),t.s=s.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(_e(s,e,i,1)),e=rn(this,i,1),this.precision=n,this.rounding=o,t=s.s<0?t.minus(e):t.plus(e)):t=this.atan(_e(s,e,i,1)),t}function Pm(s){return new this(s).cbrt()}function Am(s){return oe(s=new this(s),s.e+1,2)}function wm(s,e,t){return new this(s).clamp(e,t)}function km(s){if(!s||typeof s!="object")throw Error($i+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,_n,"rounding",0,8,"toExpNeg",-Io,0,"toExpPos",0,Io,"maxE",0,Io,"minE",-Io,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=ms[t]),(n=s[t])!==void 0)if(bt(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Fn+t+": "+n);if(t="crypto",o&&(this[t]=ms[t]),(n=s[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Au);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function hm(s){return new this(s).cos()}function Tm(s){return new this(s).cosh()}function Su(s){var e,t,n;function o(i){var r,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,bu(i)){u.s=i.s,be?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(r=0,a=i;a>=10;a/=10)r++;be?r>o.maxE?(u.e=NaN,u.d=null):r<o.minE?(u.e=0,u.d=[0]):(u.e=r,u.d=[i]):(u.e=r,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return fs(u,i.toString())}else if(c!=="string")throw Error(Fn+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),ku.test(i)?fs(u,i):am(u,i)}if(o.prototype=G,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=km,o.clone=Su,o.isDecimal=bu,o.abs=cm,o.acos=lm,o.acosh=mm,o.add=dm,o.asin=pm,o.asinh=fm,o.atan=ym,o.atanh=bm,o.atan2=gm,o.cbrt=Pm,o.ceil=Am,o.clamp=wm,o.cos=hm,o.cosh=Tm,o.div=Im,o.exp=Bm,o.floor=xm,o.hypot=Sm,o.ln=Km,o.log=Cm,o.log10=Lm,o.log2=Rm,o.max=Nm,o.min=Om,o.mod=Mm,o.mul=vm,o.pow=Fm,o.random=_m,o.round=Em,o.sign=Vm,o.sin=Wm,o.sinh=Dm,o.sqrt=qm,o.sub=Um,o.sum=Gm,o.tan=Xm,o.tanh=zm,o.trunc=Ym,s===void 0&&(s={}),s&&s.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)s.hasOwnProperty(t=n[e++])||(s[t]=this[t]);return o.config(s),o}function Im(s,e){return new this(s).div(e)}function Bm(s){return new this(s).exp()}function xm(s){return oe(s=new this(s),s.e+1,3)}function Sm(){var s,e,t=new this(0);for(be=!1,s=0;s<arguments.length;)if(e=new this(arguments[s++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return be=!0,new this(1/0);t=e}return be=!0,t.sqrt()}function bu(s){return s instanceof zo||s&&s.toStringTag===wu||!1}function Km(s){return new this(s).ln()}function Cm(s,e){return new this(s).log(e)}function Rm(s){return new this(s).log(2)}function Lm(s){return new this(s).log(10)}function Nm(){return Iu(this,arguments,"lt")}function Om(){return Iu(this,arguments,"gt")}function Mm(s,e){return new this(s).mod(e)}function vm(s,e){return new this(s).mul(e)}function Fm(s,e){return new this(s).pow(e)}function _m(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:Rt(s,1,_n),n=Math.ceil(s/me),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(Au);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],s%=me,n&&s&&(o=ot(10,me-s),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=me)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<me&&(t-=me-n)}return r.e=t,r.d=a,r}function Em(s){return oe(s=new this(s),s.e+1,this.rounding)}function Vm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function Wm(s){return new this(s).sin()}function Dm(s){return new this(s).sinh()}function qm(s){return new this(s).sqrt()}function Um(s,e){return new this(s).sub(e)}function Gm(){var s=0,e=arguments,t=new this(e[s]);for(be=!1;t.s&&++s<e.length;)t=t.plus(e[s]);return be=!0,oe(t,this.precision,this.rounding)}function Xm(s){return new this(s).tan()}function zm(s){return new this(s).tanh()}function Ym(s){return oe(s=new this(s),s.e+1,1)}G[Symbol.for("nodejs.util.inspect.custom")]=G.toString;G[Symbol.toStringTag]="Decimal";var zo=G.constructor=Su(ms);Qi=new zo(Qi);ji=new zo(ji);var M=zo;import td from"big.js";import or from"bn.js";import Hm from"toformat";var Qm=Hm,Yo=Qm;import nr from"big.js";import Zm from"bn.js";import $m from"decimal.js-light";import Ho from"bn.js";var Ku=9007199254740991;function ne(s){let e=we("Raydium_parseBigNumberish");if(s instanceof Ho)return s;if(typeof s=="string"){if(s.match(/^-?[0-9]+$/))return new Ho(s);e.logWithError(`invalid BigNumberish string: ${s}`)}return typeof s=="number"?(s%1&&e.logWithError(`BigNumberish number underflow: ${s}`),(s>=Ku||s<=-Ku)&&e.logWithError(`BigNumberish number overflow: ${s}`),new Ho(String(s))):typeof s=="bigint"?new Ho(s.toString()):(e.error(`invalid BigNumberish value: ${s}`),new Ho(0))}var tr=we("module/fraction"),bs=Yo(nr),Qo=Yo($m),Jm={[0]:Qo.ROUND_DOWN,[1]:Qo.ROUND_HALF_UP,[2]:Qo.ROUND_UP},ed={[0]:nr.roundDown,[1]:nr.roundHalfUp,[2]:nr.roundUp},Ke=class{constructor(e,t=new Zm(1)){this.numerator=ne(e),this.denominator=ne(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ke(this.denominator,this.numerator)}add(e){let t=e instanceof Ke?e:new Ke(ne(e));return this.denominator.eq(t.denominator)?new Ke(this.numerator.add(t.numerator),this.denominator):new Ke(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ke?e:new Ke(ne(e));return this.denominator.eq(t.denominator)?new Ke(this.numerator.sub(t.numerator),this.denominator):new Ke(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ke?e:new Ke(ne(e));return new Ke(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ke?e:new Ke(ne(e));return new Ke(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||tr.logWithError(`${e} is not an integer.`),e<=0&&tr.logWithError(`${e} is not positive.`),Qo.set({precision:e+1,rounding:Jm[n]});let o=new Qo(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)||tr.logWithError(`${e} is not an integer.`),e<0&&tr.logWithError(`${e} is negative.`),bs.DP=e,bs.RM=ed[n]||1,new bs(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var nd=we("Raydium_amount"),Cu=Yo(td);function od(s,e){let t="0",n="0";if(s.includes(".")){let o=s.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):nd.logWithError(`invalid number string, num: ${s}`)}else t=s;return[t,n.slice(0,e)||n]}var Re=class extends Ke{constructor(t,n,o=!0,i){let r=new or(0),a=gs.pow(new or(t.decimals));if(o)r=ne(n);else{let c=new or(0),u=new or(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=od(n.toString(),t.decimals);c=ne(l),u=ne(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=we(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 Re(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Re(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 Cu.DP=this.token.decimals,new Cu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ru}from"@solana/spl-token";var En={chainId:101,address:id.default.toBase58(),programId:Ru.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},gt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ru.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 hs}from"@solana/web3.js";import{PublicKey as Xe,SystemProgram as Lu,SYSVAR_RENT_PUBKEY as rd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";function S({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var Ps=[S({pubkey:sd,isWritable:!1}),S({pubkey:Lu.programId,isWritable:!1}),S({pubkey:rd,isWritable:!1})];function As({publicKey:s,transformSol:e}){let t=ws(s.toString());if(t instanceof Xe)return e&&t.equals(st)?Z:t;if(e&&t.toString()===st.toBase58())return Z;if(typeof t=="string"){if(t===Xe.default.toBase58())return Xe.default;try{return new Xe(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ws(s){try{return new Xe(s)}catch{return s}}var ir=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Vn=new Xe("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),dt=new Xe("SysvarRent111111111111111111111111111111111"),Nu=new Xe("SysvarC1ock11111111111111111111111111111111"),an=new Xe("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),ad=new Xe("Sysvar1nstructions1111111111111111111111111"),ks=Lu.programId,Gy=new Xe("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Xy=new Xe("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),zy=new Xe("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Yy=new Xe("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Hy=new Xe("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Qy=new Xe("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),jy=new Xe("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Zy=new Xe("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),$y=new Xe("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Jy=new Xe("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),eb=new Xe("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Xe("So11111111111111111111111111111111111111112"),st=Xe.default;function yt(s){return As({publicKey:s,transformSol:!0})}var Ts=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===st.toBase58()||e instanceof hs&&st.equals(e)){this.decimals=gt.decimals,this.symbol=gt.symbol,this.name=gt.name,this.mint=new hs(gt.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?hs.default:As({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},ze=Ts;ze.WSOL=new Ts(q(_({},gt),{mint:gt.address}));var Is=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},rr=Is;rr.SOL=new Is(En);import ud from"bn.js";var Ou=new Ke(new ud(100)),at=class extends Ke{toSignificant(e=5,t,n){return this.mul(Ou).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ou).toFixed(e,t,n)}};var cd=we("Raydium_price"),Lt=class extends Ke{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ke(Bs(n.decimals),Bs(o.decimals))}get raw(){return new Ke(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Lt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&cd.logWithError("mul token not equals");let n=super.mul(t);return new Lt({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)}};var Nt=new fn(0),Mu=new fn(1),Ub=new fn(2),Gb=new fn(3),Xb=new fn(5),gs=new fn(10),zb=new fn(100),Yb=new fn(1e3),Hb=new fn(1e4);function Bs(s){return gs.pow(ne(s))}function sr(s,e){let t=s.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function jo(s,e,t){return s.mul(e).add(t).sub(new fn(1)).div(t)}function ar(s,e,t){return s.mul(e).div(t)}function cs(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var un=class{constructor(e){this._owner=e}get publicKey(){return un.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return un.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return un.isKeyPair(this._owner)}get isPublicKey(){return un.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!un.isKeyPair(e)}};import{PublicKey as yd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as bd}from"@solana/spl-token";import{ComputeBudgetProgram as vu,Keypair as _u,PublicKey as ld,Transaction as Eu,TransactionMessage as md,VersionedTransaction as Vu}from"@solana/web3.js";var X={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{TOKEN_PROGRAM_ID as dd}from"@solana/spl-token";var Fu=we("Raydium_txUtil"),Wu=1644;function ur(s){let e=[],t=[];return s.microLamports&&(e.push(vu.setComputeUnitPrice({microLamports:s.microLamports})),t.push(X.SetComputeUnitPrice)),s.units&&(e.push(vu.setComputeUnitLimit({units:s.units})),t.push(X.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function xo(s,e){var n,o;let t=e!=null?e:"confirmed";return(o=await((n=s.getLatestBlockhash)==null?void 0:n.call(s,{commitment:t})))==null?void 0:o.blockhash}async function cr(s,e){return s.getSignatureStatuses([e]),new Promise((t,n)=>{let o=setTimeout(n,6e4);s.onSignature(e,i=>{if(clearTimeout(o),!i.err){t("");return}n(Object.assign(i.err,{txId:e}))},"confirmed")})}function xs(s,e){s.length<1&&Fu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&Fu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Eu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Wu}catch{return!1}}function fe(s,e){let[t,n]=ld.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function Zo({instructions:s,payer:e,signers:t}){return xs(s,[e,...t])}function $o({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=_u.generate().publicKey.toString()}){let i=new md({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Vu(i).serialize()).toString("base64").length<Wu}catch{return!1}}var pd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),fd=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof Vu&&(e=pd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function Jn(s){let e=[];return s.forEach(t=>{t instanceof Eu&&(t.recentBlockhash||(t.recentBlockhash=dd.toBase58()),t.feePayer||(t.feePayer=_u.generate().publicKey)),e.push(fd(t))}),console.log("simulate tx string:",e),e}function ee(s,e,t){return fe([s.toBuffer(),(t!=null?t:bd).toBuffer(),e.toBuffer()],new yd("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ie}from"@solana/web3.js";var Du=new ie("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),qu=new ie("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Uu=new ie("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jo=new ie("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),yg=new ie("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Gu=new ie("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ss=new ie("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),lr=new ie("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),bg=new ie("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Xu=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),eo=new ie("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ei=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),mr=new ie("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),to=new ie("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),gg=new ie("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),zu=new ie("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),gd=new ie("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Pd=new ie("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ad=new ie("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),wd=new ie("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),no=new ie("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Yu=new ie("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Pg=new ie("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),dr=new ie("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),pr=new ie("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),ut=new ie("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Ag=new ie("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),wg=new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),kg=new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),hg=new ie("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Tg=new ie("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ti={IDO_PROGRAM_ID_V1:gd,IDO_PROGRAM_ID_V2:Pd,IDO_PROGRAM_ID_V3:Ad,IDO_PROGRAM_ID_V4:wd};var kn={OPEN_BOOK_PROGRAM:new ie("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ie("Ray1111111111111111111111111111111111111111"),AMM_V4:new ie("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ie("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ie("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ie("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ie("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ie("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ie("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ie("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ie("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ie.default,Router:new ie("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ie("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ie("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ie("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ie("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ie("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ie("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ie("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ie("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ie("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ie("Ray1111111111111111111111111111111111111111")};import We from"bn.js";var yn=1e4;function Le(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(_({},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 We(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===yn){let c=new We(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new We(yn)),new We(yn-i.transferFeeBasisPoints)),u=new We(i.maximumFee.toString()),l=c.sub(s).gt(u)?s.add(u):c,m=Wn(l.mul(new We(i.transferFeeBasisPoints)),new We(yn)),d=m.gt(r)?r:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Wn(s.mul(new We(i.transferFeeBasisPoints)),new We(yn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function cn(s,e){return s===void 0?e:e===void 0?s:Math.min(s,e)}function Wn(s,e){let{div:t,mod:n}=s.divmod(e);return n.gt(new We(0))?t.add(new We(1)):t}function oo(s,e){if(s.isZero())return new We(0);let t=s.div(e);return t.isZero()?new We(1):s.mod(e).gt(new We(0))?t.add(new We(1)):t}function Ks(s,e,t){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Wn(s.mul(new We(o.transferFeeBasisPoints)),new We(yn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function Cs(s,e,t){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let n=Math.floor(t/432e3),o=n<e.newerTransferFee.epoch?e.olderTransferFee:e.newerTransferFee,i=new We(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===yn){let a=new We(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new We(yn)),new We(yn-o.transferFeeBasisPoints)),c=new We(o.maximumFee.toString()),u=a.sub(s).gt(c)?s.add(c):a,l=Wn(u.mul(new We(o.transferFeeBasisPoints)),new We(yn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Rs,AddressLookupTableAccount as Co}from"@solana/web3.js";async function Ls({connection:s,address:e,cluster:t="mainnet"}){let n=await on(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Rs(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new Co({key:a,state:Co.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Ko[a.toString()]=c:So[a.toString()]=c}return o}var So={},Ns=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(So[e])return So;let t=new Rs(e),n=await s.getAccountInfo(t);return n&&(So[e]=new Co({key:t,state:Co.deserialize(n.data)})),So},Ko={},Os=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Ko[e])return Ko;let t=new Rs(e),n=await s.getAccountInfo(t);return n&&(Ko[e]=new Co({key:t,state:Co.deserialize(n.data)})),Ko};import{PublicKey as Ro,sendAndConfirmTransaction as Ms,SystemProgram as kd,Transaction as ni,TransactionMessage as oi,VersionedTransaction as ii}from"@solana/web3.js";import hd from"axios";var fr=2e3,yr=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 hd.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}=ur(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(kd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Ro(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(X.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!==Ro.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(_({},t||{})):this.build(t)}build(e){var n;let t=new ni;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 l;let{recentBlockHash:i,skipPreflight:r=!0,sendAndConfirm:a,notSendToRpc:c}=o||{},u=i!=null?i:await xo(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),Jn([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Ms(this.connection,t,this.signers.find(d=>d.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:r}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:r}),signedTx:t};if(this.signAllTransactions){let m=await this.signAllTransactions([t]);if(this.signers.length)for(let d of m)try{d.sign(...this.signers)}catch{}return{txId:c?"":await this.connection.sendRawTransaction(m[0].serialize(),{skipPreflight:r}),signedTx:m[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),r=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:r,signers:a,instructionTypes:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:y=!0}=l||{},b=f!=null?f:await xo(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let A=[],k=0;for(let T of r){if(++k,k<=p)continue;let h=await Ms(this.connection,T,this.signers.find(w=>w.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});A.push(h)}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:y})))),signedTxs:r}}if(this.signAllTransactions){let A=r.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));Jn(A);let k=await this.signAllTransactions(A);if(m){let T=0,h=[],w=async()=>{if(!k[T])return;let x=await this.connection.sendRawTransaction(k[T].serialize(),{skipPreflight:y});h.push({txId:x,status:"sent",signedTx:k[T]}),d==null||d([...h]),T++;let B=!1,K=null,I=null,C=L=>{K!==null&&clearInterval(K),I!==null&&this.connection.removeSignatureListener(I);let N=h.findIndex(O=>O.txId===x);if(N>-1){if(h[N].status==="error"||h[N].status==="success")return;h[N].status=L.err?"error":"success"}d==null||d([...h]),L.err||w()};this.loopMultiTxStatus&&(K=setInterval(async()=>{var L;if(B){clearInterval(K);return}try{let N=await this.connection.getTransaction(x,{commitment:"confirmed",maxSupportedTransactionVersion:0});N&&(B=!0,clearInterval(K),C({err:((L=N.meta)==null?void 0:L.err)||null}),console.log("tx status from getTransaction:",x))}catch(N){B=!0,clearInterval(K),console.error("getTransaction timeout:",N,x)}},fr)),I=this.connection.onSignature(x,L=>{if(B){this.connection.removeSignatureListener(I);return}B=!0,C(L)},"confirmed"),this.connection.getSignatureStatus(x)};return await w(),{txIds:h.map(x=>x.txId),signedTxs:k}}else{let T=[];for(let h=0;h<k.length;h+=1){let w=await this.connection.sendRawTransaction(k[h].serialize(),{skipPreflight:y});T.push(w)}return{txIds:T,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var y;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o,recentBlockhash:i}=f,r=Ge(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=_(_({},this.cluster==="devnet"?await Os(this.connection):await Ns(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Ro(b));let l=await Ls({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Ro.default.toBase58():i!=null?i:await xo(this.connection,this.blockhashCommitment),d=new oi({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((y=this.owner)==null?void 0:y.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ii(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var T;let{skipPreflight:g=!0,sendAndConfirm:A,notSendToRpc:k}=b||{};if(Jn([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await cr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let w of h)try{w.sign(this.signers)}catch{}return{txId:k?"":await this.connection.sendTransaction(h[0],{skipPreflight:g}),signedTx:h[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),r=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),r.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:r,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&r.forEach(b=>b.message.recentBlockhash=p),Jn(r),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of r){let A=await this.connection.sendTransaction(g,{skipPreflight:f});await cr(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:f}))),signedTxs:r}}if(this.signAllTransactions){let b=await this.signAllTransactions(r);if(m){let g=0,A=[],k=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});A.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++;let h=!1,w=null,x=null,B=K=>{w!==null&&clearInterval(w),x!==null&&this.connection.removeSignatureListener(x);let I=A.findIndex(C=>C.txId===T);if(I>-1){if(A[I].status==="error"||A[I].status==="success")return;A[I].status=K.err?"error":"success"}d==null||d([...A]),K.err||k()};this.loopMultiTxStatus&&(w=setInterval(async()=>{var K;if(h){clearInterval(w);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(w),B({err:((K=I.meta)==null?void 0:K.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(w),console.error("getTransaction timeout:",I,T)}},fr)),x=this.connection.onSignature(T,K=>{if(h){this.connection.removeSignatureListener(x);return}h=!0,B(K)},"confirmed"),this.connection.getSignatureStatus(T)};return k(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let k=await this.connection.sendTransaction(b[A],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,o=Ge(m,["splitIns","computeBudgetConfig"]),i=n?ur(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(_({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],y=n?[...i.instructions,...f]:f,g=[...new Set(f.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(A=>new Ro(A));if(p!==t[l]&&u.length<12&&(Zo({instructions:y,payer:this.feePayer,signers:g})||Zo({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,Zo({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ni().add(...i.instructions,...u)):a.push(new ni().add(...u)),c.push(Array.from(new Set(u.map(A=>A.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(A=>r[A]).filter(A=>A!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(y=>y.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(y=>r[y]).filter(y=>y!==void 0);Zo({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new ni().add(...i.instructions,...u)):a.push(new ni().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var T;let{sequentially:f,onTxUpdate:y,skipTxCount:b=0,recentBlockHash:g,skipPreflight:A=!0}=p||{},k=g!=null?g:await xo(this.connection,this.blockhashCommitment);if(a.forEach(async(h,w)=>{h.recentBlockhash=k,c[w].length&&h.sign(...c[w])}),Jn(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,w=[];for(let x of a){if(++h,h<=b){w.push("tx skipped");continue}let B=await Ms(this.connection,x,this.signers.find(K=>K.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:A});w.push(B)}return{txIds:w,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:A}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),w=[...a.slice(0,b),...h];if(f){let x=0,B=[],K=async()=>{if(!w[x])return;x<b&&(B.push({txId:"",status:"success",signedTx:w[x]}),y==null||y([...B]),x++,K());let I=await this.connection.sendRawTransaction(w[x].serialize(),{skipPreflight:A});B.push({txId:I,status:"sent",signedTx:w[x]}),y==null||y([...B]),x++;let C=!1,L=null,N=null,O=R=>{L!==null&&clearInterval(L),N!==null&&this.connection.removeSignatureListener(N);let v=B.findIndex(z=>z.txId===I);if(v>-1){if(B[v].status==="error"||B[v].status==="success")return;B[v].status=R.err?"error":"success"}y==null||y([...B]),R.err||K()};this.loopMultiTxStatus&&(L=setInterval(async()=>{var R;if(C){clearInterval(L);return}try{let v=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});v&&(C=!0,clearInterval(L),O({err:((R=v.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(v){C=!0,clearInterval(L),console.error("getTransaction timeout:",v,I)}},fr)),N=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(N);return}C=!0,O(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await K(),{txIds:B.map(I=>I.txId),signedTxs:w}}else{let x=[];for(let B=0;B<w.length;B+=1){let K=await this.connection.sendRawTransaction(w[B].serialize(),{skipPreflight:A});x.push(K)}return{txIds:x,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var k;let A=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[]}=A,r=Ge(A,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=_(_({},this.cluster==="devnet"?await Os(this.connection):await Ns(this.connection)),o),c=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let T of c)a[T]===void 0&&u.push(new Ro(T));let l=await Ls({connection:this.connection,address:u});for(let[T,h]of Object.entries(l))a[T]=h;let m=t?ur(t):{instructions:[],instructionTypes:[]},d=await xo(this.connection,this.blockhashCommitment),p=this.signers.reduce((T,h)=>q(_({},T),{[h.publicKey.toBase58()]:h}),{}),f=[],y=[],b=[],g=0;if(this.allInstructions.forEach(T=>{let h=[...b,T],w=t?[...m.instructions,...h]:h;if(T!==n[g]&&b.length<12&&($o({instructions:w,payer:this.feePayer,lookupTableAddressAccount:a})||$o({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})))b.push(T);else{if(b.length===0)throw Error("item ins too big");g+=T===n[g]?1:0;let x={};for(let B of[...new Set(c)])a[B]!==void 0&&(x[B]=a[B]);if(t&&$o({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let B=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ii(B))}else{let B=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ii(B))}y.push(Array.from(new Set(b.map(B=>B.keys.filter(K=>K.isSigner).map(K=>K.pubkey.toString())).flat())).map(B=>p[B]).filter(B=>B!==void 0)),b=[T]}}),b.length>0){let h=[...new Set(b.map(w=>w.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(w=>p[w]).filter(w=>w!==void 0);if(t&&$o({instructions:[...m.instructions,...b],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let w=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...b]}).compileToV0Message(Object.values(a));f.push(new ii(w))}else{let w=new oi({payerKey:this.feePayer,recentBlockhash:d,instructions:[...b]}).compileToV0Message(Object.values(a));f.push(new ii(w))}y.push(h)}return(k=this.owner)!=null&&k.signer&&y.forEach(T=>{T.some(h=>h.publicKey.equals(this.owner.publicKey))||T.push(this.owner.signer)}),f.forEach((T,h)=>{T.sign(y[h])}),{builder:this,transactions:f,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async T=>{var I;let{sequentially:h,onTxUpdate:w,skipTxCount:x=0,recentBlockHash:B,skipPreflight:K=!0}=T||{};if(f.map(async(C,L)=>{y[L].length&&C.sign(y[L]),B&&(C.message.recentBlockhash=B)}),Jn(f),(I=this.owner)!=null&&I.isKeyPair){if(h){let C=0,L=[];for(let N of f){if(++C,C<=x){console.log("skip tx: ",C),L.push("tx skipped");continue}let O=await this.connection.sendTransaction(N,{skipPreflight:K});await cr(this.connection,O),L.push(O)}return{txIds:L,signedTxs:f}}return{txIds:await Promise.all(f.map(async C=>await this.connection.sendTransaction(C,{skipPreflight:K}))),signedTxs:f}}if(this.signAllTransactions){let C=await this.signAllTransactions(f.slice(x,f.length)),L=[...f.slice(0,x),...C];if(h){let N=0,O=[],R=async()=>{if(!L[N])return;if(N<x){O.push({txId:"",status:"success",signedTx:L[N]}),w==null||w([...O]),N++,R();return}let v=await this.connection.sendTransaction(L[N],{skipPreflight:K});O.push({txId:v,status:"sent",signedTx:L[N]}),w==null||w([...O]),N++;let z=!1,H=null,ce=null,se=ae=>{H!==null&&clearInterval(H),ce!==null&&this.connection.removeSignatureListener(ce);let ge=O.findIndex(pe=>pe.txId===v);if(ge>-1){if(O[ge].status==="error"||O[ge].status==="success")return;O[ge].status=ae.err?"error":"success"}w==null||w([...O]),ae.err||R()};this.loopMultiTxStatus&&(H=setInterval(async()=>{var ae;if(z){clearInterval(H);return}try{let ge=await this.connection.getTransaction(v,{commitment:"confirmed",maxSupportedTransactionVersion:0});ge&&(z=!0,clearInterval(H),se({err:((ae=ge.meta)==null?void 0:ae.err)||null}),console.log("tx status from getTransaction:",v))}catch(ge){z=!0,clearInterval(H),console.error("getTransaction timeout:",ge,v)}},fr)),ce=this.connection.onSignature(v,ae=>{if(z){this.connection.removeSignatureListener(ce);return}z=!0,se(ae)},"confirmed"),this.connection.getSignatureStatus(v)};return R(),{txIds:[],signedTxs:L}}else{let N=[];for(let O=0;O<L.length;O+=1){let R=await this.connection.sendTransaction(L[O],{skipPreflight:K});N.push(R)}return{txIds:N,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};import{PublicKey as Td}from"@solana/web3.js";import Id from"bn.js";function Bd(s){return typeof s=="object"&&s!==null&&![ze,Re,Td,Ke,Id,Lt,at].some(e=>typeof e=="object"&&s instanceof e)}function pt(s){return typeof s=="string"?ws(s):Array.isArray(s)?s.map(e=>pt(e)):Bd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,pt(t)])):s}import xd from"bn.js";var Ot=new xd(1e6);var ct={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",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",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/v1/tagged/verified",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",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_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",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"},Hu=q(_({},ct),{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",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 Qu="ray_tab_hash",vs="ray_req_hash",Sd=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem(Qu);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem(Qu,s)),s},br=async n=>{var o=n,{logCount:s=1e3,removeLastLog:e}=o,t=Ge(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(vs)||"[]").slice(0,s-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(q(_({},t),{time:Date.now(),session:Sd()}));try{localStorage.setItem(vs,JSON.stringify(i))}catch{if(e){let r=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!r;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(vs,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return br(q(_({},t),{logCount:s,removeLastLog:!0}))}};import{TOKEN_2022_PROGRAM_ID as Kd,TOKEN_PROGRAM_ID as Cd}from"@solana/spl-token";var gr=we("Raydium_Api"),Fs=new Map,_s=new Map;var Pr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=ju.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?Hu.BASE_HOST:ct.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return gr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(gr.error("Request failed"),Promise.reject(r))),this.api.interceptors.response.use(r=>{let{config:a,data:c,status:u}=r,{method:l,baseURL:m,url:d}=a;return n&&br({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),gr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},r=>{let{config:a,response:c={}}=r,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&br({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),gr.error(`${l.toUpperCase()} ${m}${d} ${u||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||ct.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||ct.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||ct.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ju.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||ct.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||ct.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||ct.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||ct.JUP_TOKEN_LIST})).map(t=>q(_({},t),{chainId:101,programId:t.tags.includes("token-2022")?Kd.toBase58():Cd.toBase58()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||ct.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:r=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||ct.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${r}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||ct.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>Fs.has(r)?(n.push(Fs.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||ct.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Fs.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:r="desc",page:a=1}=e,[c,u]=[t&&yt(t).toBase58(),n&&n!=="undefined"?yt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||ct.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${r}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||ct.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||ct.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||ct.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=_s.get(this.cluster))!=null&&t.length)return _s.get(this.cluster);let e=await this.api.get(this.cluster==="devnet"?"https://launch-mint-v1-devnet.raydium.io/main/configs":"https://launch-mint-v1.raydium.io/main/configs");return _s.set(this.cluster,e.data.data),e.data.data}};var Ar="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Zu="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Br,SystemProgram as sp}from"@solana/web3.js";import{AccountLayout as Oo,createAssociatedTokenAccountIdempotentInstruction as Hs,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as ap}from"@solana/spl-token";var Es=(...s)=>s.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),De=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=we(t)}createTxBuilder(e){return this.scope.checkOwner(),new yr({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(Es(e))}logInfo(...e){this.logger.info(Es(e))}logAndCreateError(...e){let t=Es(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ep,SystemProgram as tp}from"@solana/web3.js";import np from"bn.js";import{createCloseAccountInstruction as op,createInitializeAccountInstruction as ip,createTransferInstruction as rp,TOKEN_PROGRAM_ID as No}from"@solana/spl-token";import{Keypair as jd,PublicKey as dc}from"@solana/web3.js";import Zd from"bn.js";import{TOKEN_PROGRAM_ID as $d}from"@solana/spl-token";function Rd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function Vs(s,...e){if(!Rd(s))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(s.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${s.length}`)}function Ws(s,e=!0){if(s.destroyed)throw new Error("Hash instance has been destroyed");if(e&&s.finished)throw new Error("Hash#digest() has already been called")}function $u(s,e){Vs(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var kr=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),ln=(s,e)=>s<<32-e|s>>>e;var eA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ld(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function Ds(s){return typeof s=="string"&&(s=Ld(s)),Vs(s),s}var wr=class{clone(){return this._cloneInto()}},tA={}.toString;function Ju(s){let e=n=>s().update(Ds(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Nd(s,e,t,n){if(typeof s.setBigUint64=="function")return s.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),r=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;s.setUint32(e+c,r,n),s.setUint32(e+u,a,n)}var ec=(s,e,t)=>s&e^~s&t,tc=(s,e,t)=>s&e^s&t^e&t,hr=class extends wr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=kr(this.buffer)}update(e){Ws(this);let{view:t,buffer:n,blockLen:o}=this;e=Ds(e);let i=e.length;for(let r=0;r<i;){let a=Math.min(o-this.pos,i-r);if(a===o){let c=kr(e);for(;o<=i-r;r+=o)this.process(c,r);continue}n.set(e.subarray(r,r+a),this.pos),this.pos+=a,r+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ws(this),$u(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:r}=this;t[r++]=128,this.buffer.subarray(r).fill(0),this.padOffset>o-r&&(this.process(n,0),r=0);for(let m=r;m<o;m++)t[m]=0;Nd(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=kr(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:r,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=r,o%t&&e.buffer.set(n),e}};var Od=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Dn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),qn=new Uint32Array(64),qs=class extends hr{constructor(){super(64,32,8,!1),this.A=Dn[0]|0,this.B=Dn[1]|0,this.C=Dn[2]|0,this.D=Dn[3]|0,this.E=Dn[4]|0,this.F=Dn[5]|0,this.G=Dn[6]|0,this.H=Dn[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:r,G:a,H:c}=this;return[e,t,n,o,i,r,a,c]}set(e,t,n,o,i,r,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=r|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)qn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=qn[m-15],p=qn[m-2],f=ln(d,7)^ln(d,18)^d>>>3,y=ln(p,17)^ln(p,19)^p>>>10;qn[m]=y+qn[m-7]+f+qn[m-16]|0}let{A:n,B:o,C:i,D:r,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=ln(a,6)^ln(a,11)^ln(a,25),p=l+d+ec(a,c,u)+Od[m]+qn[m]|0,y=(ln(n,2)^ln(n,13)^ln(n,22))+tc(n,o,i)|0;l=u,u=c,c=a,a=r+p|0,r=i,i=o,o=n,n=p+y|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,r=r+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,r,a,c,u,l)}roundClean(){qn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var nc=Ju(()=>new qs);import{PublicKey as zd}from"@solana/web3.js";import ac,{isBN as uc}from"bn.js";import{bits as Md,BitStructure as lA,blob as vd,Blob as mA,cstr as dA,f32 as pA,f32be as fA,f64 as yA,f64be as bA,greedy as gA,Layout as Fd,ns64 as PA,ns64be as AA,nu64 as _d,nu64be as wA,offset as Ed,s16 as kA,s16be as hA,s24 as TA,s24be as IA,s32 as Vd,s32be as BA,s40 as xA,s40be as SA,s48 as KA,s48be as CA,s8 as RA,seq as Wd,struct as LA,Structure as Dd,u16 as qd,u16be as NA,u24 as OA,u24be as MA,u32 as Ud,u32be as vA,u40 as FA,u40be as _A,u48 as EA,u48be as VA,u8 as Gd,UInt as Xd,union as WA,Union as DA,unionLayoutDiscriminator as qA,utf8 as UA}from"@solana/buffer-layout";var Tr=Fd,oc=Dd;var Us=Xd;var ic=Gd,Dt=qd;var ri=Ud;var rc=_d;var qe=Vd;var sc=Wd;var xe=vd;var Gs=Md,Xs=Ed;var ro=class extends Tr{constructor(t,n,o){super(t,o);this.blob=xe(t),this.signed=n}decode(t,n=0){let o=new ac(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 ac(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Ir=class extends Tr{constructor(t){super(8,t);this._lower=Gs(ri(),!1),this._upper=Gs(ri(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return _(_({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function D(s){return new Us(1,s)}function Pt(s){return new Us(4,s)}function P(s){return new ro(8,!1,s)}function re(s){return new ro(16,!1,s)}function cc(s){return new ro(1,!0,s)}function Lo(s){return new ro(8,!0,s)}function lc(s){return new ro(16,!0,s)}var so=class extends Tr{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 F(s){return new so(xe(32),e=>new zd(e),e=>e.toBuffer(),s)}function Ye(s){return new so(ic(),Yd,Hd,s)}function Yd(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function Hd(s){return s?1:0}function mc(s,e){let t=ri("length"),n=E([t,Q(s,Xs(t,-t.span),"values")]);return new so(n,({values:o})=>o,o=>({values:o}),e)}function Qd(s){let e=ri("length"),t=E([e,xe(Xs(e,-e.span),"data")]);return new so(t,({data:n})=>n,n=>({data:n}),s)}function Mt(s){return new so(Qd(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var zs=class extends oc{decode(e,t){return super.decode(e,t)}};function E(s,e,t){return new zs(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:uc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=uc(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 sc(s,o,t)}var ao=E([F("mint"),F("owner"),P("amount"),Pt("delegateOption"),F("delegate"),D("state"),Pt("isNativeOption"),P("isNative"),P("delegatedAmount"),Pt("closeAuthorityOption"),F("closeAuthority")]);var lw=we("Raydium_Util");function pc({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=ao.decode(r.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ee(s,c,r.owner).publicKey.equals(i),isNative:!1,programId:r.owner}),o.push({pubkey:i,accountInfo:a,programId:r.owner})}return e&&n.push({mint:dc.default,amount:new Zd(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function $e({fromPublicKey:s,programId:e=$d,assignSeed:t}){let n=t?btoa(t).slice(0,32):jd.generate().publicKey.toBase58().slice(0,32);return{publicKey:Jd(s,n,e),seed:n}}function Jd(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=nc(n);return new dc(o)}function Ys(s){let{mint:e,tokenAccount:t,owner:n,programId:o=No}=s;return ip(t,e,n,o)}function hn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=No}=s;return op(e,t,o,n,i)}async function Un(s){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:r}=s,a=await e.getMinimumBalanceForRentExemption(ao.span,n),c=ne(t).add(new np(a)),u=$e({fromPublicKey:o,programId:No});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[tp.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:ao.span,programId:No}),Ys({mint:new ep(gt.address),tokenAccount:u.publicKey,owner:i,programId:No})],instructionTypes:[X.CreateAccount,X.InitAccount],endInstructionTypes:r?[]:[X.CloseAccount],endInstructions:r?[]:[hn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function fc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=No}){return rp(s,e,t,BigInt(String(n)),o,i)}var si=class extends De{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:o,notSubscribeAccountChange:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._notSubscribeAccountChange=i!=null?i:!0,this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ee(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<(this._notSubscribeAccountChange?1e3*5:1e3*60*3))return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=_(_({},{}),t),[i,r,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Gn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ap},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=pc({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:r.context,value:[...r.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=Gn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),r=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&r.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,b,g,A;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:r,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new Br(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Br(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!i||k.pubkey.equals(d))).sort((k,T)=>k.accountInfo.amount.lt(T.accountInfo.amount)?1:-1);if(o===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let k=Hs(r,d,r,n,m),T=this.tokenAccountRawInfos.find(h=>h.pubkey.equals(d));if(u){let h=await this.scope.connection.getAccountInfo(d);if(h===null)(y=f.instructions)==null||y.push(k),f.instructionTypes.push(X.CreateATA);else if(!(h.owner.equals(m)&&Oo.decode(h.data).mint.equals(n)&&Oo.decode(h.data).owner.equals(r)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else T===void 0&&(f.instructions.push(k),f.instructionTypes.push(X.CreateATA));if(n.equals(Z)&&o.amount){let h=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(b=o.amount)!=null?b:0,skipCloseAccount:c});f.instructions.push(...h.instructions||[]),f.endInstructions.push(...h.endInstructions||[]),f.instructionTypes.push(...h.instructionTypes||[]),f.endInstructionTypes.push(...h.endInstructionTypes||[]),o.amount&&(f.instructions.push(fc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Gn})),f.instructionTypes.push(X.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(hn({owner:r,payer:o.payer||r,tokenAccount:d,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:d,instructionParams:f}}else{let k=$e({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Oo.span),h=sp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:k.seed,newAccountPubkey:k.publicKey,lamports:T+Number((A=(g=o.amount)==null?void 0:g.toString())!=null?A:0),space:Oo.span,programId:m});return f.instructions.push(h,Ys({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(X.CreateAccount),f.instructionTypes.push(X.InitAccount),c||(f.endInstructions.push(hn({owner:r,payer:o.payer||r,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(X.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=Gn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,r=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Hs(r,u,r,t,n);a.instructions=[l],a.instructionTypes=[X.CreateATA],i=u}return o&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[hn({owner:r,payer:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[X.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:r=Gn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,r);if(new Br(Z).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return _({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Hs(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,r);if(m){let y=await this.scope.connection.getAccountInfo(d);if(y===null)p.push(f);else if(!(y.owner.equals(Gn)&&Oo.decode(y.data).mint.equals(i)&&Oo.decode(y.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[X.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=Gn,amount:i,useSOLBalance:r,handleTokenAccount:a,feePayer:c}=t,u,l=this.createTxBuilder(c);if(n.equals(new Br(Z))&&r){let m=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Ge(m,["tokenAccount"]);u=p,l.addInstruction(f)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!u&&a){let d=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=d,f=Ge(d,["tokenAccount"]);u=p,l.addInstruction(f)}return _({tokenAccount:u},l.AllTxData)}};import{PublicKey as Ce,SystemProgram as Ip}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Rc}from"@solana/spl-token";import{PublicKey as ta}from"@solana/web3.js";var Qs=E([D("instruction")]),js=E([D("instruction")]),up=E([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),re("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),P("rewardType"),Q(P(),15,"padding")]),cp=E([P("state"),P("nonce"),F("lpVault"),F("rewardVault"),F(),F(),P(),P(),P("totalReward"),re("perShareReward"),P("lastSlot"),P("perSlotReward")]),lp=E([P("state"),P("nonce"),F("lpVault"),F("rewardVaultA"),P("totalRewardA"),re("perShareRewardA"),P("perSlotRewardA"),D("option"),F("rewardVaultB"),xe(7),P("totalRewardB"),re("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),F()]),mp=E([P(),P("state"),P("nonce"),P("validRewardTokenNum"),re("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(up,5,"rewardInfos"),F("creator"),F(),Q(P(),32,"padding")]),dp=new Proxy(cp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),pp=new Proxy(lp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},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(s,e,t)}}),xr=new Proxy(mp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(_({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(_({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),fp=E([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Zs=E([D("instruction"),P("nonce"),Q(fp,5,"rewardTimeInfo")]),$s=E([D("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Js=E([D("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),qw=E([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),1,"rewardDebts")]),ea=E([P("state"),F("id"),F("owner"),P("deposited"),Q(re(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Q(P(),15)]),Uw=E([P("state"),F("id"),F("owner"),P("deposited"),Q(P(),2,"rewardDebts")]),yc=E([P("state"),F("id"),F("owner"),P("deposited"),Q(re(),2,"rewardDebts"),Q(P(),17)]),bc=E([P(),P("state"),F("id"),F("owner"),P("deposited"),Q(re(),5,"rewardDebts"),Q(P(),16)]),qt=E([D("instruction"),P("amount")]),yp=E([F("mint"),F("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),cc("digitShift"),Q(D(),7,"reserved1"),Q(P(),7,"reserved2")]),bp=E([xe(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(D(),32,"reserved1"),Q(yp,4,"votingMints"),Lo("timeOffset"),D("bump"),Q(D(),7,"reserved2"),Q(P(),11,"reserved3")]),gp=E([Lo("startTime"),Lo("endTime"),D("kind"),Q(D(),15,"reserved")]),Pp=E([Q(gp,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),Ye("isUsed"),Ye("allowClawback"),D("votingMintConfigIdx"),Q(D(),29,"reserved")]),Ap=E([xe(8),F("voterAuthority"),F("registrar"),Q(Pp,32,"deposits"),D("voterBump"),D("voterWweightRecordBump"),Q(D(),94,"reserved")]);import{NATIVE_MINT as $w}from"@solana/spl-token";var Jw=we("Raydium_farm_config"),gc=new ta("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Pc=new ta("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var ek=new ta("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Ac={3:ea,5:yc,6:bc},na=s=>[3,4,5,6].indexOf(s)!==-1,oa=s=>{var r;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=s,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(r=i[e])==null?void 0:r.call(i)},Xn={"Standard SPL":0,"Option tokens":1},jt={[Du.toString()]:3,[qu.toString()]:4,[Uu.toString()]:5,[Jo.toString()]:6,[kn.FARM_PROGRAM_ID_V3.toString()]:3,[kn.FARM_PROGRAM_ID_V4.toString()]:4,[kn.FARM_PROGRAM_ID_V5.toString()]:5,[kn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as Ae,SystemProgram as hc,SYSVAR_CLOCK_PUBKEY as ci,SYSVAR_RENT_PUBKEY as hp,TransactionInstruction as $t}from"@solana/web3.js";import Tc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Nk,createAssociatedTokenAccountIdempotentInstruction as Ok,TOKEN_PROGRAM_ID as Tn}from"@solana/spl-token";import wp from"bn.js";var kp=we("Raydium.farm.util");function ai({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],s);return o}function Zt({programId:s,poolId:e,owner:t,version:n}){let{publicKey:o}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var wc=({programId:s,poolId:e})=>fe([e.toBuffer()],s);function kc(s){return{isSet:new wp(1),rewardPerSecond:ne(s.perSecond),rewardOpenTime:ne(s.openTime),rewardEndTime:ne(s.endTime),rewardType:ne(Xn[s.rewardType])}}function ia(s){return ne(s.endTime).sub(ne(s.openTime)).mul(ne(s.perSecond))}function ui(s){let e=Ac[s];return e||kp.logWithError("invalid version",s),e}var Tp=we("Raydium_farm_instruction"),Gk={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])};function li(s){let{version:e,id:t,ledger:n,programId:o,owner:i}=s,r={3:9,5:10}[e];r||Tp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Qs.span);Qs.encode({instruction:r},a);let c=[S({pubkey:t}),S({pubkey:n}),S({pubkey:i,isWritable:!1}),S({pubkey:hc.programId,isWritable:!1}),S({pubkey:hp,isWritable:!1})];return{instruction:new $t({programId:o,keys:c,data:a}),instructionType:X.FarmV3CreateLedger}}function Ic(s){var n;let e=Buffer.alloc(Zs.span);Zs.encode({instruction:0,nonce:new Tc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...Ps,S({pubkey:s.farmId}),S({pubkey:s.farmAuthority,isWritable:!1}),S({pubkey:s.lpVault}),S({pubkey:s.lpMint,isWritable:!1}),S({pubkey:s.lockVault}),S({pubkey:s.lockMint,isWritable:!1}),S({pubkey:(n=s.lockUserAccount)!=null?n:st}),S({pubkey:s.owner,isWritable:!1,isSigner:!0})];for(let o of s.rewardInfo)t.push(S({pubkey:o.rewardMint,isWritable:!1}),S({pubkey:o.rewardVault}),S({pubkey:o.userRewardToken}));return{instruction:new $t({programId:s.programId,keys:t,data:e}),instructionType:X.FarmV6Create}}function Bc(s){let e=Buffer.alloc(js.span);js.encode({instruction:5},e);let t=[S({pubkey:Tn,isWritable:!1}),S({pubkey:s.id}),S({pubkey:s.authority,isWritable:!1}),S({pubkey:s.lpVault,isWritable:!1}),S({pubkey:s.rewardVault}),S({pubkey:s.userRewardToken}),S({pubkey:s.owner,isWritable:!1,isSigner:!0})];return{instruction:new $t({programId:s.programId,keys:t,data:e}),instructionType:X.FarmV6CreatorWithdraw}}function ra({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc($s.span);$s.encode({instruction:3,rewardReopenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardPerSecond:ne(o.perSecond)},i);let r=[S({pubkey:Tn,isWritable:!1}),S({pubkey:n.id}),S({pubkey:n.lpVault,isWritable:!1}),S({pubkey:e}),S({pubkey:t}),S({pubkey:s,isWritable:!1,isSigner:!0})];return new $t({programId:n.programId,keys:r,data:i})}function sa({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Js.span);Js.encode({instruction:4,isSet:new Tc(1),rewardPerSecond:ne(o.perSecond),rewardOpenTime:ne(o.openTime),rewardEndTime:ne(o.endTime),rewardType:ne(Xn[o.rewardType])},i);let r=[...Ps,S({pubkey:t.id}),S({pubkey:t.authority,isWritable:!1}),S({pubkey:o.mint,isWritable:!1}),S({pubkey:n}),S({pubkey:e}),S({pubkey:s,isWritable:!1,isSigner:!0})];return new $t({programId:t.programId,keys:r,data:i})}function mi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new Ae(e.programId),new Ae(e.id)],u=Zt({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(qt.span);qt.encode({instruction:2,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:c}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:u}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new Ae(t.rewardInfos[d].vault)})),m.push(S({pubkey:o[d]}));return new $t({programId:a,keys:m,data:l})}function di(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(qt.span);qt.encode({instruction:12,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:o[p]})),d.push(S({pubkey:new Ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function xc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=E([D("instruction"),P("amount")]),m=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:a[0]}),S({pubkey:i,isSigner:!0,isWritable:!1}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1}),S({pubkey:o[1]}),S({pubkey:new Ae(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:r},d),new $t({keys:m,programId:c,data:d})}function pi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(qt.span);qt.encode({instruction:11,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function Sc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(qt.span);qt.encode({instruction:10,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function Kc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new Ae(e.programId),new Ae(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(qt.span);qt.encode({instruction:11,amount:ne(r)},m);let d=[S({pubkey:u}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:l}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:o[0]}),S({pubkey:new Ae(t.rewardInfos[0].vault)}),S({pubkey:ci,isWritable:!1}),S({pubkey:Tn,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(S({pubkey:o[p]})),d.push(S({pubkey:new Ae(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(S({pubkey:p}));return new $t({programId:c,keys:d,data:m})}function Cc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new Ae(e.programId),new Ae(e.id)],u=Zt({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(qt.span);qt.encode({instruction:1,amount:ne(r)},l);let m=[S({pubkey:Tn,isWritable:!1}),S({pubkey:hc.programId,isWritable:!1}),S({pubkey:c}),S({pubkey:new Ae(t.authority),isWritable:!1}),S({pubkey:new Ae(t.lpVault)}),S({pubkey:u}),S({pubkey:i,isWritable:!1,isSigner:!0}),S({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(S({pubkey:new Ae(t.rewardInfos[d].vault)})),m.push(S({pubkey:o[d]}));return new $t({programId:a,keys:m,data:l})}var fi=class extends De{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(st)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ia(q(_({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Jo,txVersion:i,feePayer:r,lockProgram:a}){var x,B;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Ce(e.lpMint.address),lockInfo:{lockMint:(x=a==null?void 0:a.mint)!=null?x:gc,lockVault:(B=a==null?void 0:a.vault)!=null?B:Pc},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(r),m=n!=null?n:this.scope.ownerPubKey,d=$e({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(xr.span);l.addInstruction({instructions:[Ip.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:xr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=wc({programId:new Ce(u.programId),poolId:d.publicKey}),b=ai({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],A=[];for(let K of u.rewardInfos){K.openTime>=K.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",K.openTime.toString()),isNaN(Xn[K.rewardType])&&this.logAndCreateError("rewardType error",K.rewardType),Number(K.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",K.perSecond),g.push(kc(K));let{rewardPubKey:I,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:K,payer:m});C&&l.addInstruction(C),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let L=K.mint.equals(st)?new Ce(gt.address):K.mint;A.push({rewardMint:L,rewardVault:ai({programId:u.programId,poolId:d.publicKey,mint:L,type:"rewardVault"}),userRewardToken:I})}let{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Ce(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),k||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:w}=Ic({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:k,programId:u.programId,rewardInfo:A,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[w]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:k,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=jt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=pt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,l=n.mint.equals(st)?new Ce(gt.address):n.mint,m=c.rewardInfos.findIndex(A=>new Ce(A.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:st,f=this.createTxBuilder(i),{rewardPubKey:y,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return b&&f.addInstruction(b),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),f.addInstruction({instructions:[ra({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[X.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var m;let r=jt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=pt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c={id:a.id,rewardInfos:e.rewardInfos,lpVault:a.lpVault,programId:a.programId};n.forEach(d=>{d.openTime>=d.endTime&&this.logAndCreateError("start time error","newRewardInfo",d)});let u=t||this.scope.ownerPubKey,l=this.createTxBuilder(i);for(let d of n){let p=d.mint.equals(st)?new Ce(gt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Ce(T.mint.address).equals(p)),y=a.rewardInfos[f];y||this.logAndCreateError("configuration does not exist","rewardMint",p);let b=(m=y.vault)!=null?m:st,{rewardPubKey:g,newInstruction:A}=await this._getUserRewardInfo({rewardInfo:d,payer:u});A&&l.addInstruction(A),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let k=ra({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[k],instructionTypes:[X.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=jt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=pt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r),m=o.mint.equals(st)?new Ce(gt.address):o.mint,d=ai({programId:new Ce(n.programId),poolId:new Ce(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:o,payer:u});return f&&l.addInstruction(f),p||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=m,l.addInstruction({instructions:[sa({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[X.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=jt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=pt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r);for(let m of o){let d=m.mint.equals(st)?new Ce(gt.address):m.mint,p=ai({programId:new Ce(n.programId),poolId:new Ce(n.id),mint:d,type:"rewardVault"}),{rewardPubKey:f,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:m,payer:u});y&&l.addInstruction(y),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=sa({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(_({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[X.FarmV6CreatorAddReward]})}return l.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l,txTipConfig:m}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:d,programId:p}=n,f=jt[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),na(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Ce(n.programId),new Ce(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],A=Zt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),k=this.createTxBuilder(i);k.addCustomComputeBudget(l),k.addTipInstruction(m);let T={};for(let O of this.scope.account.tokenAccounts)if(a){let R=ee(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&R.equals(O.publicKey)&&(T[O.mint.toString()]=O.publicKey)}else T[O.mint.toString()]=O.publicKey;let h=g.lpMint,w=T[h.address];w||this.logAndCreateError("you don't have any lp","lp zero",T);let x=[];for(let O of d){let R=r&&O.mint.address===Z.toString(),v=T[O.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new Ce(O.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});v=z,H&&k.addInstruction(H)}T[O.mint.address]=v,x.push(v)}let B,K=await this.scope.connection.getAccountInfo(A);if(K&&(B=ui(f).decode(K.data)),n.programId!==Jo.toString()&&n.programId!==kn.FARM_PROGRAM_ID_V6.toString()&&!B){let{instruction:O,instructionType:R}=li({id:b,programId:y,version:f,ledger:A,owner:this.scope.ownerPubKey});k.addInstruction({instructions:[O],instructionTypes:[R]})}let I=oa({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:x});I&&this.logAndCreateError(I);let C={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:u==null?void 0:u.map(O=>new Ce(O))},L=f===6?Cc(C):f===5?Kc(C):Sc(C),N={3:X.FarmV3Deposit,5:X.FarmV5Deposit,6:X.FarmV6Deposit};return k.addInstruction({instructions:[L],instructionTypes:[N[f]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:r,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m,txTipConfig:d}=e,{rewardInfos:p}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let f=jt[n.programId];na(f)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder(a);b.addCustomComputeBudget(m),b.addTipInstruction(d);let g={};for(let I of this.scope.account.tokenAccounts)if(c){let C=ee(this.scope.ownerPubKey,I.mint).publicKey;I.publicKey&&C.equals(I.publicKey)&&(g[I.mint.toString()]=I.publicKey)}else g[I.mint.toString()]=I.publicKey;if(f!==4){let I=Zt({programId:new Ce(n.programId),poolId:new Ce(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)ui(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:L,instructionType:N}=li({id:new Ce(y.id),programId:new Ce(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[L],instructionTypes:[N]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let A=y.lpMint.address,k=r&&A===Z.toString(),T=g[A.toString()];if(!T){let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Ce(A),notUseTokenAccount:k,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[A.toString()]=T;let h=[];for(let I of p){let C=r&&I.mint.address===Z.toString(),L=g[I.mint.address];if(!L){let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Ce(I.mint.address),notUseTokenAccount:C,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!C,associatedOnly:C?!1:c,checkCreateATAOwner:u});L=N,O&&b.addInstruction(O)}g[I.mint.address]=L,h.push(L)}let w=oa({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});w&&this.logAndCreateError(w);let x={amount:ne(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Ce(I))},B=f===6?mi(x):f===5?di(x):f===4?xc(x):pi(x),K={3:X.FarmV3Withdraw,4:X.FarmV4Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};return b.addInstruction({instructions:[B],instructionTypes:[K[f]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n,computeBudgetConfig:o,txTipConfig:i,feePayer:r}){var y;this.scope.checkOwner();let a=pt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=jt[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>yt(b.mint.address).equals(yt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:st,m=this.createTxBuilder(r),d;if(t.equals(st)||t.equals(Ce.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ia(q(_({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new M(u.perSecond).mul(10**u.mint.decimals).toString()}))});d=b.addresses.newAccount,m.addInstruction(b)}else{let b=await this.scope.account.getCreatedTokenAccount({mint:t});b?d=b:(d=await this.scope.account.getAssociatedTokenAccount(t),m.addInstruction({instructions:[Rc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[X.CreateATA]}))}let{instruction:p,instructionType:f}=Bc({programId:a.programId,id:a.id,authority:a.authority,lpVault:a.lpVault,rewardVault:l,userRewardToken:d,owner:this.scope.ownerPubKey});return m.addCustomComputeBudget(o),m.addTipInstruction(i),m.addInstruction({instructions:[p],instructionTypes:[f]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(o),m={};for(let f of this.scope.account.tokenAccounts)if(i){let y=ee(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&y.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,y)=>q(_({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:A}=f,k=jt[y],T=b.address,h=n&&T===Z.toString(),w=m[T];if(!w){let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Ce(T),notUseTokenAccount:h,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:i,checkCreateATAOwner:r});w=L,N&&l.addInstruction(N)}m[T.toString()]=w;let x=[];for(let L of g){let N=n&&L.mint.address===Z.toString(),O=m[L.mint.address];if(!O)if(N){let{account:R,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new Ce(L.mint.address),notUseTokenAccount:N,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:i,checkCreateATAOwner:r});O=R,v&&l.addInstruction(v)}else{let R=new Ce(L.mint.address);O=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Rc(this.scope.ownerPubKey,O,this.scope.ownerPubKey,R)]})}m[L.mint.address]=O,x.push(O)}let B=p[A],K={amount:Nt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:B,lpAccount:w,rewardAccounts:x,userAuxiliaryLedgers:a==null?void 0:a.map(L=>new Ce(L))},I=k===6?mi(K):k===5?di(K):pi(K),C={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as df,NATIVE_MINT as Vr,TOKEN_PROGRAM_ID as Yn}from"@solana/spl-token";import{Keypair as Nr,PublicKey as Y,SystemProgram as Sn,TransactionInstruction as ft}from"@solana/web3.js";import ga from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as hi,TOKEN_2022_PROGRAM_ID as je,TOKEN_PROGRAM_ID as Oe}from"@solana/spl-token";import Mp from"bn.js";import Jt from"bn.js";var He=new Jt(0),Ut=new Jt(1),In=new Jt(-1),it=new Jt(1).shln(64),Sr=new Jt(1).shln(128),yi=it.sub(Ut),bi=64,Lc=Sr.subn(1),At=-443636,ht=-At,Tt=new Jt("4295048016"),It=new Jt("79226673521066979257578248091"),Kr=new Jt("4295048017"),Cr=new Jt("79226673521066979257578248090"),Nc=16,Oc="59543866431248",Mc="184467440737095516",vc="15793534762490258745",Rr=new Jt(10).pow(new Jt(6));var Fc={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:[]},kh=new Jt("18446744073700000000");import Pe from"bn.js";function Lr(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function aa(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function ua(s,e){let t=0;for(let n=0;n<s&&!e.testn(n);n++)t++;return t}function gi(s,e){for(let t=0;t<s;t++)if(e.testn(t))return!1;return!0}function _c(s,e){return gi(s,e)?null:aa(s,e)}function Ec(s,e){return gi(s,e)?null:ua(s,e)}var xh=Buffer.from("amm_config","utf8"),ca=Buffer.from("pool","utf8"),la=Buffer.from("pool_vault","utf8"),xp=Buffer.from("pool_reward_vault","utf8"),Vc=Buffer.from("position","utf8"),Sp=Buffer.from("tick_array","utf8"),Kp=Buffer.from("operation","utf8"),Cp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Rp=Buffer.from("observation","utf8");function Wc(s,e,t,n){return fe([ca,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function ma(s,e,t){return fe([la,e.toBuffer(),t.toBuffer()],s)}function Dc(s,e,t){return fe([xp,e.toBuffer(),t.toBuffer()],s)}function he(s,e,t){return fe([Sp,e.toBuffer(),Lr(t)],s)}function mn(s,e,t,n){return fe([Vc,e.toBuffer(),Lr(t),Lr(n)],s)}function Bt(s,e){return fe([Vc,e.toBuffer()],s)}function Bn(s){return fe([Buffer.from("metadata","utf8"),an.toBuffer(),s.toBuffer()],an)}function Pi(s){return fe([Kp],s)}function Je(s,e){return fe([Cp,e.toBuffer()],s)}function qc(s,e){return fe([Rp,e.toBuffer()],s)}var Uc=Buffer.from("locked_position","utf8");function da(s,e){return fe([Uc,e.toBuffer()],s)}function Mo(s,e){return fe([Uc,e.toBuffer()],s)}var Lp=Buffer.from("support_mint","utf8");function pa(s,e){return fe([Lp,e.toBuffer()],s)}import{PublicKey as Gt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Gc}from"@solana/spl-token";import Ue from"bn.js";import bn from"bn.js";var Ai=class{static getfeeGrowthInside(e,t,n){let o=new bn(0),i=new bn(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let r=new bn(0),a=new bn(0);e.tickCurrent<n.tick?(r=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ye.wrappingSubU128(ye.wrappingSubU128(e.feeGrowthGlobalX64A,o),r),u=ye.wrappingSubU128(ye.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,o),a=ye.mulDivFloor(ye.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,it),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,it),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:r}=this.getfeeGrowthInside(e,n,o),a=ye.mulDivFloor(ye.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,it),c=t.tokenFeesOwedA.add(a),u=ye.mulDivFloor(ye.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,it),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],r=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ye.wrappingSubU128(c,u.growthInsideLastX64),m=ye.mulDivFloor(l,t.liquidity,it),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],r=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<r.length;a++){let c=r[a],u=t.rewardInfos[a],l=ye.wrappingSubU128(c,u.growthInsideLastX64),m=ye.mulDivFloor(l,t.liquidity,it),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let r=0;r<o.length;r++){let a=new bn(0);t.liquidityGross.eqn(0)?a=o[r].rewardGrowthGlobalX64:e<t.tick?a=o[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ye.wrappingSubU128(ye.wrappingSubU128(o[r].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let r=0;r<o.length;r++){let a=new bn(0);t.liquidityGross.eqn(0)?a=o[r].rewardGrowthGlobalX64:e<t.tick?a=o[r].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[r]):a=t.rewardGrowthsOutsideX64[r];let c=new bn(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ye.wrappingSubU128(ye.wrappingSubU128(o[r].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:r}){var b,g,A,k;let a=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=le.getSqrtPriceX64FromTick(t.tickLower),u=le.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=Ie.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Le(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,r,!0),Le(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,r,!0)],[f,y]=[Le(new bn(new M(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,r,!0),Le(new bn(new M(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:cn(d.expirationTime,p.expirationTime)}}};var Np=15,Te=class{static async getTickArrays(e,t,n,o,i,r,a){let c=[],u=$.getTickArrayStartIndexByTick(o,i),l=$.getInitializedTickArrayInRange(r,a,i,u,Math.floor(Np/2));for(let p=0;p<l.length;p++){let{publicKey:f}=he(t,n,l[p]);c.push(f)}let m=(await on(e,c)).map(p=>p!==null?wi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(_({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,r){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,r);for(;a==null||a.liquidityGross.lten(0);){if(u=$.getNextTickArrayStartIndex(u,i,r),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,r);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let r=Math.floor(e/Te.tickCount(t)),a=n?$.searchLowBitFromStart(o,i,r-1,1,t):$.searchHightBitFromStart(o,i,r+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=rt-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<rt;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=he(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:r,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,r){let a=$.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(r)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<rt;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=he(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if($.checkIsOutOfBoundary(e)){if(e>ht)return!1;let n=$.getTickArrayStartIndexByTick(At,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return rt*e}};var fa=14,xn=class{static maxTickInTickarrayBitmap(e){return e*rt*uo}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!Te.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),r=o?t-Te.tickCount(n):t+Te.tickCount(n);if(r<-i||r>=i)return{isInit:!1,tickIndex:t};let a=n*rt,c=r/a+512;r<0&&r%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=_c(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=Ec(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-Te.tickCount(n)}}}},ki=class{static getBitmapOffset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=xn.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=xn.maxTickInTickarrayBitmap(e),n=-t;if(ht<=t)throw Error(`extensionTickBoundary check error: ${ht}, ${t}`);if(n<=At)throw Error(`extensionTickBoundary check error: ${n}, ${At}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:$.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=Te.tickCount(t),r=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(r,t,o);return this.nextInitializedTickArrayInBitmap(a,r,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:r}=xn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=$.mergeTickArrayBitmap(e).shln(uo-1-a),u=gi(512,c)?null:aa(512,c);if(u!==null){let l=t-u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=$.mergeTickArrayBitmap(e).shrn(a),u=gi(512,c)?null:ua(512,c);if(u!==null){let l=t+u*Te.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r-Te.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%xn.maxTickInTickarrayBitmap(t),o=Math.floor(n/Te.tickCount(t));return e<0&&n!=0&&(o=uo-o),o}};var Ne=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,r=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:f,sqrtPriceX64:y,feeAmount:b}=co.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,r);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(In),remainingAccounts:c,executionPrice:y,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let r=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,r);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let y=this.preInitializedTickArrayStartIndex(e,r);if(y.isExist){let{publicKey:b}=he(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=co.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,r,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(In),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ne.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ki.checkTickArrayIsInit(Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):$.checkTickArrayIsInitialized($.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=he(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:r}=this.nextInitializedTickArrayStartIndex(e,Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=he(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/Te.tickCount(e.tickSpacing)),o=t?$.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):$.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=Te.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=xn.nextInitializedTickArrayStartIndex($.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:r,tickIndex:a}=ki.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<At||t>ht)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let r=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=q(_({},m),{perSecond:ye.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Gt(d)});if(p.tokenMint.equals(Gt.default))continue;if(n<=p.openTime.toNumber()||o.eq(He)){r.push(p);continue}let f=new Ue(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=ye.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),A=ye.mulDivFloor(y,p.emissionsPerSecondX64,it),k=p.rewardTotalEmissioned.add(A);r.push(q(_({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return r}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let r=$.getTickArrayStartIndexByTick(i,e);if(r>=n||r<o)return!0}return!1}static tickRange(e){let t=xn.maxTickInTickarrayBitmap(e),n=-t;return t>ht&&(t=Te.getArrayStartIndex(ht,e)+Te.tickCount(e)),n<At&&(n=Te.getArrayStartIndex(At,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Te.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Te.tickCount(t)*uo}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()]=zc.decode(r.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=$.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=$.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=he(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let r=await Ee(e,i,{batchRequest:n}),a={};for(let c of r){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=wi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(_({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let r=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(r.find(l=>l.equals(u.state.programId))||r.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of r)u.push(Bt(p,d).publicKey);let l=await on(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=vo.decode(d.data),f=p.poolId.toString(),y=e.find(B=>B.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=$._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=$._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:T}=Ie.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:k,amountB:T,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(B=>q(_({},B),{pendingReward:new Ue(0)})),leverage:h,tokenFeeAmountA:new Ue(0),tokenFeeAmountB:new Ue(0)}];let w=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),x=await $.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=w,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=x}if(i){let d=Object.values(m),p=await on(t,d,{batchRequest:o}),f={};for(let y=0;y<d.length;y++){let b=p[y];if(b===null)continue;let g=d[y].toString();f[g]=wi.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,k=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[A].toString()],h=f[m[k].toString()],w=T.ticks[$.getTickOffsetInArray(g.tickLower,y.tickSpacing)],x=h.ticks[$.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:K}=await Ai.GetPositionFees(y,g,w,x),I=await Ai.GetPositionRewards(y,g,w,x);g.tokenFeeAmountA=B.gte(new Ue(0))?B:new Ue(0),g.tokenFeeAmountB=K.gte(new Ue(0))?K:new Ue(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ue(0))?I[C]:new Ue(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:r,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var L;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new M(0))?u=l?Tt.add(new Ue(1)):It.sub(new Ue(1)):u=le.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Le(i,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:A}=Ne.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((L=p.fee)!=null?L:He),u,c),k=Le(y,d,o,!1),T=le.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new M(1).div(T),w=y.mul(new Ue(Math.floor((1-r)*1e10))).div(new Ue(1e10)),x=Le(w,d,o,!1),B=l?e.currentPrice:new M(1).div(e.currentPrice),K=new M(h).sub(B).abs(),I=B,C=new at(new M(K).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:x,expirationTime:cn(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:r,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new ze(q(_({},u),{mint:u.address,isToken2022:u.programId===Gc.toBase58()})),new ze(q(_({},l),{mint:l.address,isToken2022:l.programId===Gc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:k,priceImpact:T,fee:h,remainingAccounts:w,executionPriceX64:x}=Ne.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Gt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),B=q(_({},f),{amount:new Re(m,f.amount),fee:f.fee===void 0?void 0:new Re(m,f.fee)}),K=q(_({},y),{amount:new Re(d,y.amount),fee:y.fee===void 0?void 0:new Re(d,y.fee)}),I=q(_({},b),{amount:new Re(d,b.amount),fee:b.fee===void 0?void 0:new Re(d,b.fee)}),C=new Lt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:A.mul(new M(10**(20+d.decimals))).toFixed(0)}),L=new Lt({baseToken:m,denominator:new Ue(10).pow(new Ue(20+m.decimals)),quoteToken:d,numerator:k.mul(new M(10**(20+d.decimals))).toFixed(0)}),N=new Re(m,h);return{allTrade:p,realAmountIn:B,amountOut:K,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:L,priceImpact:T,fee:N,remainingAccounts:w,executionPriceX64:x}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:r,priceLimit:a=new M(0)}){var I;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?It.sub(new Ue(1)):Tt.add(new Ue(1)):l=le.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Le(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=Ne.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:He),l),b=c?e.mintB.address:e.mintA.address,g=Le(d,u[b],o,!1),A=le.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?A:new M(1).div(A),T=d.mul(new Ue(Math.floor((1+r)*1e10))).div(new Ue(1e10)),h=Le(T,u[b],o,!0),w=c?e.currentPrice:new M(1).div(e.currentPrice),x=new M(k).sub(w).abs(),B=w,K=new at(new M(x).mul(10**15).toFixed(0),new M(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:cn(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:K,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=$.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=$.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(r,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-r,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((f=i.rewardApr[0])!=null?f:0)*p,((y=i.rewardApr[1])!=null?y:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:r,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[yt(e.mintA.address).toString()],d=o[yt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let y=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),b=le.getSqrtPriceX64FromTick(r),g=le.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:k}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=Ie.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),w=new M(A.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(k.toString()).div(new M(10).pow(f)).mul(d.value)),x=new M(T.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(h.toString()).div(new M(10).pow(f)).mul(d.value)),B=new M(1).div(w.add(x)),I=new M(l.volumeFee).mul(365).div(u).mul(B).mul(100).toNumber(),C=3600*24*365,L=e.rewardDefaultInfos.map(N=>{var v,z;let O=N.mint.decimals,R=o[N.mint.address];return c<((v=N.startTime)!=null?v:0)||c>((z=N.endTime)!=null?z:0)||!N.perSecond||!R||O===void 0?0:new M(R.value).mul(new M(N.perSecond).mul(C)).div(new M(10).pow(O)).mul(B).mul(100).toNumber()});return{feeApr:I,rewardsApr:L,apr:I+L.reduce((N,O)=>N+O,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var g,A;let l=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=le.getSqrtPriceX64FromTick(n),d=le.getSqrtPriceX64FromTick(o),p=Le(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ue(new M(p.amount.sub((A=p.fee)!=null?A:He).toString()).toFixed(0)),y;if(l.lte(m))y=t?Ie.getLiquidityFromTokenAmountA(m,d,f,!a):new Ue(0);else if(l.lte(d)){let k=Ie.getLiquidityFromTokenAmountA(l,d,f,!a),T=Ie.getLiquidityFromTokenAmountB(m,l,f);y=t?k:T}else y=t?new Ue(0):Ie.getLiquidityFromTokenAmountB(m,d,f);let b=await Ne.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:y,slippage:r,add:a});return{liquidity:y,amountA:t?p:b.amountA,amountB:t?b.amountB:p,amountSlippageA:t?p:b.amountSlippageA,amountSlippageB:t?b.amountSlippageB:p,expirationTime:b.expirationTime}}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:r,add:a}){var b,g,A,k;let c=le.getSqrtPriceX64FromTick(n),u=le.getSqrtPriceX64FromTick(o),l=a?1+r:1-r,m=Ie.getAmountsFromLiquidity(le.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Le(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Le(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Le(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),Le(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:cn(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Gt(c.id));(await on(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=lo.decode(c.data))});let r=t.map(c=>Je(new Gt(c.programId),new Gt(c.id)).publicKey),a=await Ne.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(_({},c),{[u.id]:q(_({},n[u.id]),{id:new Gt(u.id),version:6,programId:new Gt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(_({},u.config),{id:new Gt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:Je(new Gt(u.programId),new Gt(u.id)).publicKey,exBitmapInfo:a[Je(new Gt(u.programId),new Gt(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]}};var ya={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Xc(s){return q(_({},s),{type:"Concentrated",programId:s.programId.toString(),id:s.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:s.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:s.ammConfig.tradeFeeRate,openTime:s.startTime.toString(),tvl:0,day:ya,week:ya,month:ya,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(_({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ye=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(He)||(i=i.add(Ut)),i}static mulDivFloor(e,t,n){if(n.eq(He))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(He))throw new Error("division by 0");return e.mul(t).add(n.sub(Ut)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new Pe(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Sr).sub(t).mod(Sr)}};function lt(s,e){return ba(s.mul(e),64,256)}function Op(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ba(s,e,t){let n=s.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var le=class{static sqrtPriceX64ToPrice(e,t,n){return ye.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ye.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(He))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(He))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(He))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(He))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(He))return e;let i=t.shln(bi);if(o){let r=i,a=i.add(n.mul(e));return a.gte(r)?ye.mulDivCeil(r,e,a):ye.mulDivRoundingUp(r,Ut,r.div(e).add(n))}else{let r=n.mul(e);if(!i.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(r);return ye.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(bi);if(o)return e.add(i.div(t));{let r=ye.mulDivRoundingUp(i,Ut,t);if(!e.gt(r))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(r)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<At||e>ht)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new Pe("18445821805675395072"):new Pe("18446744073709551616");return(t&2)!=0&&(n=lt(n,new Pe("18444899583751176192"))),(t&4)!=0&&(n=lt(n,new Pe("18443055278223355904"))),(t&8)!=0&&(n=lt(n,new Pe("18439367220385607680"))),(t&16)!=0&&(n=lt(n,new Pe("18431993317065453568"))),(t&32)!=0&&(n=lt(n,new Pe("18417254355718170624"))),(t&64)!=0&&(n=lt(n,new Pe("18387811781193609216"))),(t&128)!=0&&(n=lt(n,new Pe("18329067761203558400"))),(t&256)!=0&&(n=lt(n,new Pe("18212142134806163456"))),(t&512)!=0&&(n=lt(n,new Pe("17980523815641700352"))),(t&1024)!=0&&(n=lt(n,new Pe("17526086738831433728"))),(t&2048)!=0&&(n=lt(n,new Pe("16651378430235570176"))),(t&4096)!=0&&(n=lt(n,new Pe("15030750278694412288"))),(t&8192)!=0&&(n=lt(n,new Pe("12247334978884435968"))),(t&16384)!=0&&(n=lt(n,new Pe("8131365268886854656"))),(t&32768)!=0&&(n=lt(n,new Pe("3584323654725218816"))),(t&65536)!=0&&(n=lt(n,new Pe("696457651848324352"))),(t&131072)!=0&&(n=lt(n,new Pe("26294789957507116"))),(t&262144)!=0&&(n=lt(n,new Pe("37481735321082"))),e>0&&(n=Lc.div(n)),n}static getTickFromPrice(e,t,n){return le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(It)||e.lt(Tt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Pe(t-64),o=Op(n,32,128),i=new Pe("8000000000000000","hex"),r=0,a=new Pe(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new Pe(0))&&r<Nc;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(i.mul(f)),i=i.shrn(1),r+=1}let u=a.shrn(32),m=o.add(u).mul(new Pe(Oc)),d=ba(m.sub(new Pe(Mc)),64,128).toNumber(),p=ba(m.add(new Pe(vc)),64,128).toNumber();return d==p?d:le.getSqrtPriceX64FromTick(p).lte(e)?p:d}},mo=class{static getTickWithPriceAndTickspacing(e,t,n,o){let r=le.getTickFromSqrtPriceX64(le.priceToSqrtPriceX64(e,n,o))/t;return r<0?r=Math.floor(r):r=Math.ceil(r),r*t}static roundPriceWithTickspacing(e,t,n,o){let i=mo.getTickWithPriceAndTickspacing(e,t,n,o),r=le.getSqrtPriceX64FromTick(i);return le.sqrtPriceX64ToPrice(r,n,o)}},Ie=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(He))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(bi),r=t.sub(e);return o?ye.mulDivRoundingUp(ye.mulDivCeil(i,r,t),Ut,e):ye.mulDivFloor(i,r,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(He))throw new Error("sqrtPriceX64A must greater than 0");return o?ye.mulDivCeil(n,t.sub(e),it):ye.mulDivFloor(n,t.sub(e),it)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),r=t.sub(e),a=i.div(r);return o?ye.mulDivRoundingUp(a,Ut,yi):a.shrn(bi)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ye.mulDivFloor(n,yi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return Ie.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let r=Ie.getLiquidityFromTokenAmountA(e,n,o,!1),a=Ie.getLiquidityFromTokenAmountB(t,e,i);return r.lt(a)?r:a}else return Ie.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:Ie.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new Pe(0)};if(e.lt(n)){let r=Ie.getTokenAmountAFromLiquidity(e,n,o,i),a=Ie.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:r,amountB:a}}else return{amountA:new Pe(0),amountB:Ie.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=Ie.getAmountsFromLiquidity(e,t,n,o,r),l=i?1+a:1-a,m=new Pe(new M(c.toString()).mul(l).toFixed(0)),d=new Pe(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:r,epochInfo:a,amountAddFee:c}){var A,k,T,h;let u=le.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=le.getSqrtPriceX64FromTick(t),m=le.getSqrtPriceX64FromTick(n),d=r?1+i:1-i,p=Ie.getAmountsFromLiquidity(u,l,m,o,r),[f,y]=[Le(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,c),Le(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[b,g]=[Le(new Pe(new M(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Le(new Pe(new M(p.amountB.toString()).mul(d).toFixed(0)),(h=e.mintB.extensions)==null?void 0:h.feeConfig,a,c)];return{liquidity:o,amountA:f,amountB:y,amountSlippageA:b,amountSlippageB:g,expirationTime:cn(f.expirationTime,y.expirationTime)}}},co=class{static swapCompute(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y=!1){if(d.eq(He))throw new Error("amountSpecified must not be 0");if(f||(f=r?Tt.add(Ut):It.sub(Ut)),r){if(f.lt(Tt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(It))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(He),g={amountSpecifiedRemaining:d,amountCalculated:He,sqrtPriceX64:m,tick:u>p?Math.min(p+Te.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new Pe(0)},A=p,k=n[p],T=0,h=!r&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(He)&&!g.sqrtPriceX64.eq(f);){T>10;let w={};w.sqrtPriceStartX64=g.sqrtPriceX64;let x=$.nextInitTick(k,g.tick,l,r,h),B=x||null,K=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let C=Ne.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},A,r);if(!C.isExist){if(y)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=C.nextStartIndex;let{publicKey:L}=he(e,t,A);K=L,k=n[A];try{B=$.firstInitializedTick(k,r)}catch{throw Error("not found next tick info")}}w.tickNext=B.tick,w.initialized=B.liquidityGross.gtn(0),p!==A&&K&&(g.accounts.push(K),p=A),w.tickNext<At?w.tickNext=At:w.tickNext>ht&&(w.tickNext=ht),w.sqrtPriceNextX64=le.getSqrtPriceX64FromTick(w.tickNext);let I;if(r&&w.sqrtPriceNextX64.lt(f)||!r&&w.sqrtPriceNextX64.gt(f)?I=f:I=w.sqrtPriceNextX64,[g.sqrtPriceX64,w.amountIn,w.amountOut,w.feeAmount]=co.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(w.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(w.amountIn.add(w.feeAmount)),g.amountCalculated=g.amountCalculated.sub(w.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(w.amountOut),g.amountCalculated=g.amountCalculated.add(w.amountIn.add(w.feeAmount))),g.sqrtPriceX64.eq(w.sqrtPriceNextX64)){if(w.initialized){let C=B.liquidityNet;r&&(C=C.mul(In)),g.liquidity=Ie.addDelta(g.liquidity,C)}h=w.tickNext!=g.tick&&!r&&k.startTickIndex===w.tickNext,g.tick=r?w.tickNext-1:w.tickNext}else if(g.sqrtPriceX64!=w.sqrtPriceStartX64){let C=le.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&k.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:w,isExist:x}=Te.nextInitializedTickArray(g.tick,l,r,o,i);x&&p!==w&&(g.accounts.push(he(e,t,w).publicKey),p=w)}catch{}return{allTrade:!0,amountSpecifiedRemaining:He,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i,r){let a={sqrtPriceX64Next:new Pe(0),amountIn:new Pe(0),amountOut:new Pe(0),feeAmount:new Pe(0)},c=o.gte(He);if(c){let l=ye.mulDivFloor(o,Rr.sub(new Pe(i.toString())),Rr);a.amountIn=r?Ie.getTokenAmountAFromLiquidity(t,e,n,!0):Ie.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=le.getNextSqrtPriceX64FromInput(e,n,l,r)}else a.amountOut=r?Ie.getTokenAmountBFromLiquidity(t,e,n,!1):Ie.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(In).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=le.getNextSqrtPriceX64FromOutput(e,n,o.mul(In),r);let u=t.eq(a.sqrtPriceX64Next);return r?(u&&c||(a.amountIn=Ie.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=Ie.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:Ie.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:Ie.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(In))&&(a.amountOut=o.mul(In)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=ye.mulDivCeil(a.amountIn,new Pe(i),Rr.sub(new Pe(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var rt=60,uo=512,$=class{static getTickArrayAddressByTick(e,t,n,o){let i=$.getTickArrayStartIndexByTick(n,o),{publicKey:r}=he(e,t,i);return r}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=$.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=rt)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Te.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*Te.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*rt,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*rt,i=Math.floor(t/o)+512,r=Math.abs(i);return{isInitialized:e.testn(r),startIndex:(r-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*rt:e+t*rt}static mergeTickArrayBitmap(e){let t=new Mp(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let r=Math.floor(o/(n*rt));return[...$.searchLowBitFromStart(e,t,r-1,i,n),...$.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return $.searchHightBitFromStart(e,t,-7680,uo,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=$.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=he(e,t,c);r.push({tickArrayStartIndex:c,tickArrayAddress:u})}return r}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>$.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=Te.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let r=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>$.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(r[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=Te.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<At||e>ht}static nextInitTick(e,t,n,o,i){if(Te.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<rt;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=rt-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<rt;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=le.getSqrtPriceX64FromTick(t),i=le.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),i=mo.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=le.getSqrtPriceX64FromTick(i),a=le.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=le.getSqrtPriceX64FromTick(t),i=le.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new M(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new M(1).div(t),i=mo.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=le.getSqrtPriceX64FromTick(i),a=le.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new M(1).div(a)}}};var Yc=E([xe(8),D("bump"),Dt("index"),F(""),Pt("protocolFeeRate"),Pt("tradeFeeRate"),Dt("tickSpacing"),Q(P(),8,"")]),vp=E([Pt("blockTimestamp"),Lo("tickCumulative"),Q(P(),4)]),Hc=E([xe(8),Ye("initialized"),P("recentEpoch"),Dt("observationIndex"),F("poolId"),Q(vp,100,"observations"),Q(P(),4)]),Fp=E([D("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),re("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),re("rewardGrowthGlobalX64")]),lo=E([xe(8),D("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),D("mintDecimalsA"),D("mintDecimalsB"),Dt("tickSpacing"),re("liquidity"),re("sqrtPriceX64"),qe("tickCurrent"),Pt(),re("feeGrowthGlobalX64A"),re("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),re("swapInAmountTokenA"),re("swapOutAmountTokenB"),re("swapInAmountTokenB"),re("swapOutAmountTokenA"),D("status"),Q(D(),7,""),Q(Fp,3,"rewardInfos"),Q(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Q(P(),15*4-3,"padding")]),_p=E([re("growthInsideLastX64"),P("rewardAmountOwed")]),vo=E([xe(8),D("bump"),F("nftMint"),F("poolId"),qe("tickLower"),qe("tickUpper"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(_p,3,"rewardInfos"),Q(P(),8,"")]),vT=E([xe(8),D("bump"),F("poolId"),qe("tickLowerIndex"),qe("tickUpperIndex"),re("liquidity"),re("feeGrowthInsideLastX64A"),re("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Q(re(),3,"rewardGrowthInside"),Q(P(),8,"")]),Ep=E([qe("tick"),lc("liquidityNet"),re("liquidityGross"),re("feeGrowthOutsideX64A"),re("feeGrowthOutsideX64B"),Q(re(),3,"rewardGrowthsOutsideX64"),Q(Pt(),13,"")]),wi=E([xe(8),F("poolId"),qe("startTickIndex"),Q(Ep,rt,"ticks"),D("initializedTickCount"),Q(D(),115,"")]),Qc=E([xe(329),Q(F(),100,"whitelistMints")]),zc=E([xe(8),F("poolId"),Q(Q(P(),8),fa,"positiveTickArrayBitmap"),Q(Q(P(),8),fa,"negativeTickArrayBitmap")]),FT=E([P(),D("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(P(),8)]),jc=E([xe(8),D("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),P("recentEpoch"),Q(P(),8)]);Hc.span;var Zc=we("Raydium_Clmm"),Xt={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},$c=[188,37,179,131,82,150,84,73],Jc=[16,72,250,198,14,162,212,19],Be=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=E([re("sqrtPriceX64"),P("zero")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(k=>({pubkey:k,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:He},g);let A=Buffer.from([...Xt.createPool,...g]);return new ft({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new Y(o.address),new Y(i.address)],{publicKey:m}=Wc(t,r,u,l),{publicKey:d}=qc(t,m),{publicKey:p}=ma(t,m,u),{publicKey:f}=ma(t,m,l),y=Je(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,r,d,u,p,new Y(o.programId||Oe),l,f,new Y(i.programId||Oe),y,a,c)];return{signers:[],instructions:b,instructionTypes:[X.CreateAccount,X.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:y,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I){let C=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:w,amountMaxA:x,amountMaxB:B,withMetadata:K==="create",baseFlag:!1,optionBaseFlag:0},O);let R=Buffer.from([...Xt.openPosition,...O]);return new ft({keys:N,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K){let I=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{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:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:w,amountMaxB:x,withMetadata:B==="create",baseFlag:!1,optionBaseFlag:0},N);let O=Buffer.from([...Xt.openPositionWithTokenEx,...N]);return new ft({keys:L,programId:e,data:O})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new Y(e.programId),new Y(e.id)],y;if(l)y=new Y((await l(1))[0]);else{let K=Nr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:w}=Bt(p,y),{publicKey:x}=mn(p,f,o,i),B=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0);return{signers:d,instructions:[B],instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new Y(e.programId),new Y(e.id)],y;if(l)y=new Y((await l(1))[0]);else{let K=Nr.generate();d.push(K),y=K.publicKey}let b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(p,f,b),{publicKey:k}=he(p,f,g),{publicKey:T}=m?ee(n.wallet,y,je):ee(n.wallet,y,Oe),{publicKey:h}=Bn(y),{publicKey:w}=Bt(p,y),{publicKey:x}=mn(p,f,o,i),B=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,u,r,a,c,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),o,i,b,g,u,r,a,c,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[B],signers:d,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K,I){let C=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),L=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...L],O=Buffer.alloc(C.span);C.encode({tickLowerIndex:A,tickUpperIndex:k,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ga(0),amountMaxA:x==="MintA"?B:K,amountMaxB:x==="MintA"?K:B,withMetadata:w==="create",baseFlag:x==="MintA",optionBaseFlag:1},O);let R=Buffer.from([...Xt.openPosition,...O]);return new ft({keys:N,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w,x,B,K){let I=E([qe("tickLowerIndex"),qe("tickUpperIndex"),qe("tickArrayLowerStartIndex"),qe("tickArrayUpperStartIndex"),re("liquidity"),P("amountMaxA"),P("amountMaxB"),Ye("withMetadata"),D("optionBaseFlag"),Ye("baseFlag")]),C=[...K?[{pubkey:K,isSigner:!1,isWritable:!0}]:[]],L=[{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:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],N=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:T,liquidity:new ga(0),amountMaxA:w==="MintA"?x:B,amountMaxB:w==="MintA"?B:x,withMetadata:h==="create",baseFlag:w==="MintA",optionBaseFlag:1},N);let O=Buffer.from([...Xt.openPositionWithTokenEx,...N]);return new ft({keys:L,programId:e,data:O})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:r,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new Y((await l(1))[0]);else{let K=Nr.generate();p.push(K),d=K.publicKey}let[f,y]=[new Y(e.programId),new Y(e.id)],b=$.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=$.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:A}=he(f,y,b),{publicKey:k}=he(f,y,g),{publicKey:T}=m?ee(n.wallet,d,je):ee(n.wallet,d,Oe),{publicKey:h}=Bn(d),{publicKey:w}=Bt(f,d),{publicKey:x}=mn(f,y,o,i),B=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(t.mintA.address),new Y(t.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,x,A,k,w,n.tokenAccountA,n.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(t.mintA.address),new Y(t.mintB.address),o,i,b,g,r,a,c,u,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?Je(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:A,tickArrayUpper:k,positionNftAccount:T,metadataAccount:h,personalPosition:w,protocolPosition:x},instructions:[B],signers:p,instructionTypes:[X.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=E([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:r?je:Oe,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Xt.closePosition,...u]);return new ft({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new Y(e.programId),a=i?ee(n.wallet,o.nftMint,je).publicKey:ee(n.wallet,o.nftMint,Oe).publicKey,{publicKey:c}=Bt(r,o.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,o.nftMint,a,c,i)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[X.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A){let k=E([re("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},w);let x=Buffer.from([...Xt.increaseLiquidity,...w]);return new ft({keys:h,programId:e,data:x})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,l]=[new Y(e.programId),new Y(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Bt(u,n.nftMint),{publicKey:g}=mn(u,l,n.tickLower,n.tickUpper),A=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Je(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[A],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:r,otherAmountMax:a,nft2022:c}){let[u,l]=[new Y(e.programId),new Y(e.id)],m=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=he(u,l,m),{publicKey:f}=he(u,l,d),{publicKey:y}=c?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,Oe),{publicKey:b}=Bt(u,n.nftMint),{publicKey:g}=mn(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?Je(u,l).publicKey:void 0)],signers:[],instructionTypes:[X.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A){let k=E([re("liquidity"),P("amountMaxA"),P("amountMaxB"),D("optionBaseFlag"),Ye("baseFlag")]),T=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],w=Buffer.alloc(k.span);k.encode({liquidity:new ga(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},w);let x=Buffer.from([...Xt.increaseLiquidity,...w]);return new ft({keys:h,programId:e,data:x})}static decreaseLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([re("liquidity"),P("amountMinA"),P("amountMinB")]),h=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...y.map(K=>[{pubkey:K.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:K.rewardMint,isSigner:!1,isWritable:!1}]).flat()],w=[{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:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],x=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:A},x);let B=Buffer.from([...Xt.decreaseLiquidity,...x]);return new ft({keys:w,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],d=$.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=$.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=he(l,m,d),{publicKey:y}=he(l,m,p),{publicKey:b}=u?ee(o.wallet,n.nftMint,je):ee(o.wallet,n.nftMint,c),{publicKey:g}=Bt(l,n.nftMint),{publicKey:A}=mn(l,m,n.tickLower,n.tickUpper),k=[];for(let w=0;w<e.rewardDefaultInfos.length;w++)k.push({poolRewardVault:new Y(t.rewardInfos[w].vault),ownerRewardVault:o.rewardAccounts[w],rewardMint:new Y(e.rewardDefaultInfos[w].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,A,f,y,o.tokenAccountA,o.tokenAccountB,new Y(t.vault.A),new Y(t.vault.B),new Y(e.mintA.address),new Y(e.mintB.address),k,i,r,a,Ne.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?Je(l,m).publicKey:void 0);return T.push(h),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:A},signers:[],instructions:T,instructionTypes:[X.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g){let A=E([P("amount"),P("otherAmountThreshold"),re("sqrtPriceLimitX64"),Ye("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(x=>({pubkey:x,isSigner:!1,isWritable:!0}))],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:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let w=Buffer.from([...Xt.swap,...h]);return new ft({keys:T,programId:e,data:w})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],[d,p]=[new Y(t.vault.A),new Y(t.vault.B)],[f,y]=[new Y(e.mintA.address),new Y(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new Y(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?f:y,b?y:f,u,n,r,a,c,!0,Je(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,outputMint:i,amountOut:r,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new Y(e.programId),new Y(e.id)],[d,p]=[new Y(t.vault.A),new Y(t.vault.B)],[f,y]=[new Y(e.mintA.address),new Y(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new Y(e.config.id),b?o.tokenAccountB:o.tokenAccountA,b?o.tokenAccountA:o.tokenAccountB,b?p:d,b?d:p,b?y:f,b?f:y,u,n,r,a,c,!1,Je(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[X.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=E([P("openTime"),P("endTime"),re("emissionsPerSecondX64")]),f=[{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:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:ne(l),endTime:ne(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...Xt.initReward,...y]);return new ft({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a=Dc(i,r,o.mint).publicKey,c=Pi(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,r,c,new Y(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[X.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=E([D("rewardIndex"),re("emissionsPerSecondX64"),P("openTime"),P("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],y=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:ne(l),endTime:ne(m)},y);let b=Buffer.from([...Xt.setRewardEmissions,...y]);return new ft({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new Y(t.rewardInfos[d].vault),u=new Y(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=Pi(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,r,l,new Y(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[X.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,r,a){let c=E([D("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{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:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:ir,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Xt.collectReward,...l]);return new ft({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new Y(e.programId),new Y(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new Y(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Zc.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,r,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[X.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:o,wallet:i,nftMint:r,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new Y((await c(1))[0]);else{let g=Nr.generate();u.push(g),l=g.publicKey}let m=a?ee(i,r,je).publicKey:ee(i,r,Oe).publicKey,{publicKey:d}=Bt(n,r),p=Mo(e,l).publicKey,f=ee(i,l,Oe).publicKey,y=Bn(l).publicKey,b=Be.lockPositionInstructionV2({programId:e,auth:t,payer:o,positionOwner:i,lockOwner:i,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:y,withMetadata:!0,nft2022:a,positionNftMint:r,authPositionNftAccount:ee(t,r,a?je:Oe).publicKey,positionNftProgram:a?je:Oe});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[X.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:o,lockOwner:i,positionNftAccount:r,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:y}){let b=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1}],g=E([Ye("withMetadata")]),A=Buffer.alloc(g.span);g.encode({withMetadata:y},A);let k=Buffer.from([...$c,...A]);return new ft({keys:b,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=ee(o,i,Oe),{publicKey:a}=Bt(n,i),c=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:da(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:Sn.programId,isSigner:!1,isWritable:!1}];return new ft({keys:c,programId:e,data:Buffer.from($c)})}static harvestLockPositionInstruction(e){let[t,n]=[new Y(e.poolKeys.programId),new Y(e.poolKeys.id)],o=$.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=$.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=he(t,n,o),{publicKey:a}=he(t,n,i),{publicKey:c}=ee(e.owner,e.ownerPosition.nftMint,Oe),{publicKey:u}=Bt(t,e.ownerPosition.nftMint),{publicKey:l}=mn(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new Y(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new Y(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:da(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new Y(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new Y(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:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:new Y(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new Y(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new ft({keys:p,programId:e.programId,data:Buffer.from(Jc)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:o,lockOwner:i,lockNftMint:r,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:y,userVaultA:b,userVaultB:g,mintA:A,mintB:k,rewardAccounts:T,exTickArrayBitmap:h}){let w=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],x=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Oe,isSigner:!1,isWritable:!1},{pubkey:je,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...w];return new ft({keys:x,programId:e,data:Buffer.from(Jc)})}};var Vp=E([Pt("mintAuthorityOption"),F("mintAuthority"),P("supply"),D("decimals"),D("isInitialized"),Pt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as oI}from"@solana/web3.js";import{MintLayout as rI,TOKEN_PROGRAM_ID as aI}from"@solana/spl-token";var Or=s=>new ze({mint:s.address,decimals:s.decimals,symbol:s.symbol,name:s.name}),Ti=o=>{var i=o,{amount:s,isRaw:e,name:t}=i,n=Ge(i,["amount","isRaw","name"]);return new Re(new ze({mint:yt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var wt=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Ge(i,["address","programId","decimals"]);return _({chainId:101,address:yt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(_({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(_({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(_({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import el from"bn.js";var Pa=new el(25),Mr=new el(1e4);import{PublicKey as gn,SystemProgram as Dp,SYSVAR_RENT_PUBKEY as xI,TransactionInstruction as Fo}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as qp,TOKEN_PROGRAM_ID as Bi}from"@solana/spl-token";var Aa=E([D("instruction"),P("amountIn"),P("minAmountOut")]),wa=E([D("instruction"),P("maxAmountIn"),P("amountOut")]),hI=E([D("instruction"),D("nonce")]),Wp=E([D("instruction"),D("nonce"),P("startTime")]),Ii=E([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),P("swapBase2QuoteFee"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),P("swapQuote2BaseFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("withdrawQueue"),F("lpVault"),F("owner"),P("lpReserve"),Q(P(),3,"padding")]),TI=E([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),re("swapBaseInAmount"),re("swapQuoteOutAmount"),re("swapQuoteInAmount"),re("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),Q(P(),64,"padding")]),ka=E([D("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),ha=E([D("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var tl=E([P("fee")]);var nl=we("Raydium_liquidity_instruction");function ol(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=to}=s,u=Buffer.alloc(ka.span);ka.encode({instruction:3,baseAmountIn:ne(o),quoteAmountIn:ne(i),otherAmountMin:ne(a),fixedSide:r==="base"?Nt:Mu},u);let l=[S({pubkey:Bi,isWritable:!1}),S({pubkey:new gn(e.id)}),S({pubkey:new gn(t.authority),isWritable:!1}),S({pubkey:new gn(t.openOrders),isWritable:!1}),S({pubkey:new gn(t.targetOrders)}),S({pubkey:new gn(e.lpMint.address)}),S({pubkey:new gn(t.vault.A)}),S({pubkey:new gn(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(S({pubkey:c})),l.push(S({pubkey:new gn(e.marketId),isWritable:!1}),S({pubkey:n.baseTokenAccount}),S({pubkey:n.quoteTokenAccount}),S({pubkey:n.lpTokenAccount}),S({pubkey:n.owner,isWritable:!1,isSigner:!0}),S({pubkey:new gn(t.marketEventQueue),isWritable:!1})),new Fo({programId:new gn(e.programId),keys:l,data:u})}function Ta(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=to}=s,c=pt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(ha.span);ha.encode({instruction:4,lpAmount:ne(o),baseAmountMin:ne(i),quoteAmountMin:ne(r)},l);let m=[S({pubkey:Bi,isWritable:!1}),S({pubkey:c.id}),S({pubkey:c.authority,isWritable:!1}),S({pubkey:c.openOrders}),S({pubkey:c.targetOrders}),S({pubkey:c.mintLp.address}),S({pubkey:c.vault.A}),S({pubkey:c.vault.B})];return u===5?m.push(S({pubkey:a})):(m.push(S({pubkey:c.id})),m.push(S({pubkey:c.id}))),m.push(S({pubkey:c.marketProgramId,isWritable:!1}),S({pubkey:c.marketId}),S({pubkey:c.marketBaseVault}),S({pubkey:c.marketQuoteVault}),S({pubkey:c.marketAuthority,isWritable:!1}),S({pubkey:n.lpTokenAccount}),S({pubkey:n.baseTokenAccount}),S({pubkey:n.quoteTokenAccount}),S({pubkey:n.owner,isWritable:!1,isSigner:!0}),S({pubkey:c.marketEventQueue}),S({pubkey:c.marketBids}),S({pubkey:c.marketAsks})),new Fo({programId:c.programId,keys:m,data:l})}return new Fo({programId:c.programId,keys:[]})}function Ia({programId:s,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:r,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:y,userPcVault:b,userLpVault:g,nonce:A,openTime:k,coinAmount:T,pcAmount:h,ammConfigId:w,feeDestinationId:x}){let B=E([D("instruction"),D("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),K=[{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:qp,isSigner:!1,isWritable:!1},{pubkey:Dp.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:x,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!0,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:A,openTime:k,coinAmount:T,pcAmount:h},I),{instruction:new Fo({keys:K,programId:s,data:I}),instructionType:X.AmmV4CreatePool}}function Up({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=to},i){let r=pt(s),a=Buffer.alloc(Aa.span);Aa.encode({instruction:9,amountIn:ne(t),minAmountOut:ne(n)},a);let c=[S({pubkey:Bi,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.openOrders})];return i===4&&c.push(S({pubkey:r.targetOrders})),c.push(S({pubkey:r.vault.A}),S({pubkey:r.vault.B})),i===5&&c.push(S({pubkey:o})),c.push(S({pubkey:r.marketProgramId,isWritable:!1}),S({pubkey:r.marketId}),S({pubkey:r.marketBids}),S({pubkey:r.marketAsks}),S({pubkey:r.marketEventQueue}),S({pubkey:r.marketBaseVault}),S({pubkey:r.marketQuoteVault}),S({pubkey:r.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Fo({programId:r.programId,keys:c,data:a})}function Gp({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=to},i){let r=pt(s),a=Buffer.alloc(wa.span);wa.encode({instruction:11,maxAmountIn:ne(t),amountOut:ne(n)},a);let c=[S({pubkey:Bi,isWritable:!1}),S({pubkey:r.id}),S({pubkey:r.authority,isWritable:!1}),S({pubkey:r.openOrders}),S({pubkey:r.targetOrders}),S({pubkey:r.vault.A}),S({pubkey:r.vault.B})];return i===5&&c.push(S({pubkey:o})),c.push(S({pubkey:r.marketProgramId,isWritable:!1}),S({pubkey:r.marketId}),S({pubkey:r.marketBids}),S({pubkey:r.marketAsks}),S({pubkey:r.marketEventQueue}),S({pubkey:r.marketBaseVault}),S({pubkey:r.marketQuoteVault}),S({pubkey:r.marketAuthority,isWritable:!1}),S({pubkey:e.tokenAccountIn}),S({pubkey:e.tokenAccountOut}),S({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Fo({programId:r.programId,keys:c,data:a})}function vr(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(r==="in")return Up(q(_({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Gp(q(_({},a),{maxAmountIn:o,amountOut:i}),t);nl.logWithError("invalid params","params",s)}throw nl.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var fo=5e4,Xp=E([P("x"),P("y"),P("price")]),zp=E([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Q(Xp,fo,"DataElement")]);function Yp(s,e){return[0,fo-2]}function Hp(s){return[0,fo-2]}function Qp(s){return[0,fo-2]}function jp(s,e,t){let[n,o]=Yp(e,t),i=n,r=o,a=0,c=e*s.multiplier/t;for(;i<=r;){if(a=Math.floor((r+i)/2),a===0||a>=fo-2)return[a,a,!1];let u=s.DataElement[a].x*s.multiplier/s.DataElement[a].y,l=s.DataElement[a-1].x*s.multiplier/s.DataElement[a-1].y,m=s.DataElement[a+1].x*s.multiplier/s.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)r=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ba(s,e,t){let[n,o,i]=jp(s,e,t);if(!i)return 0;if(n===o){let r=s.DataElement[n].x;return e*s.multiplier/r}else{let r=s.DataElement[n].x,a=s.DataElement[n].y,c=s.DataElement[o].x,u=s.DataElement[o].y,l=t*(c*a-r*u),m=r*l,d=(c-r)*(e*a-r*t)*u,p=m+d;return e*s.multiplier*l/p}}function po(s,e,t){return e*s.multiplier/t}function il(s,e,t){return e*t/s.multiplier}function Zp(s,e){let[t,n]=Hp(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>fo-2)return[r,r,!1];let c=s.DataElement[r].x,u=s.DataElement[r-1].x,l=s.DataElement[r+1].x;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<u)i=r-1;else{if(a>u&&a<c)return[r-1,r,!0];if(a>c&&a<l)return[r,r+1,!0];o=r+1}}return[r,r,!1]}function $p(s,e){let[t,n]=Qp(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=fo-2)return[r,r,!1];let c=s.DataElement[r].y,u=s.DataElement[r-1].y,l=s.DataElement[r+1].y;if(a===c)return[r,r,!0];if(a===u)return[r-1,r-1,!0];if(a===l)return[r+1,r+1,!0];if(a<l)o=r+1;else{if(a<u&&a>c)return[r-1,r,!0];if(a<c&&a>l)return[r,r+1,!0];i=r-1}}return[r,r,!1]}function rl(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=Zp(s,o);if(!a)return[0,0,!1,a];if(i===r)return[s.DataElement[r].price,s.DataElement[r].y,!1,a];{let c=s.DataElement[i].x,u=s.DataElement[r].x,l=s.DataElement[i].price,m=s.DataElement[r].price,d=s.DataElement[i].y,p=s.DataElement[r].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,y;return n?(f=l+(m-l)*(e-c)/(u-c),y=d-(o-c)*s.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),y=p+(u-o)*s.multiplier/l),[f,y,!1,a]}}}function Jp(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=$p(s,o);if(!a)return[0,0,!1,a];if(i===r)return[s.DataElement[r].price,s.DataElement[r].x,!1,a];{let c=s.DataElement[i].x,u=s.DataElement[r].x,l=s.DataElement[i].price,m=s.DataElement[r].price,d=s.DataElement[i].y,p=s.DataElement[r].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,y;return n?(f=l+(m-l)*(d-e)/(d-p),y=c+m*(d-o)/s.multiplier):(f=l+(m-l)*(d-e)/(d-p),y=u-l*(o-p)/s.multiplier),[f,y,!1,a]}}}function ef(s,e){let t=rl(s,e,0,!1);return t[3]?t[0]:0}function sl(s,e,t,n){let o=Ba(s,e,t),i=po(s,e,o),r=po(s,t,o),a=po(s,n,o),c=!0,[u,l,m,d]=rl(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return il(s,p,o)}}function al(s,e,t,n){let o=Ba(s,e,t),i=po(s,e,o),r=po(s,t,o),a=po(s,n,o),c=!1,[u,l,m,d]=Jp(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return il(s,p,o)}}function tf(s){let e=zp.decode(s);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ul(s,e,t,n){let o=ef(s,po(s,e,Ba(s,e,t)))/s.multiplier;return n?o:1/o}var xi=class{constructor({connection:e,modelDataPubKey:t=to}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e,this.modelDataPubKey=t}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(this.modelDataPubKey);e&&(this._layoutData=tf(e==null?void 0:e.data))}}};import{PublicKey as rf}from"@solana/web3.js";import nB from"bn.js";import{TOKEN_PROGRAM_ID as sf}from"@solana/spl-token";import{PublicKey as nf}from"@solana/web3.js";var of=we("Raydium_liquidity_serum");function cl({programId:s,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=nf.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw of.logWithError("unable to find a viable program address nonce","params",{programId:s,marketId:e}),new Error("unable to find a viable program address nonce")}function Fr({programId:s}){let{publicKey:e}=fe([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function yo({name:s,programId:e,marketId:t}){let{publicKey:n}=fe([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function af({programId:s,marketId:e}){let{publicKey:t}=fe([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function Sa({programId:s}){return fe([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function Ka({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=yo({name:"amm_associated_seed",programId:a,marketId:t}),l=yo({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Sa({programId:a}),p=yo({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=yo({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=yo({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=af({programId:a,marketId:t}),g=yo({name:"target_associated_seed",programId:a,marketId:t}),A=yo({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=cl({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:r,lpDecimals:i,version:s,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:y,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:rf.default,configId:Fr({programId:a})}}var xa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},_r=s=>{let e={},t=sf.toBase58();return Object.keys(s).map(n=>{let o=s[n],[i,r]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:wt({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:wt({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new M(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new M(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:xa,week:xa,month:xa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Fr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new M(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:wt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Ze from"bn.js";import{PublicKey as Si}from"@solana/web3.js";import Ki from"bn.js";import{TOKEN_PROGRAM_ID as pl}from"@solana/spl-token";import{SystemProgram as bo,SYSVAR_RENT_PUBKEY as cf,Transaction as ll,TransactionInstruction as lf}from"@solana/web3.js";import{createInitializeAccountInstruction as ml,TOKEN_PROGRAM_ID as dl}from"@solana/spl-token";function uf(s="accountFlags"){let e=new Ir(s);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ca=E([xe(5),uf("accountFlags"),F("ownAddress"),P("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),F("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),xe(7)]);function mf({programId:s,marketInfo:e}){let t=E([D("version"),Pt("instruction"),P("baseLotSize"),P("quoteLotSize"),Dt("feeRateBps"),P("vaultSignerNonce"),P("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:cf,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new lf({keys:n,programId:s,data:o})}async function Er({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new ll,o=await s.getMinimumBalanceForRentExemption(165);n.add(bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:dl}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:dl}),ml(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ml(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(Ca.span),space:Ca.span,programId:t.programId}));let i=new ll;return i.add(bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await s.getMinimumBalanceForRentExemption((r=t.requestQueueSpace)!=null?r:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await s.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await s.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),bo.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await s.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),mf({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.InitAccount,X.InitAccount]},{transaction:i,signer:[],instructionTypes:[X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.CreateAccount,X.InitMarket]}]}var _o=class extends De{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d,txTipConfig:p,feePayer:f}){let y=this.scope.ownerPubKey,b=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,g=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),A=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),k=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),T=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),h=$e({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),w=$e({fromPublicKey:y,programId:pl,assignSeed:b&&`${b}-baseVault`}),x=$e({fromPublicKey:y,programId:pl,assignSeed:b&&`${b}-quoteVault`}),B=0,K=new Ki(100);function I(){let z=new Ki(0);for(;;)try{return{vaultOwner:Si.createProgramAddressSync([g.publicKey.toBuffer(),z.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:z}}catch{if(z.iaddn(1),z.gt(new Ki(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:L}=I(),N=new Ki(Math.round(10**e.decimals*n)),O=new Ki(Math.round(n*10**t.decimals*o));if(N.eq(Nt))throw Error("lot size is too small");if(O.eq(Nt))throw Error("tick size or lot size is too small");let R=await Er({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:w,quoteVault:x,vaultOwner:C,requestQueue:A,eventQueue:k,bids:T,asks:h,feeRateBps:B,quoteDustThreshold:K,vaultSignerNonce:L,baseLotSize:N,quoteLotSize:O,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),v=this.createTxBuilder(f);v.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let z of R.slice(1,R.length))v.addInstruction({instructions:z.transaction.instructions,signers:z.signer,instructionTypes:z.instructionTypes});return m===0?v.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new Si(e.mint),quoteMint:new Si(t.mint)}}):v.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:A.publicKey,eventQueue:k.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:w.publicKey,quoteVault:x.publicKey,baseMint:new Si(e.mint),quoteMint:new Si(t.mint)}})}};var Ci=class extends De{constructor(t){super(t);this.stableLayout=new xi({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:kn.MODEL_DATA_PUBKEY})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let r=new Ze(new M(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Or(t[i?"mintB":"mintA"]),[c,u]=[new Ze(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ze(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ze(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",r.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=Nt;r.isZero()||(d=m==="base"?sr(r.mul(u),c):sr(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=sr(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new at(new Ze(1)).add(o),y=new at(new Ze(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,A=new Re(a,d),k=new Re(a,b),T=new Re(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:A,maxAnotherAmount:k,minAnotherAmount:T,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:r,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",r),(i.isZero()||r.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:r.toFixed()});let{account:f}=this.scope,{bypassAssociatedCheck:y,checkCreateATAOwner:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,A]=[i.token,r.token],k=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:A.mint,associatedOnly:!1});!k&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),w=[g,A],x=[k,T],B=[i.raw,r.raw],K=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(K)||this.logAndCreateError("invalid fixedSide","fixedSide",c),K==="quote"?(w.reverse(),x.reverse(),B.reverse(),I=c==="a"?"quote":"base"):K==="base"&&(I=c==="a"?"base":"quote");let[C,L]=w,[N,O]=x,[R,v]=B,z=o!=null?o:await this.getAmmPoolKeys(n.id),H=this.createTxBuilder(p),J=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:N,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ce}=J,se=Ge(J,["tokenAccount"]);H.addInstruction(se);let Se=await f.handleTokenAccount({side:"in",amount:v,mint:L.mint,tokenAccount:O,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ae}=Se,ge=Ge(Se,["tokenAccount"]);H.addInstruction(ge);let Me=await f.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:pe}=Me,te=Ge(Me,["tokenAccount"]);return H.addInstruction(te),H.addInstruction({instructions:[ol({poolInfo:n,poolKeys:z,userKeys:{baseTokenAccount:ce,quoteTokenAccount:ae,lpTokenAccount:pe,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:v,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5AddLiquidity:X.AmmV4AddLiquidity],lookupTableAddress:z.lookupTableAccount?[z.lookupTableAccount]:[]}),H.addCustomComputeBudget(m),H.addTipInstruction(d),l===0?await H.buildV0():H.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,lpAmount:i,baseAmountMin:r,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=t,p=o!=null?o:await this.getAmmPoolKeys(n.id),[f,y,b]=[new tt(n.mintA.address),new tt(n.mintB.address),new tt(n.lpMint.address)];this.logDebug("lpAmount:",i),this.logDebug("baseAmountMin:",r),this.logDebug("quoteAmountMin:",a),i.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",i.toString());let{account:g}=this.scope,A=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});A||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let k=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:w,checkCreateATAOwner:x}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),L=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:k,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:B}=L,K=Ge(L,["tokenAccount"]);h.addInstruction(K);let N=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:w,checkCreateATAOwner:x}),{tokenAccount:I}=N,C=Ge(N,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Ta({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:A,baseTokenAccount:B,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),u===0?await h.buildV0():h.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:r,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Yn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:y,feePayer:b}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let g=this.createTxBuilder(b),A={};for(let z of this.scope.account.tokenAccountRawInfos)(A[z.accountInfo.mint.toString()]===void 0||ee(this.scope.ownerPubKey,z.accountInfo.mint,Yn).publicKey.equals(z.pubkey))&&(A[z.accountInfo.mint.toString()]=z.pubkey);let k=A[t.lpMint.address];if(k===void 0)throw Error("find lp account error in trade accounts");let T=o.add(a!=null?a:new Ze(0)),h=t.mintA.address===ze.WSOL.mint.toString(),w=t.mintB.address===ze.WSOL.mint.toString(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(B||{}),x===void 0)throw new Error("base token account not found");let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),K===void 0)throw new Error("quote token account not found");if(A[t.mintA.address]=x,A[t.mintB.address]=K,r!==void 0&&!(a!=null&&a.isZero())){let z=jt[r.programId],H=Zt({programId:new tt(r.programId),poolId:new tt(r.id),owner:this.scope.ownerPubKey,version:z}),ce,se=await this.scope.connection.getAccountInfo(H);if(se&&(ce=ui(z).decode(se.data)),z!==6&&!ce){let{instruction:Me,instructionType:ke}=li({id:new tt(r.id),programId:new tt(r.programId),version:z,ledger:H,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Me],instructionTypes:[ke]})}let ae=[];for(let Me of r.rewardInfos){let ke=Me.mint.address===ze.WSOL.mint.toString();if(A[Me.mint.address])ae.push(A[Me.mint.address]);else{let{account:Ct,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Me.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!ke,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Ct||this.logAndCreateError("farm reward account not found:",Me.mint.address),Et&&g.addInstruction(Et),ae.push(Ct)}}let ge=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],pe={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:ge,lpAccount:k,rewardAccounts:ae},te=jt[r.programId],J=te===6?mi(pe):te===5?di(pe):pi(pe),Se={3:X.FarmV3Withdraw,5:X.FarmV5Withdraw,6:X.FarmV6Withdraw};g.addInstruction({instructions:[J],instructionTypes:[Se[te]]})}let C=await this.getAmmPoolKeys(t.id),L=Ta({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:k,baseTokenAccount:x,quoteTokenAccount:K,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?X.AmmV5RemoveLiquidity:X.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[N,O]=t.mintA.address===n.mintA.address?[x,K]:[K,x],R=await this.scope.clmm.getClmmPoolKeys(n.id),v=await Be.openPositionFromBaseInstructions(q(_({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:N,tokenAccountB:O},withMetadata:"create"},i),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...v.instructions],signers:v.signers,instructionTypes:[...v.instructionTypes],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),y===0?g.sizeCheckBuildV0({computeBudgetConfig:u}):g.sizeCheckBuild({computeBudgetConfig:u})}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:r,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g}){var O;let A=u.feePayer||((O=this.scope.owner)==null?void 0:O.publicKey),k=u.useSOLBalance&&o.mint.equals(Vr),T=u.useSOLBalance&&i.mint.equals(Vr),h=this.createTxBuilder(g),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:k?{payer:A,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:l,checkCreateATAOwner:m});h.addInstruction(x||{});let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:A,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(K||{}),w===void 0||B===void 0)throw Error("you don't has some token account");let I=Ka({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:f},{instruction:L,instructionType:N}=Ia(q(_({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:w,userPcVault:B,userLpVault:ee(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[L],instructionTypes:[N]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=lr,marketProgram:n=Gu,feeDestinationId:o=zu,tokenProgram:i,baseMintInfo:r,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:y=!1,lotSize:b=1,tickSize:g=.01,txVersion:A,computeBudgetConfig:k,txTipConfig:T,feePayer:h}){var $n,ko,ho;let w=this.scope.ownerPubKey,x=m.feePayer||(($n=this.scope.owner)==null?void 0:$n.publicKey),B=m.useSOLBalance&&r.mint.equals(Vr),K=m.useSOLBalance&&a.mint.equals(Vr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-market`}),L=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-request`}),N=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-event`}),O=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-bids`}),R=$e({fromPublicKey:w,programId:n,assignSeed:I&&`${I}-asks`}),v=$e({fromPublicKey:w,programId:Yn,assignSeed:I&&`${I}-baseVault`}),z=$e({fromPublicKey:w,programId:Yn,assignSeed:I&&`${I}-quoteVault`}),H=0,ce=new Ze(100);function se(){let Wt=new Ze(0);for(;;)try{return{vaultOwner:tt.createProgramAddressSync([C.publicKey.toBuffer(),Wt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Wt}}catch{if(Wt.iaddn(1),Wt.gt(new Ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:ae,vaultSignerNonce:ge}=se(),pe=new Ze(Math.round(10**r.decimals*b)),te=new Ze(Math.round(b*10**a.decimals*g));if(pe.eq(Nt))throw Error("lot size is too small");if(te.eq(Nt))throw Error("tick size or lot size is too small");let J=await Er({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ae,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:v,quoteVault:z,requestQueue:L,eventQueue:N,bids:O,asks:R,feeRateBps:H,quoteDustThreshold:ce,vaultSignerNonce:ge,baseLotSize:pe,quoteLotSize:te,lowestFeeMarket:d}}),Se=this.createTxBuilder(h);Se.addInstruction({instructions:J[0].transaction.instructions,signers:J[0].signer});for await(let Wt of J.slice(1,J.length))Se.addInstruction({instructions:Wt.transaction.instructions,signers:Wt.signer,instructionTypes:Wt.instructionTypes});let{account:Me,instructionParams:ke}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:B?{payer:x,amount:c}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:f,checkCreateATAOwner:y,assignSeed:B&&I?`${I}-wsol`:void 0});Se.addInstruction(ke||{});let{account:Ct,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:K?{payer:x,amount:u}:void 0,notUseTokenAccount:K,skipCloseAccount:!K,associatedOnly:K?!1:f,checkCreateATAOwner:y,assignSeed:K&&I?`${I}-wsol`:void 0});if(Se.addInstruction(Et||{}),Me===void 0)throw Error("you don't has base token account");if(Ct===void 0)throw Error("you don't has quote token account");let et=Ka({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Vt={programId:t,ammId:et.id,ammAuthority:et.authority,ammOpenOrders:et.openOrders,lpMint:et.lpMint,coinMint:et.baseMint,pcMint:et.quoteMint,coinVault:et.baseVault,pcVault:et.quoteVault,withdrawQueue:et.withdrawQueue,ammTargetOrders:et.targetOrders,poolTempLp:et.lpVault,marketProgramId:et.marketProgramId,marketId:et.marketId,ammConfigId:et.configId,feeDestinationId:o},{instruction:rs,instructionType:ss}=Ia(q(_({},Vt),{userWallet:this.scope.ownerPubKey,userCoinVault:Me,userPcVault:Ct,userLpVault:ee(this.scope.ownerPubKey,et.lpMint,i).publicKey,nonce:et.nonce,openTime:l,coinAmount:c,pcAmount:u}));Se.addInstruction({instructions:[rs],instructionTypes:[ss]});let wo=B||K?[((ko=ke==null?void 0:ke.instructions)==null?void 0:ko[0])||((ho=Et==null?void 0:Et.instructions)==null?void 0:ho[0])].filter(Wt=>!!Wt):void 0;return A===0?Se.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:wo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Vt)}):Se.sizeCheckBuild({computeBudgetConfig:k,splitIns:wo,address:_({requestQueue:L.publicKey,eventQueue:N.publicKey,bids:O.publicKey,asks:R.publicKey,baseVault:v.publicKey,quoteVault:z.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Vt)})}async getCreatePoolFee({programId:t}){let n=Fr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return tl.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:r}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,y]=m,[b,g]=d,A=t.version===4,k;if(A)k=new M(y.toString()).div(10**g).div(new M(f.toString()).div(10**b));else{let N=ul(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new M(1e6).div(N*1e6):k=new M(N*1e6).div(1e6)}let T=n,h=new Ze(0),w=new Ze(0);if(!T.isZero())if(A){w=Wn(T.mul(Pa),Mr);let N=T.sub(w),O=f.add(N);h=y.mul(N).div(O)}else{w=T.mul(new Ze(2)).div(new Ze(1e4));let N=T.sub(w);p==="quote"?h=new Ze(sl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber())):h=new Ze(al(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),N.toNumber()))}let x=new Ze(new M(h.toString()).mul(1-r).toFixed(0)),B=h,K=x,I=new M(h.toString()).div(new M(T.sub(w).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new M(h.toString()).div(10**g).div(new M(T.sub(w).toString()).div(10**b)));let C=k.sub(I).div(k).mul(100);return{amountOut:B,minAmountOut:K,currentPrice:k,executionPrice:I,priceImpact:C,fee:w}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:o,mintOut:i,slippage:r}){let{baseReserve:a,quoteReserve:c}=t;o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=o.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${r*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,y]=d,b=new M(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ze(0),A=n;if(!A.isZero()){A.gt(y)&&(A=y.sub(new Ze(1)));let K=y.sub(A);g=f.mul(A).div(K).mul(Mr).div(Mr.sub(Pa))}let k=new Ze(new M(g.toString()).mul(1+r).toFixed(0)),T=g,h=k;this.logDebug("amountIn:",new M(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let w=null;!g.isZero()&&!A.isZero()&&(w=new M(A.toString()).div(10**m.decimals).div(new M(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${w.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(w).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let x=b.mul(T.toString()),B=x.sub(n.toString()).abs().div(x);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:w,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:r,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){let p=this.createTxBuilder(d),{associatedOnly:f=!0,inputUseSolBalance:y=!0,outputUseSolBalance:b=!0}=u||{},[g,A]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],k=y&&g.address===Z.toBase58(),T=b&&A.address===Z.toBase58(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(g.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:f});p.addInstruction(w||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:k,associatedOnly:f});let{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Yn,mint:new tt(A.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(B||{}),x===void 0&&this.logAndCreateError("output token account not found",{token:A.symbol||A.address,tokenAccountOut:x,outputTokenUseSolBalance:T,associatedOnly:f});let K=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[vr({version:I,poolKeys:K,userKeys:{tokenAccountIn:h,tokenAccountOut:x,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[I===4?X.AmmV4SwapBaseIn:X.AmmV5SwapBaseIn]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await Ee(this.scope.connection,t.map(l=>({pubkey:new tt(l)})),n),i={},r=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Ii.decode(m.accountInfo.data);i[String(t[l])]=q(_({},d),{programId:m.accountInfo.owner}),r.push(d.baseVault,d.quoteVault)}let a={},c=await Ee(this.scope.connection,r.map(l=>({pubkey:new tt(l)})),n);for(let l=0;l<r.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+r[l]);a[String(r[l])]=new Ze(df.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=q(_({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=_r({[t]:n}),i=o[t],r=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:r[0]}}};import{PublicKey as j}from"@solana/web3.js";import xt from"bn.js";import{AccountLayout as fl,createAssociatedTokenAccountIdempotentInstruction as yl,TOKEN_2022_PROGRAM_ID as Hn,TOKEN_PROGRAM_ID as Ri}from"@solana/spl-token";var Li=class extends De{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var x;let{programId:t,owner:n=((x=this.scope.owner)==null?void 0:x.publicKey)||j.default,mint1:o,mint2:i,ammConfig:r,initialPrice:a,computeBudgetConfig:c,forerunCreate:u,getObserveState:l,txVersion:m,txTipConfig:d,feePayer:p}=e,f=this.createTxBuilder(p),[y,b,g]=new xt(new j(o.address).toBuffer()).gt(new xt(new j(i.address).toBuffer()))?[i,o,new M(1).div(a)]:[o,i,a],A=le.priceToSqrtPriceX64(g,y.decimals,b.decimals),k=[],T=[];y.programId===Hn.toBase58()&&T.push(pa(t,new j(y.address)).publicKey),b.programId===Hn.toBase58()&&T.push(pa(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((B,K)=>{B&&k.push(T[K])});let w=await Be.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:A,forerunCreate:!l&&u,extendMintAccount:k});return f.addInstruction(w),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(_({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:w.address.mintAVault.toString(),B:w.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:_({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:b,feeRate:r.tradeFeeRate,openTime:"0",programId:t.toString(),price:g.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:[]},burnPercent:0},Fc),forerunCreate:u}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txTipConfig:y,txVersion:b,feePayer:g}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),w=n.useSOLBalance&&e.mintB.address===Z.toString(),[x,B]=r==="MintA"?[a,c]:[c,a],{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});K&&(k=K),A.addInstruction(I||{});let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:l,checkCreateATAOwner:m});C&&(T=C),A.addInstruction(L||{}),(!k||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:k==null?void 0:k.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let N=t||await this.getClmmPoolKeys(e.id),O=await Be.openPositionFromBaseInstructions({poolInfo:e,poolKeys:N,ownerInfo:q(_({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return A.addInstruction(O),A.addCustomComputeBudget(f),A.addTipInstruction(y),A.versionBuild({txVersion:b,extInfo:_({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:r,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,txTipConfig:f,getEphemeralSigners:y,nft2022:b,feePayer:g}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let A=this.createTxBuilder(g),k=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),w=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:x,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});x&&(k=x),A.addInstruction(B||{});let{account:K,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,checkCreateATAOwner:l});K&&(T=K),A.addInstruction(I||{}),(k===void 0||T===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),L=await Be.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return A.addInstruction(L),A.addCustomComputeBudget(p),A.addTipInstruction(f),A.versionBuild({txVersion:d,extInfo:{address:L.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:r,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e,y=this.createTxBuilder(f),b,g,A=c.useSOLBalance&&t.mintA.address===Z.toString(),k=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(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:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:u,checkCreateATAOwner:l});w&&(g=w),y.addInstruction(x||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=n!=null?n:await this.getClmmPoolKeys(t.id),K=Be.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:B,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},liquidity:a,amountMaxA:i,amountMaxB:r,nft2022:(I=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:I.owner.equals(Hn)});return y.addInstruction(K),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:K.address}})}async increasePositionFromBase(e){var K;let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:r,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=this.createTxBuilder(p),y,b,g=a.useSOLBalance&&t.mintA.address===Z.toString(),A=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:k,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:g||(o==="MintA"?i:r).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:r}:void 0,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k&&(y=k),f.addInstruction(T||{});let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(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:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(w||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=await this.getClmmPoolKeys(t.id),B=Be.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:x,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(K=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:K.owner.equals(Hn)});return f.addInstruction(B),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:B.address}})}async decreaseLiquidity(e){var N;let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:r,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txTipConfig:d,txVersion:p,feePayer:f}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let y=this.createTxBuilder(f),b=i.useSOLBalance&&t.mintA.address===Z.toString(),g=i.useSOLBalance&&t.mintB.address===Z.toString(),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});A=T,h&&y.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k=w,x&&y.addInstruction(x);let B=[];for(let O of t.rewardDefaultInfos){let R=i.useSOLBalance&&O.mint.address===Z.toString(),v;if(O.mint.address===t.mintA.address)v=A;else if(O.mint.address===t.mintB.address)v=k;else{let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});v=z,H&&y.addInstruction(H)}B.push(v)}!A&&!k&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let K=n!=null?n:await this.getClmmPoolKeys(t.id),I=(N=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:N.owner.equals(Hn),C=await Be.decreaseLiquidityInstructions({poolInfo:t,poolKeys:K,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k,rewardAccounts:B},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[X.ClmmDecreasePosition]});let L=_({},C.address);if(i.closePosition){let O=await Be.closePositionInstructions({poolInfo:t,poolKeys:K,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:O.instructions,endInstructionTypes:O.instructionTypes}),L=_(_({},L),O.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:L}})}async lockPosition(e){var f;let{programId:t=ei,authProgramId:n=mr,poolProgramId:o=eo,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Be.makeLockPositions({programId:t,authProgramId:n,poolProgramId:o,wallet:this.scope.ownerPubKey,payer:r!=null?r:this.scope.ownerPubKey,nftMint:i.nftMint,getEphemeralSigners:l,nft2022:(f=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:f.owner.equals(Hn)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=ei,authProgramId:n=mr,clmmProgram:o=eo,poolKeys:i,lockData:r,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,f=i||await this.getClmmPoolKeys(r.poolId.toString()),y=this.createTxBuilder(p),b=await this.scope.connection.getAccountInfo(r.positionId);b||this.logger.logWithError("position not found",r.positionId);let g=vo.decode(b.data),A=a.useSOLBalance&&f.mintA.address===Z.toString(),k=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:A?!1:c,checkCreateATAOwner:u});T=w,x&&y.addInstruction(x);let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:k?!1:c,checkCreateATAOwner:u});h=B,K&&y.addInstruction(K);let I={},C=[];for(let ae of f.rewardInfos){let ge=a.useSOLBalance&&ae.mint.address===Z.toString(),pe=I[ae.mint.address];if(!pe){let{account:te,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ae.mint.programId),mint:new j(ae.mint.address),notUseTokenAccount:ge,owner:this.scope.ownerPubKey,skipCloseAccount:!ge,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:ge?!1:c});pe=te,J&&y.addInstruction(J)}I[ae.mint.address]=pe,C.push(pe)}let L=Mo(t,r.lockNftMint).publicKey,N=ee(this.scope.ownerPubKey,r.lockNftMint,Ri).publicKey,O=$.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=$.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:v}=he(new j(f.programId),r.poolId,O),{publicKey:z}=he(new j(f.programId),r.poolId,R),{publicKey:H}=mn(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),ce=[];for(let ae=0;ae<f.rewardInfos.length;ae++)ce.push({poolRewardVault:new j(f.rewardInfos[ae].vault),ownerRewardVault:C[ae],rewardMint:new j(f.rewardInfos[ae].mint.address)});let se=await Be.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:L,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:N,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:H,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:v,tickArrayUpper:z,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:ce,exTickArrayBitmap:Je(o,r.poolId).publicKey});return y.addInstruction({instructions:[se],instructionTypes:[X.ClmmHarvestLockPosition]}),y.addCustomComputeBudget(l),y.addTipInstruction(m),y.versionBuild({txVersion:d})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){var m;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let c=this.createTxBuilder(a),u=t!=null?t:await this.getClmmPoolKeys(e.id),l=Be.closePositionInstructions({poolInfo:e,poolKeys:u,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(m=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:m.owner.equals(Hn)});return c.addCustomComputeBudget(i),c.addTipInstruction(r),c.addInstruction(l).versionBuild({txVersion:o,extInfo:{address:l.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txVersion:a,feePayer:c}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(c),l=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),m=n.perSecond.mul(n.endTime-n.openTime),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(n.mint.address),mint:new j(n.mint.address),notUseTokenAccount:!!l,skipCloseAccount:!l,owner:this.scope.ownerPubKey,createInfo:l?{payer:t.feePayer||this.scope.ownerPubKey,amount:new xt(new M(m.toFixed(0)).gte(m)?m.toFixed(0):m.add(1).toFixed(0))}:void 0,associatedOnly:l?!1:o,checkCreateATAOwner:i});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Be.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{programId:new j(n.mint.programId),mint:new j(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ye.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(r),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){for(let p of o)p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let m=this.createTxBuilder(l),d={};for(let p of o){let f=n.useSOLBalance&&p.mint.address===Z.toString(),y=p.perSecond.mul(p.endTime-p.openTime),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(p.mint.programId),mint:new j(p.mint.address),notUseTokenAccount:!!f,skipCloseAccount:!f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new xt(new M(y.toFixed(0)).gte(y)?y.toFixed(0):y.add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});g&&m.addInstruction(g),b||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let A=t!=null?t:await this.getClmmPoolKeys(e.id),k=Be.initRewardInstructions({poolInfo:e,poolKeys:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:b},rewardInfo:{programId:new j(p.mint.programId),mint:new j(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:ye.decimalToX64(p.perSecond)}});d=_(_({},d),k.address),m.addInstruction(k)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let l=this.createTxBuilder(u),m=t.useSOLBalance&&n.mint.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new xt(new M(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:m?!1:o,checkCreateATAOwner:i});p&&l.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),y=Be.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ye.decimalToX64(n.perSecond)}});return l.addInstruction(y),l.addCustomComputeBudget(r),l.addTipInstruction(a),l.versionBuild({txVersion:c,extInfo:{address:y.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,computeBudgetConfig:a,txTipConfig:c,txVersion:u,feePayer:l}){let m=this.createTxBuilder(l),d={};for(let p of o){p.endTime<=p.openTime&&this.logAndCreateError("reward time error","rewardInfo",p);let f=n.useSOLBalance&&p.mint.address===Z.toString(),{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(p.mint.programId),mint:new j(p.mint.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f?{payer:n.feePayer||this.scope.ownerPubKey,amount:new xt(new M(p.perSecond.mul(p.endTime-p.openTime).toFixed(0)).gte(p.perSecond.mul(p.endTime-p.openTime))?p.perSecond.mul(p.endTime-p.openTime).toFixed(0):p.perSecond.mul(p.endTime-p.openTime).add(1).toFixed(0))}:void 0,associatedOnly:f?!1:i,checkCreateATAOwner:r});b&&m.addInstruction(b),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let g=t!=null?t:await this.getClmmPoolKeys(e.id),A=Be.setRewardInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{mint:new j(p.mint.address),openTime:p.openTime,endTime:p.endTime,emissionsPerSecondX64:ye.decimalToX64(p.perSecond)}});m.addInstruction(A),d=_(_({},d),A.address)}return m.addCustomComputeBudget(a),m.addTipInstruction(c),m.versionBuild({txVersion:u,extInfo:{address:d}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u}){let l=e.rewardDefaultInfos.find(g=>g.mint.address===n.toString());l||this.logAndCreateError("reward mint error","not found reward mint",n);let m=this.createTxBuilder(u),d=t.useSOLBalance&&n.equals(Z),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(l.mint.programId),mint:n,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:o,checkCreateATAOwner:i});f&&m.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),b=Be.collectRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardMint:n});return m.addInstruction(b),m.addCustomComputeBudget(r),m.addTipInstruction(a),m.versionBuild({txVersion:c,extInfo:{address:b.address}})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l={};for(let m of n){let d=e.rewardDefaultInfos.find(A=>A.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals(Z),{account:f,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(d.mint.programId),mint:m,notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),y&&u.addInstruction(y);let b=await this.getClmmPoolKeys(e.id),g=Be.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=_(_({},l),g.address)}return u.addCustomComputeBudget(r),u.addTipInstruction(a),u.build({address:l})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintA.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=g?Tt.add(new xt(1)):It.sub(new xt(1)):T=le.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:A?!1:l,checkCreateATAOwner:m});h=B,K&&b.addInstruction(K)}let w;if(!w){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=B,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new j(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:o,amountInMax:i,priceLimit:r,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p,txTipConfig:f,feePayer:y}){let b=this.createTxBuilder(y),g=n.toString()===e.mintB.address,A=c.useSOLBalance&&e.mintA.address===Z.toBase58(),k=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new M(0))?T=n.toString()===e.mintB.address?Tt.add(new xt(1)):It.sub(new xt(1)):T=le.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,skipCloseAccount:!A,createInfo:A||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:A?!1:l,checkCreateATAOwner:m});h=B,K&&b.addInstruction(K)}let w;if(!w){let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:k||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:k?!1:l,checkCreateATAOwner:m});w=B,K&&b.addInstruction(K)}(!h||!w)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:w,mintAUseSOLBalance:A,mintBUseSOLBalance:k,associatedOnly:l});let x=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Be.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:x,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},outputMint:new j(n),amountOut:o,amountInMax:i,sqrtPriceLimitX64:T,remainingAccounts:u})),b.addCustomComputeBudget(p),b.addTipInstruction(f),b.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:o,associatedOnly:i=!0,checkCreateATAOwner:r=!1,programId:a,txVersion:c,computeBudgetConfig:u,feePayer:l,lockProgram:m=ei,lockAuth:d=mr,clmmProgram:p=eo}){var k,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)i?ee(this.scope.ownerPubKey,h.accountInfo.mint,a).publicKey.equals(h.pubkey)&&(f[h.accountInfo.mint.toString()]=h.pubkey):f[h.accountInfo.mint.toString()]=h.pubkey;let y=Object.values(t).flat().map(h=>h.nftMint),b=await Ee(this.scope.connection,y.map(h=>({pubkey:h}))),g={};b.forEach(h=>{var w,x;g[h.pubkey.toBase58()]=(x=(w=h==null?void 0:h.accountInfo)==null?void 0:w.owner)!=null?x:null});let A=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(O=>!O.liquidity.isZero()||O.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let w=h,x=o.useSOLBalance&&w.mintA.address===Z.toString(),B=o.useSOLBalance&&w.mintB.address===Z.toString(),K=f[w.mintA.address];if(!K)if(x){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new j(w.mintA.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});K=O,R&&A.addInstruction(R)}else{let O=new j(w.mintA.address);K=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintA.programId)),A.addInstruction({instructions:[yl(this.scope.ownerPubKey,K,this.scope.ownerPubKey,O,new j(w.mintA.programId))]})}let I=f[w.mintB.address];if(!I)if(B){let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new j(w.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:i,checkCreateATAOwner:r});I=O,R&&A.addInstruction(R)}else{let O=new j(w.mintB.address);I=this.scope.account.getAssociatedTokenAccount(O,new j(w.mintB.programId)),A.addInstruction({instructions:[yl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,O,new j(w.mintB.programId))]})}f[w.mintA.address]=K,f[w.mintB.address]=I;let C=[];for(let O of w.rewardDefaultInfos){let R=o.useSOLBalance&&O.mint.address===Z.toString(),v=f[O.mint.address];if(!v){let{account:z,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(O.mint.programId),mint:new j(O.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:i});v=z,H&&A.addInstruction(H)}f[O.mint.address]=v,C.push(v)}let L=await this.getClmmPoolKeys(w.id),N=[];for(let O=0;O<L.rewardInfos.length;O++)N.push({poolRewardVault:new j(L.rewardInfos[O].vault),ownerRewardVault:C[O],rewardMint:new j(L.rewardInfos[O].mint.address)});for(let O of t[h.id]){let R=(k=n==null?void 0:n[h.id])==null?void 0:k[O.nftMint.toBase58()];if(R){let v=ee(this.scope.ownerPubKey,R.lockNftMint,Ri).publicKey,z=$.getTickArrayStartIndexByTick(O.tickLower,L.config.tickSpacing),H=$.getTickArrayStartIndexByTick(O.tickUpper,L.config.tickSpacing),{publicKey:ce}=he(new j(L.programId),R.poolId,z),{publicKey:se}=he(new j(L.programId),R.poolId,H),{publicKey:ae}=mn(new j(L.programId),R.poolId,O.tickLower,O.tickUpper),ge=Mo(m,R.lockNftMint).publicKey,pe=Be.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:ge,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:v,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:ae,vaultA:new j(L.vault.A),vaultB:new j(L.vault.B),tickArrayLower:ce,tickArrayUpper:se,userVaultA:K,userVaultB:I,mintA:new j(L.mintA.address),mintB:new j(L.mintB.address),rewardAccounts:N,exTickArrayBitmap:Je(p,R.poolId).publicKey});A.addInstruction({instructions:[pe],instructionTypes:[X.ClmmHarvestLockPosition],lookupTableAddress:L.lookupTableAccount?[L.lookupTableAccount]:[]})}else{let v=Be.decreaseLiquidityInstructions({poolInfo:w,poolKeys:L,ownerPosition:O,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:K,tokenAccountB:I,rewardAccounts:C},liquidity:new xt(0),amountMinA:new xt(0),amountMinB:new xt(0),nft2022:(T=g[O.nftMint.toBase58()])==null?void 0:T.equals(Hn)});A.addInstruction(v)}}}return c===0?A.sizeCheckBuildV0({computeBudgetConfig:u}):A.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(Pi(e).publicKey);return t?Qc.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=eo}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new xt(1))).map(r=>Bt(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=vo.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=ei}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new xt(1))).map(c=>Mo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=jc.decode(c.data);i.push(u)});let r=await this.scope.connection.getMultipleAccountsInfo(i.map(c=>c.positionId)),a=[];return r.forEach(c=>{if(!c)return;let u=vo.decode(c.data);a.push(u)}),i.map((c,u)=>({position:a[u],lockInfo:c}))}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 j(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=lo.decode(r.accountInfo.data),c=le.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(_({},a),{currentPrice:c,programId:r.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await Ee(this.scope.connection,Array.from(n).map(c=>({pubkey:new j(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Yc.decode(c.accountInfo.data))});let r=await Ne.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:wt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ri.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?zn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:wt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ri.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?zn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:q(_({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ne.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(r)});return{computeClmmPoolInfo:r,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await To({connection:this.scope.connection,mints:Array.from(n).map(m=>new j(m))}),{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}]),c=Xc(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(fl.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(fl.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(_({},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:c.config,rewardInfos:i[e].rewardInfos.filter(m=>!m.tokenVault.equals(j.default)).map(m=>({mint:wt({address:m.tokenMint.toBase58(),programId:Ri.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:r}}};import{PublicKey as U}from"@solana/web3.js";import{AccountLayout as xf,NATIVE_MINT as Vo,TOKEN_PROGRAM_ID as St,createAssociatedTokenAccountIdempotentInstruction as Wo}from"@solana/spl-token";import bl from"bn.js";import Wr from"bn.js";function Ra(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function pf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Ra(s,e).gt(Ni)&&(t=t.add(new Wr(1))),[t,e]}var Ni=new Wr(0),Oi=class{static swapBaseInputWithoutFees(e,t,n){let o=e.mul(n),i=t.add(e);return o.div(i)}static swapBaseOutputWithoutFees(e,t,n){let o=t.mul(e),i=n.sub(e),[r]=pf(o,i);return r}static lpTokensToTradingTokens(e,t,n,o,i){let r=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:r,tokenAmount1:a};if(i===1)return Ra(e.mul(n),t).gt(Ni)&&r.gt(Ni)&&(r=r.add(new Wr(1))),Ra(e.mul(o),t).gt(Ni)&&a.gt(Ni)&&(a=a.add(new Wr(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import ff from"bn.js";var vt=class{static tradingFee(e,t){return jo(e,t,Ot)}static protocolFee(e,t){return ar(e,t,Ot)}static fundFee(e,t){return ar(e,t,Ot)}static creatorFee(e,t){return jo(e,t,Ot)}static splitCreatorFee(e,t,n){return ar(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Ot),o=Ot.sub(t);return n.add(o).sub(new ff(1)).div(o)}};var Mi=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swapBaseInput(e,t,n,o,i,r,a,c){let u=new bl(0),l=vt.tradingFee(e,o),m;c?(u=vt.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=vt.protocolFee(l,r),p=vt.protocolFee(l,a),f=Oi.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=vt.creatorFee(f,i),y=f.sub(u)),{newInputVaultAmount:t.add(m),newOutputVaultAmount:n.sub(f),inputAmount:e,outputAmount:y,tradeFee:l,protocolFee:d,fundFee:p,creatorFee:u}}static swapBaseOutput(e,t,n,o,i,r,a,c){let u,l=new bl(0),m;if(c)m=e;else{let b=vt.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Oi.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=vt.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=vt.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=vt.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=vt.protocolFee(u,r),y=vt.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:e.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import Qe from"bn.js";import{PublicKey as _i,TransactionInstruction as Cn,Keypair as Tf,SystemProgram as Oa}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Dr,TOKEN_2022_PROGRAM_ID as Ma,TOKEN_PROGRAM_ID as Kn}from"@solana/spl-token";var yf=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),lS=Buffer.from("amm_config","utf8"),bf=Buffer.from("pool","utf8"),gf=Buffer.from("pool_lp_mint","utf8"),Pf=Buffer.from("pool_vault","utf8"),Af=Buffer.from("observation","utf8"),wf=Buffer.from("permission","utf8");function Eo(s){return fe([yf],s)}function La(s,e,t,n){return fe([bf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function kf(s,e){return fe([gf,e.toBuffer()],s)}function gl(s,e,t){return fe([Pf,e.toBuffer(),t.toBuffer()],s)}function vi(s,e){return fe([Af,e.toBuffer()],s)}function Na({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=Eo(e).publicKey,r=s||La(e,t,n,o).publicKey,a=kf(e,r).publicKey,c=gl(e,r,n).publicKey,u=gl(e,r,o).publicKey,l=vi(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var hf=Buffer.from("locked_liquidity","utf8");function Fi(s,e){return fe([hf,e.toBuffer()],s)}function Pl(s,e){return fe([wf,e.toBuffer()],s)}var If=we("Raydium_cpmm"),Rn={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])};function Al(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountMaxA"),P("amountMaxB"),P("openTime")]),h=La(s,t,i,r).publicKey,w=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!o.equals(h),isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:ks,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1}],x=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:A,openTime:k},x),new Cn({keys:w,programId:s,data:Buffer.from([...Rn.initialize,...x])})}function wl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=E([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Ma,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(y.span);return If.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Cn({keys:b,programId:s,data:Buffer.from([...Rn.deposit,...g])})}function kl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=E([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Ma,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Vn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Cn({keys:b,programId:s,data:Buffer.from([...Rn.withdraw,...g])})}function qr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=E([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},A),new Cn({keys:g,programId:s,data:Buffer.from([...Rn.swapBaseInput,...A])})}function hl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=E([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],A=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},A),new Cn({keys:g,programId:s,data:Buffer.from([...Rn.swapBaseOutput,...A])})}async function Tl(s){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,feeNftOwner:o,getEphemeralSigners:i}=s,r=[],[a,c]=[new _i(t.id),new _i(t.lpMint.address)],u;if(i)u=new _i((await i(1))[0]);else{let g=Tf.generate();r.push(g),u=g.publicKey}let{publicKey:l}=ee(o,u,Kn),{publicKey:m}=Bn(u),{publicKey:d}=Fi(s.lockProgram,u),{publicKey:p}=ee(e.wallet,c,Kn),{publicKey:f}=ee(s.lockAuthProgram,c,Kn),y=Bf({programId:s.lockProgram,auth:s.lockAuthProgram,payer:e.feePayer,liquidityOwner:e.wallet,nftOwner:o,nftMint:u,nftAccount:l,poolId:a,lockPda:d,mintLp:c,userLpVault:p,lockLpVault:f,poolVaultA:new _i(n.vault.A),poolVaultB:new _i(n.vault.B),metadataAccount:m,lpAmount:s.lpAmount,withMetadata:(b=s.withMetadata)!=null?b:!0});return{address:{nftMint:u,nftAccount:l,metadataAccount:m,lockPda:d,userLpVault:p,lockLpVault:f},instructions:[y],signers:r,instructionTypes:[X.CpmmLockLp],lookupTableAddress:[]}}function Bf({programId:s,auth:e,payer:t,liquidityOwner:n,nftOwner:o,nftMint:i,nftAccount:r,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:y,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Oa.programId,isSigner:!1,isWritable:!1},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1}],A=E([P("lpAmount"),Ye("withMetadata")]),k=Buffer.alloc(A.span);A.encode({lpAmount:y,withMetadata:b},k);let T=Buffer.from([...Rn.lockCpLiquidity,...k]);return new Cn({keys:g,programId:s,data:T})}function va({programId:s,nftOwner:e,auth:t,nftAccount:n,lockPda:o,poolId:i,mintLp:r,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:y,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:y!=null?y:no,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Yu,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:Ma,isSigner:!1,isWritable:!1},{pubkey:Vn,isSigner:!1,isWritable:!1}],A=E([P("lpFeeAmount")]),k=Buffer.alloc(A.span);A.encode({lpFeeAmount:f},k);let T=Buffer.from([...Rn.collectCpFee,...k]);return new Cn({keys:g,programId:s,data:T})}function Fa(s,e,t,n,o,i,r,a,c,u,l,m,d){let p=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:Oa.programId,isSigner:!1,isWritable:!1}];return new Cn({keys:p,programId:s,data:Rn.collectCreatorFee})}function Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T,h,w){let x=E([P("amountA"),P("amountB"),P("openTime"),D("feeOn")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:A,isSigner:!1,isWritable:!0},{pubkey:Kn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Dr,isSigner:!1,isWritable:!1},{pubkey:Oa.programId,isSigner:!1,isWritable:!1}],K=Buffer.alloc(x.span);return x.encode({amountA:k,amountB:T,openTime:h,feeOn:w},K),new Cn({keys:B,programId:s,data:Buffer.from([...Rn.initializeWithPermission,...K])})}var Bl=E([xe(8),D("bump"),Ye("disableCreatePool"),Dt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),F("protocolOwner"),F("fundOwner"),P("creatorFeeRate"),Q(P(),15)]),Ur=E([xe(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),D("bump"),D("status"),D("lpDecimals"),D("mintDecimalA"),D("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),P("epoch"),D("feeOn"),Ye("enableCreatorFee"),Q(D(),6),P("creatorFeesMintA"),P("creatorFeesMintB"),Q(P(),28)]),TS=E([xe(8),F("configId"),Q(P(),30)]);var Ei=class extends De{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ee(this.scope.connection,e.map(m=>({pubkey:new U(m)}))),o={},i=new Set,r=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Ur.decode(d.accountInfo.data);o[String(e[m])]=q(_({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),r.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await Ee(this.scope.connection,m.map(p=>({pubkey:new U(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Bl.decode(f.data)}}let c={},u=await Ee(this.scope.connection,r.map(m=>({pubkey:new U(m)})));for(let m=0;m<r.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+r[m]);c[String(r[m])]=new Qe(xf.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA).sub(d.creatorFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB).sub(d.creatorFeesMintB);l[m]=q(_({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[r,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return q(_({},n),{[o]:q(_({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:Eo(i.programId).publicKey,mintA:wt({address:r,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[r])!=null&&c.feeConfig?zn((u=t[r])==null?void 0:u.feeConfig):void 0}}),mintB:wt({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?zn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await To({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=wt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?zn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=wt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?zn(n[t.mintB.toBase58()].feeConfig):void 0}}),r=wt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:St.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:r,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Eo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:vi(t.programId,new U(e)).publicKey.toBase58()},rpcData:t}}async createPool(f){var y=f,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}=y,p=Ge(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var v,z,H;let b=i.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=new Qe(new U(p.mintA.address).toBuffer()).lte(new Qe(new U(p.mintB.address).toBuffer())),[A,k]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],w=i.useSOLBalance&&A.address===Vo.toBase58(),x=i.useSOLBalance&&k.address===Vo.toBase58(),[B,K]=[new U(A.address),new U(k.address)],I=this.createTxBuilder(d),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:B,tokenProgram:A.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:T}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:r,checkCreateATAOwner:a});I.addInstruction(L||{});let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new U(k.address),tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:b,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(I.addInstruction(O||{}),C===void 0||N===void 0)throw Error("you don't has some token account");let R=Na({poolId:e,programId:t,configId:new U(u.id),mintA:B,mintB:K});return I.addInstruction({instructions:[Al(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,B,K,R.lpMint,C,N,ee(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((z=A.programId)!=null?z:St),new U((H=k.programId)!=null?H:St),R.observationId,T,h,o)],instructionTypes:[X.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(_({},R),{mintA:A,mintB:k,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:r,computeResult:a,computeBudgetConfig:c,txTipConfig:u,config:l,txVersion:m,feePayer:d}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:p}=this.scope,{bypassAssociatedCheck:f,checkCreateATAOwner:y}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:A,anotherAmount:k}=a||this.computePairAmount({poolInfo:q(_({},t),{lpAmount:new M(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new at(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=k.amount,h=t.mintA.address===Vo.toString(),w=t.mintB.address===Vo.toString(),x=this.createTxBuilder(d),[B,K]=[new U(t.mintA.address),new U(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||(i?o:T).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(C||{});let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:y});x.addInstruction(N||{}),!I&&!L&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let O=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),ce=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:O,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=ce,v=Ge(ce,["tokenAccount"]);x.addInstruction(v);let z=n!=null?n:await this.getCpmmPoolKeys(t.id),H=new at(new Qe(1)).sub(r);return x.addInstruction({instructions:[wl(new U(t.programId),this.scope.ownerPubKey,new U(z.authority),new U(t.id),R,I,L,new U(z.vault.A),new U(z.vault.B),B,K,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:H.mul(g).quotient,i?A.amount:T,i?T:A.amount)],instructionTypes:[X.CpmmAddLiquidity],lookupTableAddress:z.lookupTableAccount?[z.lookupTableAccount]:[]}),x.addCustomComputeBudget(c),x.addTipInstruction(u),x.versionBuild({txVersion:m})}async withdrawLiquidity(e){var v,z;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:r,txTipConfig:a,txVersion:c,feePayer:u,closeWsol:l=!0}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let m=new at(new Qe(1)).sub(i),d=await this.getRpcPoolInfo(t.id),[p,f]=[m.mul(o.mul(d.baseReserve).div(d.lpAmount)).quotient,m.mul(o.mul(d.quoteReserve).div(d.lpAmount)).quotient],y=await this.scope.fetchEpochInfo(),[b,g]=[Le(p,t.mintA.extensions.feeConfig,y,!1),Le(f,t.mintB.extensions.feeConfig,y,!1)],{account:A}=this.scope,k=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],w=T.equals(Z),x=h.equals(Z),B,K,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(w&&l),associatedOnly:!w,checkCreateATAOwner:!1});B=I,C&&k.addInstruction(C);let{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(x&&l),associatedOnly:!x,checkCreateATAOwner:!1});K=L,N&&k.addInstruction(N),(!B||!K)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",A.tokenAccounts);let O=await A.getCreatedTokenAccount({mint:new U(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",A.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return k.addInstruction({instructions:[kl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),O,B,K,new U(R.vault.A),new U(R.vault.B),T,h,new U(t.lpMint.address),o,p.sub((v=b.fee)!=null?v:new Qe(0)),f.sub((z=g.fee)!=null?z:new Qe(0)))],instructionTypes:[X.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),k.addCustomComputeBudget(r),k.addTipInstruction(a),k.versionBuild({txVersion:c})}async swap(e){var C,L,N,O,R,v;let{poolInfo:t,poolKeys:n,baseIn:o,fixedOut:i,inputAmount:r,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txTipConfig:m,txVersion:d,feePayer:p}=e,{bypassAssociatedCheck:f,checkCreateATAOwner:y,associatedOnly:b}=_({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[A,k]=[new U(t.mintA.address),new U(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new Qe((1+c)*1e4)).div(new Qe(1e4)):a.outputAmount=a.outputAmount.mul(new Qe((1-c)*1e4)).div(new Qe(1e4));let T=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:A,tokenProgram:new U((C=t.mintA.programId)!=null?C:St),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});x&&g.addInstruction(x);let{account:B,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:new U((L=t.mintB.programId)!=null?L:St),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});K&&g.addInstruction(K),(!w||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:w,mintBTokenAcc:B,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?hl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?w:B,o?B:w,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:St),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:St),o?A:k,o?k:A,vi(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):qr(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?w:B,o?B:w,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((N=t[o?"mintA":"mintB"].programId)!=null?N:St),new U((O=t[o?"mintB":"mintA"].programId)!=null?O:St),o?A:k,o?k:A,vi(new U(t.programId),new U(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?X.CpmmSwapBaseOut:X.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d})}async lockLp(e){var d,p,f,y,b;let{poolInfo:t,lpAmount:n,computeBudgetConfig:o,txTipConfig:i,txVersion:r,feePayer:a,feeNftOwner:c}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let u=this.createTxBuilder(a),l=(d=e.poolKeys)!=null?d:await this.getCpmmPoolKeys(t.id),m=await Tl({poolInfo:t,poolKeys:l,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(p=e.feePayer)!=null?p:this.scope.ownerPubKey},feeNftOwner:c!=null?c:this.scope.ownerPubKey,lockProgram:(f=e.programId)!=null?f:dr,lockAuthProgram:(y=e.authProgram)!=null?y:pr,lpAmount:n,withMetadata:(b=e.withMetadata)!=null?b:!0,getEphemeralSigners:e.getEphemeralSigners});return u.addInstruction(m),u.addCustomComputeBudget(o),u.addTipInstruction(i),u.versionBuild({txVersion:r,extInfo:m.address})}async harvestLockLp(e){var L;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=dr,authProgram:r=pr,cpmmProgram:a,computeBudgetConfig:c,txTipConfig:u,txVersion:l,closeWsol:m=!0}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let d=e.feePayer||this.scope.ownerPubKey,p=this.createTxBuilder(d),[f,y]=[new U(t.mintA.address),new U(t.mintB.address)],b=f.equals(Z),g=y.equals(Z),A,k,{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(b&&m),associatedOnly:!b,checkCreateATAOwner:!1});A=T,h&&p.addInstruction(h);let{account:w,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(g&&m),associatedOnly:!g,checkCreateATAOwner:!1});k=w,x&&p.addInstruction(x),(!A||!k)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:A,tokenAccountB:k});let B=(L=e.poolKeys)!=null?L:await this.getCpmmPoolKeys(t.id),{publicKey:K}=ee(d,o,St),{publicKey:I}=Fi(i,o),{publicKey:C}=ee(r,new U(t.lpMint.address),St);return p.addInstruction({instructions:[va({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:K,lockPda:I,poolId:new U(t.id),mintLp:new U(B.mintLp.address),userVaultA:A,userVaultB:k,poolVaultA:new U(B.vault.A),poolVaultB:new U(B.vault.B),mintA:f,mintB:y,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[X.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l})}async harvestMultiLockLp(e){var d;let{lockInfo:t,programId:n=dr,authProgram:o=pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={};for(let p of t){let{poolInfo:f,lpFeeAmount:y,nftMint:b}=p;if(y.isZero())continue;let[g,A]=[new U(f.mintA.address),new U(f.mintB.address)],k=g.equals(Z),T=A.equals(Z),h=m[f.mintA.address],w=m[f.mintB.address];if(!h)if(k){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new U(f.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});h=C,L&&l.addInstruction(L),m[f.mintA.address]=C}else{let C=new U(f.mintA.address);h=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintA.programId)),l.addInstruction({instructions:[Wo(this.scope.ownerPubKey,h,this.scope.ownerPubKey,C,new U(f.mintA.programId))]}),m[f.mintA.address]=h}if(!w)if(T){let{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new U(f.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});w=C,L&&l.addInstruction(L),m[f.mintB.address]=C}else{let C=new U(f.mintB.address);w=this.scope.account.getAssociatedTokenAccount(C,new U(f.mintB.programId)),l.addInstruction({instructions:[Wo(this.scope.ownerPubKey,w,this.scope.ownerPubKey,C,new U(f.mintB.programId))]}),m[f.mintB.address]=w}(!h||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:h,tokenAccountB:w});let x=(d=p.poolKeys)!=null?d:await this.getCpmmPoolKeys(f.id),{publicKey:B}=ee(u,b,St),{publicKey:K}=Fi(n,b),{publicKey:I}=ee(o,new U(f.lpMint.address),St);l.addInstruction({instructions:[va({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:b,nftAccount:B,lockPda:K,poolId:new U(f.id),mintLp:new U(x.mintLp.address),userVaultA:h,userVaultB:w,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.vault.B),mintA:g,mintB:A,lockLpVault:I,lpFeeAmount:y,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[X.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:r}):l.sizeCheckBuild({computeBudgetConfig:r})}async createPoolWithPermission(y){var b=y,{poolId:e,programId:t,poolFeeAccount:n,startTime:o,ownerInfo:i,associatedOnly:r=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,feeOn:p}=b,f=Ge(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var z,H,ce;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((z=this.scope.owner)==null?void 0:z.publicKey),A=new Qe(new U(f.mintA.address).toBuffer()).lte(new Qe(new U(f.mintB.address).toBuffer())),[k,T]=A?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,w]=A?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],x=i.useSOLBalance&&k.address===Vo.toBase58(),B=i.useSOLBalance&&T.address===Vo.toBase58(),[K,I]=[new U(k.address),new U(T.address)],C=this.createTxBuilder(d),{account:L,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:K,tokenProgram:k.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:h}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});C.addInstruction(N||{});let{account:O,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:w}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),L===void 0||O===void 0)throw Error("you don't has some token account");let v=Na({poolId:e,programId:t,configId:new U(u.id),mintA:K,mintB:I});return C.addInstruction({instructions:[Il(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),v.authority,v.poolId,K,I,v.lpMint,L,O,ee(this.scope.ownerPubKey,v.lpMint).publicKey,v.vaultA,v.vaultB,n,new U((H=k.programId)!=null?H:St),new U((ce=T.programId)!=null?ce:St),v.observationId,Pl(t,this.scope.ownerPubKey).publicKey,h,w,o,p)],instructionTypes:[X.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(_({},v),{mintA:k,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=no,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=a||this.scope.ownerPubKey,u=this.createTxBuilder(c),l=t!=null?t:await this.getCpmmPoolKeys(e.id),[m,d,p,f]=[new U(e.mintA.address),new U(e.mintB.address),new U(e.mintA.programId),new U(e.mintB.programId)],y=this.scope.account.getAssociatedTokenAccount(m,p),b=this.scope.account.getAssociatedTokenAccount(d,f);return u.addInstruction({instructions:[Wo(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Wo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Fa(n,this.scope.ownerPubKey,new U(l.authority),new U(l.id),new U(l.config.id),new U(l.vault.A),new U(l.vault.B),m,d,y,b,p,f)],instructionTypes:[]}),u.addCustomComputeBudget(i),u.addTipInstruction(r),u.versionBuild({txVersion:o})}async collectMultiCreatorFees({poolInfoList:e,programId:t=no,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=i||this.scope.ownerPubKey,a=this.createTxBuilder(r),c={},u=await this.scope.api.fetchPoolKeysById({idList:e.map(l=>l.id)});for(let l of e){let m=u.find(A=>A.id===l.id)||await this.getCpmmPoolKeys(l.id),[d,p,f,y]=[new U(l.mintA.address),new U(l.mintB.address),new U(l.mintA.programId),new U(l.mintB.programId)],b=c[l.mintA.address]||this.scope.account.getAssociatedTokenAccount(d,f),g=c[l.mintB.address]||this.scope.account.getAssociatedTokenAccount(p,y);c[l.mintA.address]||a.addInstruction({instructions:[Wo(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,f)]}),c[l.mintB.address]||a.addInstruction({instructions:[Wo(this.scope.ownerPubKey,g,this.scope.ownerPubKey,p,y)]}),c[l.mintA.address]=b,c[l.mintB.address]=g,a.addInstruction({instructions:[Fa(t,this.scope.ownerPubKey,new U(m.authority),new U(m.id),new U(m.config.id),new U(m.vault.A),new U(m.vault.B),d,p,b,g,f,y)],instructionTypes:[]})}return n===0?a.sizeCheckBuildV0({computeBudgetConfig:o}):a.sizeCheckBuild({computeBudgetConfig:o})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o,swapBaseIn:i=!0}){let r=n.toString()===e.mintB.address,a=e.feeOn===0||e.feeOn===2,c=i?Mi.swapBaseInput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a):Mi.swapBaseOutput(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate,e.configInfo.creatorFeeRate,e.configInfo.protocolFeeRate,e.configInfo.fundFeeRate,a),u=new M(c.outputAmount.toString()).div(c.inputAmount.toString()),l=c.outputAmount.mul(new Qe((1-o)*1e4)).div(new Qe(1e4));return{allTrade:c.inputAmount.eq(t),amountIn:t,amountOut:c.outputAmount,minAmountOut:l,executionPrice:u,fee:c.tradeFee,priceImpact:e.poolPrice.sub(u).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var T,h,w,x,B,K,I,C,L;let c=1-Number(i.toSignificant())/100,u=new Qe(new M(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Le(u,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),m=u.sub((T=l.fee)!=null?T:new Qe(0)),d=new Qe(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(w=(h=l.fee)==null?void 0:h.toString())!=null?w:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),y={amount:Nt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Sf(f,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),y=Le(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new at(new Qe(1)).add(i),g=new at(new Qe(1)).sub(i),A=Le(b.mul(y.amount.sub((x=y.fee)!=null?x:new Qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),k=Le(g.mul(y.amount.sub((B=y.fee)!=null?B:new Qe(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(I=(K=y.fee)==null?void 0:K.toString())!=null?I:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(L=(C=A.fee)==null?void 0:C.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:A,minAnotherAmount:k,liquidity:f}}};function Sf(s,e,t,n){let o=s.mul(e).div(n);!o.isZero()&&!s.mul(e).mod(n).isZero()&&(o=o.add(new Qe(1)));let i=s.mul(t).div(n);return!i.isZero()&&!s.mul(t).mod(n).isZero()&&(i=i.add(new Qe(1))),{amountA:o,amountB:i}}import{PublicKey as ve,SystemProgram as Xf}from"@solana/web3.js";import{createTransferInstruction as Wl,TOKEN_PROGRAM_ID as Fe,TOKEN_2022_PROGRAM_ID as Uo,createAssociatedTokenAccountIdempotentInstruction as Ha,createSyncNativeInstruction as zf}from"@solana/spl-token";import nt from"bn.js";var xl={[Ss.toBase58()]:3},Sl={3:Ss};var _a=E([xe(5),xe(8),F("ownAddress"),P("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),F("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),xe(7)]),Kl={3:_a};import{PublicKey as Cl}from"@solana/web3.js";var Gr=we("Serum"),Xr=class{static getProgramId(e){let t=Sl[e];return t||Gr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=xl[t];return n||Gr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Kl[e];return t||Gr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let r=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Cl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Gr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Cl.default,nonce:o}}};import{PublicKey as de,SystemProgram as Kf,TransactionInstruction as Cf}from"@solana/web3.js";import go from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Rf,TOKEN_2022_PROGRAM_ID as Lf,TOKEN_PROGRAM_ID as Nf}from"@solana/spl-token";function Of(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var w;let y=[],b=[S({pubkey:Nf,isWritable:!1}),S({pubkey:Lf,isWritable:!1}),S({pubkey:Rf,isWritable:!1}),S({pubkey:Kf.programId,isWritable:!1}),S({pubkey:e,isSigner:!0})];b.push(S({pubkey:t})),b.push(S({pubkey:o}));let g=[c,u],A=[l,m],k=[i,r,a];for(let x=0;x<g.length;x++){let B=g[x],K=k[x]===B.mintA.address;if(b.push(S({pubkey:new de(B.programId),isWritable:!1})),x===g.length-1?b.push(S({pubkey:o})):b.push(S({pubkey:n})),b.push(S({pubkey:new de(k[x])})),b.push(S({pubkey:new de(k[x+1])})),B.version===6){let I=A[x];b.push(S({pubkey:new de(I.config.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new de(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new de(B.observationId)})),b.push(S({pubkey:Vn})),b.push(S({pubkey:Je(new de(B.programId),new de(B.id)).publicKey})),y.push(Mf(B.sqrtPriceX64.toString(),K));for(let C of(w=f[x])!=null?w:[])b.push(S({pubkey:new de(C)}))}else if(B.version===5){let I=A[x];b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.authority),isWritable:!1})),b.push(S({pubkey:new de(I.marketProgramId)})),b.push(S({pubkey:new de(I.marketAuthority)})),b.push(S({pubkey:Xu,isWritable:!1})),b.push(S({pubkey:new de(I.openOrders)})),b.push(S({pubkey:new de(I.vault.A)})),b.push(S({pubkey:new de(I.vault.B)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.marketId)})),b.push(S({pubkey:new de(I.marketBids)})),b.push(S({pubkey:new de(I.marketAsks)})),b.push(S({pubkey:new de(I.marketEventQueue)})),b.push(S({pubkey:new de(I.marketBaseVault)})),b.push(S({pubkey:new de(I.marketQuoteVault)}))}else if(B.version===4){let I=A[x],C=B.status!==1;b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(I.authority),isWritable:!1})),b.push(S({pubkey:new de(C?I.id:I.marketProgramId)})),b.push(S({pubkey:new de(C?I.id:I.marketAuthority)})),b.push(S({pubkey:new de(C?I.id:I.openOrders)})),b.push(S({pubkey:new de(I.vault.A)})),b.push(S({pubkey:new de(I.vault.B)})),b.push(S({pubkey:new de(C?I.id:I.marketId)})),b.push(S({pubkey:new de(C?I.id:I.marketBids)})),b.push(S({pubkey:new de(C?I.id:I.marketAsks)})),b.push(S({pubkey:new de(C?I.id:I.marketEventQueue)})),b.push(S({pubkey:new de(C?I.id:I.marketBaseVault)})),b.push(S({pubkey:new de(C?I.id:I.marketQuoteVault)}))}else if(B.version===7){let I=A[x];b.push(S({pubkey:new de(I.authority)})),b.push(S({pubkey:new de(I.config.id)})),b.push(S({pubkey:new de(I.id)})),b.push(S({pubkey:new de(K?I.vault.A:I.vault.B)})),b.push(S({pubkey:new de(K?I.vault.B:I.vault.A)})),b.push(S({pubkey:new de(B.observationId)}))}else throw Error("pool type error")}let T=E([D("insId"),P("amountIn"),P("amountOut"),Q(re(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new Cf({keys:b,programId:s,data:h})}function Mf(s,e){if(s)if(e){let t=new go(s).div(new go(25));return t.gt(Kr)?t:Kr}else{let t=new go(s).mul(new go(25));return t.lt(Cr)?t:Cr}else return e?Kr:Cr}function Rl({routeProgram:s,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=pt(m),p=t.equals(d.mintA.address)?Tt.add(Ut):It.sub(Ut);return Be.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new go(0)),sqrtPriceLimitX64:p,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[qr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new de(m[d?"mintA":"mintB"].address),new de(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?X.CpmmSwapBaseIn:X.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[vr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new go(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?X.AmmV5SwapBaseIn:X.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Of(s,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new go(0)),n.remainingAccounts)],instructionTypes:[X.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(y=>y!==void 0),address:{}}}else throw Error("route type error")}import{ASSOCIATED_TOKEN_PROGRAM_ID as zr,TOKEN_2022_PROGRAM_ID as qf,TOKEN_PROGRAM_ID as qa}from"@solana/spl-token";import{SystemProgram as en,TransactionInstruction as Yt}from"@solana/web3.js";import qo from"bn.js";var Qn=E([P(),P("epoch"),D("curveType"),Dt("index"),P("migrateFee"),P("tradeFeeRate"),P("maxShareFeeRate"),P("minSupplyA"),P("maxLockRate"),P("minSellRateA"),P("minMigrateRateA"),P("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),Q(P(),16)]),vf=E([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),P("startTime"),P("totalAllocatedShare")]),dn=E([P(),P("epoch"),D("bump"),D("status"),D("mintDecimalsA"),D("mintDecimalsB"),D("migrateType"),P("supply"),P("totalSellA"),P("virtualA"),P("virtualB"),P("realA"),P("realB"),P("totalFundRaisingB"),P("protocolFee"),P("platformFee"),P("migrateFee"),vf.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),D("mintProgramFlag"),D("cpmmCreatorFeeOn"),Q(D(),62)]),ZK=E([P(),P("epoch"),F("poolId"),F("beneficiary"),P("claimedAmount"),P("tokenShareAmount"),Q(P(),8)]),Ll=E([D("migrateType"),D("migrateCpmmFeeOn"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod")]),Ff=E([P("epoch"),D("index"),F("configId"),Ll.replicate("bondingCurveParam"),Q(P(),50)]),Ln=E([P(),P("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Q(D(),64,"name"),Q(D(),256,"web"),Q(D(),256,"img"),F("cpConfigId"),P("creatorFeeRate"),F("transferFeeExtensionAuth"),Q(D(),180),mc(Ff,"platformCurve")]);var _f=Buffer.from("vault_auth_seed","utf8"),nC=Buffer.from("global_config","utf8"),Ef=Buffer.from("pool_vesting","utf8"),Vf=Buffer.from("platform_config","utf8"),Wf=Buffer.from("platform_fee_vault_auth_seed","utf8"),Df=Buffer.from("creator_fee_vault_auth_seed","utf8");function zt(s){return fe([_f],s)}function Do(s,e,t){return fe([ca,e.toBuffer(),t.toBuffer()],s)}function Ea(s,e,t){return fe([la,e.toBuffer(),t.toBuffer()],s)}function Po(s){return fe([Buffer.from("__event_authority","utf8")],s)}function Va(s,e){return fe([Vf,e.toBuffer()],s)}function Vi(s,e,t){return fe([Ef,e.toBuffer(),t.toBuffer()],s)}function Pn(s,e,t){return fe([e.toBuffer(),t.toBuffer()],s)}function Wa(s){return fe([Wf],s)}function An(s,e,t){return fe([e.toBuffer(),t.toBuffer()],s)}function Da(s){return fe([Df],s)}var Ht={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])};function Nl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=E([D("decimals"),Mt("name"),Mt("symbol"),Mt("uri")]),w=E([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),D("cpmmCreatorFeeOn")]),x=E([D("index"),P("supply"),P("totalFundRaisingB"),D("migrateType")]),B=E([D("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:qa,isSigner:!1,isWritable:!1},{pubkey:qa,isSigner:!1,isWritable:!1},{pubkey:an,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:dt,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),L=Buffer.alloc(b.type==="ConstantCurve"?B.span:x.span);return h.encode({decimals:d,name:p,symbol:f,uri:y},I),b.type==="ConstantCurve"?B.encode(q(_({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?x.encode(q(_({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&x.encode(q(_({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),w.encode({totalLockedAmount:g,cliffPeriod:A,unlockPeriod:k,cpmmCreatorFeeOn:T},C),new Yt({keys:K,programId:s,data:Buffer.from([...Ht.initializeV2,...I,...L,...C])})}function Ol(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k,T){let h=E([D("decimals"),Mt("name"),Mt("symbol"),Mt("uri")]),w=E([P("totalLockedAmount"),P("cliffPeriod"),P("unlockPeriod"),D("cpmmCreatorFeeOn"),D("transferFeeExtensionParamsOption"),E([Dt("transferFeeBasePoints"),P("maxinumFee")]).replicate("transferFeeExtensionParams")]),x=E([D("index"),P("supply"),P("totalFundRaisingB"),D("migrateType")]),B=E([D("index"),P("supply"),P("totalSellA"),P("totalFundRaisingB"),D("migrateType")]),K=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:qf,isSigner:!1,isWritable:!1},{pubkey:qa,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}],I=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),C=Buffer.alloc(w.span),L=Buffer.alloc(y.type==="ConstantCurve"?B.span:x.span);return h.encode({decimals:m,name:d,symbol:p,uri:f},I),y.type==="ConstantCurve"?B.encode(q(_({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?x.encode(q(_({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&x.encode(q(_({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),w.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:A,cpmmCreatorFeeOn:k,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new qo(0)}},C),new Yt({keys:K,programId:s,data:Buffer.from([...Ht.initializeWithToken2022,...I,...L,...C])})}function Yr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountB"),P("minAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.buyExactIn,...w])})}function Ml(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountA"),P("maxAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.buyExactOut,...w])})}function Hr(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountA"),P("minAmountB"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.sellExactIn,...w])})}function vl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,A,k){let T=E([P("amountB"),P("maxAmountA"),P("shareFeeRate")]),h=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:Po(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];k&&h.push({pubkey:k,isSigner:!1,isWritable:!0}),h.push({pubkey:en.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let w=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:A!=null?A:new qo(0)},w),new Yt({keys:h,programId:s,data:Buffer.from([...Ht.sellExactOut,...w])})}function Ua(s,e,t,n,o,i,r,a,c){let u=E([]),l=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Yt({keys:l,programId:s,data:Buffer.from([...Ht.claimVestedToken,...m])})}function Ga(s,e,t,n,o,i){let r=E([P("shareAmount")]),a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:en.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Yt({keys:a,programId:s,data:Buffer.from([...Ht.createVestingAccount,...c])})}function Xa(s,e,t,n,o,i,r,a,c){let u=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:en.programId,isSigner:!1,isWritable:!0},{pubkey:zr,isSigner:!1,isWritable:!0}];return new Yt({keys:u,programId:s,data:Ht.claimPlatformFee})}function Fl(s,e,t,n,o,i,r,a,c,u,l,m,d){let p=E([P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Mt("name"),Mt("web"),Mt("img"),P("creatorFeeRate")]),f=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1}],y=Buffer.alloc(8*5+Buffer.from(l,"utf-8").length+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+4*3);return p.encode({platformScale:a.platformScale,creatorScale:a.creatorScale,burnScale:a.burnScale,feeRate:c,name:l,web:m,img:d,creatorFeeRate:u},y),new Yt({keys:f,programId:s,data:Buffer.from([...Ht.createPlatformConfig,...y])})}function _l(s,e,t,n){let o=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0}],i;if(n.type==="updateClaimFeeWallet"){let r=E([D("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=E([D("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=E([D("index"),P("platformScale"),P("creatorScale"),P("burnScale")]);i=Buffer.alloc(r.span),r.encode(_({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=E([D("index"),P("value")]);i=Buffer.alloc(r.span),r.encode({index:3,value:n.value},i)}else if(n.type==="updateImg"||n.type==="updateName"||n.type==="updateWeb"){let r=E([D("index"),Mt("value")]);i=Buffer.alloc(Buffer.from(n.value,"utf-8").length+4+1*1),n.type==="updateName"?r.encode({index:4,value:n.value},i):n.type==="updateWeb"?r.encode({index:5,value:n.value},i):n.type==="updateImg"&&r.encode({index:6,value:n.value},i)}else if(n.type==="updateCpConfigId"){o.push({pubkey:n.value,isSigner:!1,isWritable:!1});let r=E([D("index")]);i=Buffer.alloc(r.span),r.encode({index:7},i)}else if(n.type==="updateAll"){o.push({pubkey:n.value.cpConfigId,isSigner:!1,isWritable:!1});let r=E([D("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),P("platformScale"),P("creatorScale"),P("burnScale"),P("feeRate"),Mt("name"),Mt("web"),Mt("img"),F("transferFeeExtensionAuth"),P("creatorFeeRate")]);i=Buffer.alloc(1+32+32+8*4+4*3+Buffer.from(n.value.name,"utf-8").length+Buffer.from(n.value.web,"utf-8").length+Buffer.from(n.value.img,"utf-8").length+32+8),r.encode({index:8,platformClaimFeeWallet:n.value.platformClaimFeeWallet,platformLockNftWallet:n.value.platformLockNftWallet,platformScale:n.value.migrateCpLockNftScale.platformScale,creatorScale:n.value.migrateCpLockNftScale.creatorScale,burnScale:n.value.migrateCpLockNftScale.burnScale,feeRate:n.value.feeRate,name:n.value.name,web:n.value.web,img:n.value.img,transferFeeExtensionAuth:n.value.transferFeeExtensionAuth,creatorFeeRate:n.value.creatorFeeRate},i)}else throw Error("updateInfo params type error");return new Yt({keys:o,programId:s,data:Buffer.from([...Ht.updatePlaformConfig,...i])})}function za(s,e,t,n,o,i,r,a){let c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1}];return new Yt({keys:c,programId:s,data:Ht.claimPlatformFeeFromVault})}function Ya(s,e,t,n,o,i,r){let a=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:en.programId,isSigner:!1,isWritable:!1},{pubkey:zr,isSigner:!1,isWritable:!1}];return new Yt({keys:a,programId:s,data:Ht.claimCreatorFee})}var fC=new qo("18446744073709551615");import Qr from"bn.js";var jn=class{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){throw Error()}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){throw Error()}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){throw Error()}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){throw Error()}static buyExactIn({poolInfo:e,amount:t}){throw Error()}static buyExactOut({poolInfo:e,amount:t}){throw Error()}static sellExactIn({poolInfo:e,amount:t}){throw Error()}static sellExactOut({poolInfo:e,amount:t}){throw Error()}};var jr=class extends jn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.add(e.realB).toString()).div(e.virtualA.sub(e.realA).toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB.add(i)).toString()).div(e.virtualA.sub(e.realA.add(o)).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){if(e.lte(n))throw Error("supply need gt total sell");let r=e.sub(n).sub(o);if(r.lte(new Qr(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new Qr(0)))throw Error("tfMinusMf <= 0");let c=a.mul(n).mul(n).div(r),u=a.mul(n).div(r).sub(t),l=c.div(u),m=t.mul(t).div(u);if(l.lt(new Qr(0))||m.lt(new Qr(0)))throw Error("invalid input 0");return{a:l,b:m,c:n}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualB.add(e.realB),outputReserve:e.virtualA.sub(e.realA)})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,inputReserve:e.virtualA.sub(e.realA),outputReserve:e.virtualB.add(e.realB)})}static getAmountOut({amountIn:e,inputReserve:t,outputReserve:n}){let o=e.mul(n),i=t.add(e);return o.div(i)}static getAmountIn({amountOut:e,inputReserve:t,outputReserve:n}){let o=t.mul(e),i=n.sub(e);return oo(o,i)}};import tn from"bn.js";import Zr from"bn.js";var $r=class extends jn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new Zr(0)))throw Error("invalid input 1");let a=new Zr(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new Zr(0))||t.lt(new Zr(0)))throw Error("invalid input 0");return{a:u,b:t,c:u}}static buyExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualB,initOutput:e.virtualA})}static buyExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualB,initOutput:e.virtualA})}static sellExactIn({poolInfo:e,amount:t}){return this.getAmountOut({amountIn:t,initInput:e.virtualA,initOutput:e.virtualB})}static sellExactOut({poolInfo:e,amount:t}){return this.getAmountIn({amountOut:t,initInput:e.virtualA,initOutput:e.virtualB})}static getAmountOut({amountIn:e,initInput:t,initOutput:n}){return n.mul(e).div(t)}static getAmountIn({amountOut:e,initInput:t,initOutput:n}){let o=t.mul(e);return oo(o,n)}};import Ft from"bn.js";import El from"bn.js";var Wi=class{static _multipler(e){return new M(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new M(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 El(o.mul(this._Q64).toFixed(0))}};Wi._Q64=new M(new El(1).shln(64).toString());var Jr=class extends jn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new M(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new M(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new M(e.virtualA.mul(e.realA).toString()).div(Wi._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new M(o.sub(i).toString()).div(e.sub(t).sub(n).toString()).mul(10**(r-a))}static getPoolEndPriceReal({poolInfo:e,decimalA:t,decimalB:n}){let o=e.totalSellA.sub(e.realA),i=e.totalFundRaisingB.sub(e.realB);return new M(e.virtualB.add(e.realB).add(i).toString()).div(e.virtualA.sub(e.realA).add(o).toString()).mul(10**(t-n))}static getInitParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,migrateFee:i}){let r=e.sub(o);if(r.lte(new Ft(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new Ft(3)).sub(i),u=t.mul(new Ft(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new Ft(2)).mul(it).div(l);if(!m.gt(new Ft(0)))throw Error("a need gt 0");if(!yi.gt(m))throw Error("a need lt u64 max");if(m.lt(new Ft(0))||u.lt(new Ft(0)))throw Error("invalid input 0");return{a:m,b:new Ft(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new Ft(2).mul(n).mul(it).div(e.virtualA);return new Ft(new M(o.toString()).sqrt().toFixed(0)).sub(e.realA)}static buyExactOut({poolInfo:e,amount:t}){let n=e.realA.add(t),o=n.mul(n);return oo(e.virtualA.mul(o),new Ft(2).mul(it)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=oo(e.virtualA.mul(o),new Ft(2).mul(it));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new Ft(2).mul(n).mul(it).div(e.virtualA),i=new Ft(new M(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var Kt=class{static getPoolCurvePointByPoolInfo({curveType:e,pointCount:t,poolInfo:n}){return this.getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n.supply,totalFundRaising:n.totalFundRaisingB,totalSell:n.totalSellA,totalLockedAmount:n.vestingSchedule.totalLockedAmount,migrateFee:n.migrateFee,decimalA:n.mintDecimalsA,decimalB:n.mintDecimalsB})}static getPoolCurvePointByInit({curveType:e,pointCount:t,supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a,decimalA:c,decimalB:u}){if(t<3)throw Error("point count < 3");let l=this.getCurve(e),m=l.getInitParam({supply:n,totalFundRaising:o,totalSell:i,totalLockedAmount:r,migrateFee:a}),d=l.getPoolInitPriceByInit(q(_({},m),{decimalA:c,decimalB:u})),p=o.div(new tn(t-1)),f=new tn(0),y=[{price:d,totalSellSupply:0}],{a:b,b:g}=m,A=f,k=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(k),w=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});A=A.add(w.amountA.amount),k=k.add(w.amountB);let x=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:A,realB:k},decimalA:c,decimalB:u,curveType:e});y.push({price:x,totalSellSupply:new M(A.toString()).div(10**c).toNumber()})}return y}static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n,curveType:o}){return this.getCurve(o).getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n})}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o,curveType:i}){return this.getCurve(i).getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o})}static getPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getEndPrice({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolPrice({poolInfo:e,decimalA:n,decimalB:o})}static getPoolEndPriceReal({poolInfo:e,curveType:t,decimalA:n,decimalB:o}){return this.getCurve(t).getPoolEndPriceReal({poolInfo:e,decimalA:n,decimalB:o})}static checkParam({supply:e,totalFundRaising:t,totalSell:n,totalLockedAmount:o,decimals:i,config:r,migrateType:a}){if(Number(i)!==6)throw Error("decimals = 6");if(e.mul(r.maxLockRate).div(Ot).lt(o))throw Error("total lock amount gte max lock amount");if(e.lt(r.minSupplyA.mul(new tn(10**i))))throw Error("supply lt min supply");let u=e.mul(r.minSellRateA).div(Ot);if(n.lt(u))throw Error("invalid input");if(t.lt(r.minFundRaisingB))throw Error("total fund raising lt min fund raising");let l=e.sub(n).sub(o),m=e.mul(r.minMigrateRateA).div(Ot);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new tn(new M(d.mul(t).toString()).sqrt().toFixed(0));if(a==="amm"){let f=new tn(10).pow(new tn(i));if(p.lte(f))throw Error("check migrate lp error")}else if(a==="cpmm"){let f=new tn(100);if(p.lte(f))throw Error("check migrate lp error")}else throw Error("migrate type error")}static buyExactIn({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=this.calculateFee({amount:t,feeRate:l}),d=t.sub(m),p=this.getCurve(i),f=p.buyExactIn({poolInfo:e,amount:d}),y=e.totalSellA.sub(e.realA),b,g,A;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),A=g.sub(T)}else b=f,g=t,A=m;let k=this.splitFee({totalFee:A,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Ks(b,c,u),amountB:g,splitFee:k}}static buyExactOut({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=e.totalSellA.sub(e.realA),m=Cs(t,c,u),d=m.fee?m.amount.add(m.fee):m.amount;t.gt(l)&&(d=l);let f=this.getCurve(i).buyExactOut({poolInfo:e,amount:d}),y=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),b=this.calculatePreFee({postFeeAmount:f,feeRate:y}),g=b.sub(f),A=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:A}}static sellExactIn({poolInfo:e,amountA:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.getCurve(i),m=Ks(t,c,u),d=m.fee?m.amount.sub(m.fee):m.amount,p=l.sellExactIn({poolInfo:e,amount:d}),f=this.calculateFee({amount:p,feeRate:this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a})}),y=this.splitFee({totalFee:f,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:p.sub(f),splitFee:y}}static sellExactOut({poolInfo:e,amountB:t,protocolFeeRate:n,platformFeeRate:o,curveType:i,shareFeeRate:r,creatorFeeRate:a,transferFeeConfigA:c,slot:u}){let l=this.totalFeeRate({protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a}),m=this.calculatePreFee({postFeeAmount:t,feeRate:l});if(e.realB.lt(m))throw Error("Insufficient liquidity");let d=m.sub(t),f=Kt.getCurve(i).sellExactOut({poolInfo:e,amount:m});if(f.gt(e.realA))throw Error();let y=this.splitFee({totalFee:d,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Cs(f,c,u),amountB:t,splitFee:y}}static splitFee({totalFee:e,protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}){let r=this.totalFeeRate({protocolFeeRate:t,platformFeeRate:n,shareFeeRate:o,creatorFeeRate:i}),a=r.isZero()?new tn(0):e.mul(n).div(r),c=r.isZero()?new tn(0):e.mul(o).div(r),u=r.isZero()?new tn(0):e.mul(i).div(r),l=e.sub(a).sub(c).sub(u);return{platformFee:a,shareFee:c,protocolFee:l,creatorFee:u}}static calculateFee({amount:e,feeRate:t}){return jo(e,t,Ot)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Ot),o=Ot.sub(t);return n.add(o).sub(new tn(1)).div(o)}static totalFeeRate({protocolFeeRate:e,platformFeeRate:t,shareFeeRate:n,creatorFeeRate:o}){if(e.add(t).add(n).add(o).gt(new tn(1e6)))throw Error("total fee rate gt 1_000_000");return e.add(t).add(n).add(o)}static getCurve(e){switch(e){case 0:return jr;case 1:return $r;case 2:return Jr}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as Ao,TOKEN_PROGRAM_ID as Ve,createAssociatedTokenAccountIdempotentInstruction as _t,createSyncNativeInstruction as Uf,getTransferFeeConfig as es,unpackMint as ts}from"@solana/spl-token";import ue from"bn.js";import{PublicKey as Vl,SystemProgram as Gf}from"@solana/web3.js";var ns={initPriceX64:new ue("515752397214619"),supply:new ue(1e15),totalSellA:new ue(7931e11),totalFundRaisingB:new ue(85e9),totalFundRaisingBUSD:new ue(125e8),totalLockedAmount:new ue("0"),cliffPeriod:new ue("0"),unlockPeriod:new ue("0"),decimals:6,virtualA:new ue("1073471847374405"),virtualB:new ue("30050573465"),realA:new ue(0),realB:new ue(0),protocolFee:new ue(0),platformId:new Vl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ue(0),cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)}},Zn=new ue(1e4);var Di=class extends De{constructor(e){super(e)}async createLaunchpad(L){var N=L,{programId:e=ut,authProgramId:t,platformId:n=ns.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,platformFeeRate:p,txVersion:f,computeBudgetConfig:y,txTipConfig:b,feePayer:g,buyAmount:A,minMintAAmount:k,slippage:T,associatedOnly:h=!0,checkCreateATAOwner:w=!1,extraSigners:x,token2022:B,transferFeeExtensionParams:K,creatorFeeOn:I=0}=N,C=Ge(N,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","platformFeeRate","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn"]);var Wt,zi,Ja,eu,tu,nu,ou,iu,ru,su,au;let O=this.createTxBuilder(g);t=t!=null?t:zt(e).publicKey,B=!!K,B&&(l="cpmm");let R=d;if(!R&&m){let Qt=await this.scope.connection.getAccountInfo(m);Qt&&(R=Qn.decode(Qt.data))}R||this.logAndCreateError("config not found");let v=R.mintB,z=R.curveType,{publicKey:H}=Do(e,o,v),{publicKey:ce}=Ea(e,H,o),{publicKey:se}=Ea(e,H,v),{publicKey:ae}=Bn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${v.toBase58()}, decimals A:${i}/B:${r}, config:${m.toBase58()}`),c.length>10&&this.logAndCreateError("Symbol length should shorter than 11"),u||this.logAndCreateError("uri should not empty");let pe=(await this.scope.api.fetchLaunchConfigs()).find(Qt=>Qt.key.pubKey===m.toBase58()),te=(Wt=C==null?void 0:C.supply)!=null?Wt:new ue(pe.defaultParams.supplyInit),J=(zi=C==null?void 0:C.totalSellA)!=null?zi:new ue(pe.defaultParams.totalSellA),Se=(Ja=C==null?void 0:C.totalFundRaisingB)!=null?Ja:new ue(pe.defaultParams.totalFundRaisingB),Me=(eu=C==null?void 0:C.totalLockedAmount)!=null?eu:new ue(0),ke=p;if(!p){let Qt=await this.scope.connection.getAccountInfo(n);Qt||this.logAndCreateError("platform id not found:",n.toString()),ke=Ln.decode(Qt.data).feeRate}let Et=Kt.getCurve(R.curveType).getInitParam({supply:te,totalFundRaising:Se,totalSell:J,totalLockedAmount:Me,migrateFee:R.migrateFee}),et;try{et=await this.scope.token.getTokenInfo(v)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let Vt={epoch:new ue(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(tu=et==null?void 0:et.decimals)!=null?tu:r,supply:te,totalSellA:J,mintA:new Vl(o),mintB:v,virtualA:Et.a,virtualB:Et.b,realA:ns.realA,realB:ns.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:ns.protocolFee,platformFee:ke,platformId:n,configId:m,vaultA:ce,vaultB:se,creator:this.scope.ownerPubKey,totalFundRaisingB:Se,vestingSchedule:{totalLockedAmount:Me,cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)},mintProgramFlag:B?1:0,cpmmCreatorFeeOn:I},rs=Kt.getCurve(R.curveType),{c:ss}=rs.getInitParam({supply:Vt.supply,totalFundRaising:Vt.totalFundRaisingB,totalLockedAmount:Me,totalSell:R.curveType===0?Vt.totalSellA:new ue(0),migrateFee:R.migrateFee});try{Kt.checkParam({supply:Vt.supply,totalFundRaising:Vt.totalFundRaisingB,totalSell:ss,totalLockedAmount:Me,decimals:Vt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(Qt){this.logAndCreateError(`check create mint params failed, ${Qt.message}`)}O.addInstruction({instructions:[B?Ol(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,se,i,a,c,u||"https://",{type:z===0?"ConstantCurve":z===1?"FixedCurve":z===2?"LinearCurve":"ConstantCurve",totalSellA:J,migrateType:l,supply:te,totalFundRaisingB:Se},Me,(nu=C==null?void 0:C.cliffPeriod)!=null?nu:new ue(0),(ou=C==null?void 0:C.unlockPeriod)!=null?ou:new ue(0),I,K):Nl(e,g!=null?g:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,H,o,v,ce,se,ae,i,a,c,u||"https://",{type:z===0?"ConstantCurve":z===1?"FixedCurve":z===2?"LinearCurve":"ConstantCurve",totalSellA:J,migrateType:l,supply:te,totalFundRaisingB:Se},Me,(iu=C==null?void 0:C.cliffPeriod)!=null?iu:new ue(0),(ru=C==null?void 0:C.unlockPeriod)!=null?ru:new ue(0),I)]});let wo=B?await this.scope.connection.getEpochInfo():void 0,$n=K?{epoch:BigInt((wo==null?void 0:wo.epoch)||0),maximumFee:BigInt((su=K==null?void 0:K.maxinumFee.toString())!=null?su:0),transferFeeBasisPoints:(au=K==null?void 0:K.transferFeeBasePoints)!=null?au:0}:void 0,ko={amountA:{amount:new ue(0),fee:void 0,expirationTime:void 0},amountB:new ue(0),splitFee:{platformFee:new ue(0),shareFee:new ue(0),protocolFee:new ue(0),creatorFee:new ue(0)}},ho;if(x!=null&&x.length&&O.addInstruction({signers:x}),!C.createOnly){let{builder:Qt,extInfo:Xl}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:B?Ao:void 0,mintA:o,mintB:v,poolInfo:Vt,buyAmount:A,minMintAAmount:k,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:ke,slippage:T,associatedOnly:h,checkCreateATAOwner:w,skipCheckMintA:!$n,transferFeeConfigA:$n?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:$n,newerTransferFee:$n}:void 0,fromCreate:!0});O.addInstruction(_({},Qt.AllTxData)),ko=_({},Xl),ho=(this.scope.cluster==="devnet"||f===1)&&C.shareFeeReceiver?[Qt.allInstructions[0]]:void 0}return O.addTipInstruction(b),f===0?O.sizeCheckBuildV0({computeBudgetConfig:y,swapInfo:ko,splitIns:ho,address:q(_({},Vt),{poolId:H})}):O.sizeCheckBuild({computeBudgetConfig:y,swapInfo:ko,splitIns:ho,address:q(_({},Vt),{poolId:H})})}async buyToken({programId:e=ut,authProgramId:t,mintA:n,mintAProgram:o=Ve,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,buyAmount:p,minMintAAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:w=!1}){var J,Se,Me;p.lte(new ue(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let x=this.createTxBuilder(d),{publicKey:B}=Do(e,n,i);t=t!=null?t:zt(e).publicKey;let K=h;if(!w)if(K)o=Ao;else{let ke=await this.scope.connection.getAccountInfo(n);if(ke&&ke.owner.equals(Ao)){o=ke.owner;let Ct=ts(n,ke,o);K=es(Ct)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),L=T&&C,N=L?this.scope.account.getAssociatedTokenAccount(i,Ve):null,O=C;if(x.addInstruction({instructions:[_t(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...L?[_t(this.scope.ownerPubKey,N,this.scope.ownerPubKey,i,Ve),Gf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N,lamports:BigInt(p.toString())}),Uf(N)]:[]]}),!L){let{account:ke,instructionParams:Ct}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:O?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!O,notUseTokenAccount:O,associatedOnly:O?!1:A,checkCreateATAOwner:k});ke&&(N=ke),x.addInstruction(Ct||{})}N||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let ke=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});ke||this.logAndCreateError("cannot found pool:",B.toBase58()),R=dn.decode(ke.data)}let v=a,z=await Ee(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(ke=>({pubkey:ke})));if(!v){let ke=z.find(Ct=>Ct.pubkey.equals(R.configId));(!ke||!ke.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Qn.decode(ke.accountInfo.data)}let H=z.find(ke=>ke.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Kt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:K,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountA.amount.toString()).sub((Se=(J=se.amountA.fee)==null?void 0:J.toString())!=null?Se:0),ge=y?new M(Zn.sub(y).toNumber()/Zn.toNumber()).clampedTo(0,1):new M(1),pe=f!=null?f:y?new ue(ae.mul(ge).toFixed(0)):se.amountA.amount.sub((Me=se.amountA.fee)!=null?Me:new ue(0));se.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${se.amountA.toString()}, input ${i.toBase58()} amount: ${se.amountB.toString()}`);let te=g?ee(g,i,Ve).publicKey:void 0;return te&&x.addInstruction({instructions:[_t(this.scope.ownerPubKey,te,g,i)]}),x.addInstruction({instructions:[Yr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,B,I,N,R.vaultA,R.vaultB,n,i,o,Ve,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,se.amountB.lt(p)?se.amountB:p,pe,b,te)]}),x.addCustomComputeBudget(l),x.addTipInstruction(m),x.versionBuild({txVersion:u,extInfo:q(_({},se),{decimalOutAmount:ae,minDecimalOutAmount:new M(pe.toString())})})}async buyTokenExactOut({programId:e=ut,authProgramId:t,mintA:n,mintAProgram:o=Ve,mintB:i=Nn,poolInfo:r,configInfo:a,transferFeeConfigA:c,platformFeeRate:u,txVersion:l,computeBudgetConfig:m,txTipConfig:d,feePayer:p,maxBuyAmount:f,outAmount:y,slippage:b,shareFeeRate:g=new ue(0),shareFeeReceiver:A,associatedOnly:k=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ue(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let w=this.createTxBuilder(p),{publicKey:x}=Do(e,n,i);t=t!=null?t:zt(e).publicKey;let B=r;if(!B){let te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});te||this.logAndCreateError("cannot found pool:",x.toBase58()),B=dn.decode(te.data)}let K=a,I=await Ee(this.scope.connection,[K?void 0:B.configId,B.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!K){let te=I.find(J=>J.pubkey.equals(B.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",B.configId.toBase58()),K=Qn.decode(te.accountInfo.data)}let C=I.find(te=>te.pubkey.equals(B.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",B.configId.toBase58());let L=Ln.decode(C.accountInfo.data);u=u||L.feeRate;let N=c;if(!h)if(N)o=Ao;else{let te=await this.scope.connection.getAccountInfo(n);if(te&&te.owner.equals(Ao)){o=te.owner;let J=ts(n,te,o);N=es(J)||void 0}}let O=Kt.buyExactOut({poolInfo:B,amountA:y,protocolFeeRate:K.tradeFeeRate,platformFeeRate:u,curveType:K.curveType,shareFeeRate:g,creatorFeeRate:L.creatorFeeRate,transferFeeConfigA:N,slot:await this.scope.connection.getSlot()}),R=new M(O.amountB.toString()),v=b?new M(Zn.add(b).toNumber()/Zn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new M(1),z=(f!=null?f:b)?new ue(R.mul(v).toFixed(0)):O.amountB,H=this.scope.account.getAssociatedTokenAccount(n,o),ce=null,se=i.equals(Nn);w.addInstruction({instructions:[_t(this.scope.ownerPubKey,H,this.scope.ownerPubKey,n,o)]});let{account:ae,instructionParams:ge}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:se?{payer:this.scope.ownerPubKey,amount:O.amountB}:void 0,skipCloseAccount:!se,notUseTokenAccount:se,associatedOnly:se?!1:k,checkCreateATAOwner:T});ae&&(ce=ae),w.addInstruction(ge||{}),ce===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let pe=A?ee(A,i,Ve).publicKey:void 0;return pe&&w.addInstruction({instructions:[_t(this.scope.ownerPubKey,pe,A,i)]}),w.addInstruction({instructions:[Ml(e,this.scope.ownerPubKey,t,B.configId,B.platformId,x,H,ce,B.vaultA,B.vaultB,n,i,o,Ve,Pn(e,B.platformId,i).publicKey,An(e,B.creator,i).publicKey,y,z,g,pe)]}),w.addCustomComputeBudget(m),w.addTipInstruction(d),w.versionBuild({txVersion:l,extInfo:{maxSpentAmount:z,outAmount:y}})}async sellToken({programId:e=ut,authProgramId:t,mintAProgram:n=Ve,mintA:o,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,sellAmount:p,minAmountB:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:zt(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ue(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:w}=Do(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(Ao)){n=J.owner;let Se=ts(o,J,n);x=es(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(B=C),h.addInstruction(L||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let J=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",w.toBase58()),R=dn.decode(J.data)}let v=a,z=await Ee(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(J=>({pubkey:J})));if(!v){let J=z.find(Se=>Se.pubkey.equals(R.configId));(!J||!J.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Qn.decode(J.accountInfo.data)}let H=z.find(J=>J.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Kt.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountB.toString()),ge=y?new M(Zn.sub(y).toNumber()/Zn.toNumber()).clampedTo(0,1):new M(1),pe=f!=null?f:y?new ue(ae.mul(ge).toFixed(0)):se.amountB;pe.lte(new ue(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let te=g?ee(g,i,Ve).publicKey:void 0;return te&&h.addInstruction({instructions:[_t(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[Hr(e,this.scope.ownerPubKey,t,R.configId,R.platformId,w,B,K,R.vaultA,R.vaultB,o,i,n,Ve,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,se.amountA.amount.lt(p)?se.amountA.amount:p,pe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:pe}})}async sellTokenExactOut({programId:e=ut,authProgramId:t,mintAProgram:n=Ve,mintA:o,mintB:i=Nn,poolInfo:r,configInfo:a,platformFeeRate:c,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d,inAmount:p,maxSellAmount:f,slippage:y,shareFeeRate:b=new ue(0),shareFeeReceiver:g,associatedOnly:A=!0,checkCreateATAOwner:k=!1,skipCheckMintA:T=!1}){t=t!=null?t:zt(e).publicKey;let h=this.createTxBuilder(d);f!=null&&f.lte(new ue(0))&&this.logAndCreateError("max sell amount should be gt 0");let{publicKey:w}=Do(e,o,i),x;if(!T){let J=await this.scope.connection.getAccountInfo(o);if(J&&J.owner.equals(Ao)){n=J.owner;let Se=ts(o,J,n);x=es(Se)||void 0}}let B=null,K=null,I=i.equals(Nn),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:A,checkCreateATAOwner:k});C&&(B=C),h.addInstruction(L||{}),B===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:N,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:I?!1:A,checkCreateATAOwner:k});N&&(K=N),h.addInstruction(O||{}),K===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let J=await this.scope.connection.getAccountInfo(w,{commitment:"processed"});J||this.logAndCreateError("cannot found pool",w.toBase58()),R=dn.decode(J.data)}let v=a,z=await Ee(this.scope.connection,[v?void 0:R.configId,R.platformId].filter(Boolean).map(J=>({pubkey:J})));if(!v){let J=z.find(Se=>Se.pubkey.equals(R.configId));(!J||!J.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),v=Qn.decode(J.accountInfo.data)}let H=z.find(J=>J.pubkey.equals(R.platformId));(!H||!H.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let ce=Ln.decode(H.accountInfo.data);c=c||ce.feeRate;let se=Kt.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:v.tradeFeeRate,platformFeeRate:c,curveType:v.curveType,shareFeeRate:b,creatorFeeRate:ce.creatorFeeRate,transferFeeConfigA:x,slot:await this.scope.connection.getSlot()}),ae=new M(se.amountA.amount.toString()),ge=y?new M(Zn.add(y).toNumber()/Zn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new M(1),pe=(f!=null?f:y)?new ue(ae.mul(ge).toFixed(0)):se.amountA.amount,te=g?ee(g,i,Ve).publicKey:void 0;return te&&h.addInstruction({instructions:[_t(this.scope.ownerPubKey,te,g,i)]}),h.addInstruction({instructions:[vl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,w,B,K,R.vaultA,R.vaultB,o,i,n,Ve,Pn(e,R.platformId,i).publicKey,An(e,R.creator,i).publicKey,p,pe,b,te)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:pe}})}async createPlatformConfig({programId:e=ut,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,cpConfigId:i,migrateCpLockNftScale:r,transferFeeExtensionAuth:a,creatorFeeRate:c,feeRate:u,name:l,web:m,img:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b}){let g=this.createTxBuilder(b),{publicKey:A}=Va(e,t);return g.addInstruction({instructions:[Fl(e,t,n,o,A,i,a,r,u,c,l,m,d)]}),g.addCustomComputeBudget(f),g.addTipInstruction(y),g.versionBuild({txVersion:p,extInfo:{platformId:A}})}async updatePlatformConfig({programId:e=ut,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Va(e,t).publicKey;return u.addInstruction({instructions:[_l(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimPlatformFee({programId:e=ut,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:c=Ve,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:zt(e).publicKey;let f=r,y=a;if(!f){let A=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});A||this.logAndCreateError("cannot found pool:",o.toBase58());let k=dn.decode(A.data),T=await this.scope.connection.getAccountInfo(k.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",k.configId.toBase58()),f=Qn.decode(T.data).mintB,y=y!=null?y:k.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=ee(this.scope.ownerPubKey,f,Ve).publicKey;return p.addInstruction({instructions:[_t(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[Xa(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=ut,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:zt(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:dn.span},{memcmp:{offset:dn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=dn.decode(m.account.data);if(d.platformFee.lte(new ue(0)))return;let p=ee(this.scope.ownerPubKey,d.mintB,Ve).publicKey;u.addInstruction({instructions:[_t(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[Xa(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,Ve)]})}),u.addTipInstruction(a),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=ut,poolId:t,beneficiary:n,shareAmount:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=await this.getRpcPoolInfo({poolId:t});o.add(l.vestingSchedule.totalAllocatedShare).gt(l.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount");let m=Vi(e,t,n).publicKey;return u.addInstruction({instructions:[Ga(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=ut,poolId:t,beneficiaryList:n,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=this.createTxBuilder(r);n.length===0&&this.logAndCreateError("beneficiaryList is null");let c=await this.getRpcPoolInfo({poolId:t});return n.reduce((l,m)=>l.add(m.shareAmount),c.vestingSchedule.totalAllocatedShare).gt(c.vestingSchedule.totalLockedAmount)&&this.logAndCreateError("share amount exceed total locked amount"),n.forEach(l=>{let m=Vi(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Ga(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=ut,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=zt(e).publicKey,m=o||Vi(e,t,this.scope.ownerPubKey).publicKey,d=n;if(!d){let f=await this.scope.connection.getAccountInfo(t);f||this.logAndCreateError("pool not found"),d=dn.decode(f.data)}let p=ee(this.scope.ownerPubKey,d.mintA,Ve).publicKey;return u.addInstruction({instructions:[_t(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,Ve)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=ut,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=_({},n),l=zt(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=_(_({},u),d.poolInfoMap)}return t.forEach(d=>{let p=d.toBase58(),f=u[p];f||this.logAndCreateError(`pool info not found: ${p}`);let y=o[p]||Vi(e,d,this.scope.ownerPubKey).publicKey,b=ee(this.scope.ownerPubKey,f.mintA,Ve).publicKey;c.addInstruction({instructions:[_t(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[Ua(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,Ve)]})}),i===0?c.sizeCheckBuildV0({computeBudgetConfig:r}):c.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=ut,platformId:t,mintB:n,mintBProgram:o=Ve,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=Pn(e,t,n).publicKey,d=Wa(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[_t(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),za(e,t,i!=null?i:this.scope.ownerPubKey,d,m,p,n,o)]}),l.addCustomComputeBudget(a),l.addTipInstruction(c),l.versionBuild({txVersion:r})}async claimMultipleVaultPlatformFee({programId:e=ut,platformList:t,unwrapSol:n=!0,txVersion:o,computeBudgetConfig:i,feePayer:r,associatedOnly:a=!0,checkCreateATAOwner:c=!1}){let u=this.createTxBuilder(r),l={};return t.forEach(async m=>{var b,g;let d=Wa(e).publicKey,p=Pn(e,m.id,m.mintB).publicKey,f=m.mintB.equals(Nn)&&n,y=l[m.mintB.toBase58()];if(!y){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintB,owner:this.scope.ownerPubKey,createInfo:f?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:a,checkCreateATAOwner:c});A&&(y=A),u.addInstruction(k||{}),y===void 0&&this.logAndCreateError(`cannot found platform ${m.id.toBase58()} mintB(${m.mintB.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts)}u.addInstruction({instructions:[za(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:Ve)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:i}):u.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=ut,mintB:t,mintBProgram:n=Ve,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=An(e,this.scope.ownerPubKey,t).publicKey,l=Da(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[_t(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Ya(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=ut,mintBList:t,txVersion:n,computeBudgetConfig:o,feePayer:i}){let r=this.createTxBuilder(i);return t.forEach(a=>{var p;let c=a.pubKey,u=(p=a.programId)!=null?p:Ve,l=An(e,this.scope.ownerPubKey,c).publicKey,m=Da(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[_t(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),Ya(e,this.scope.ownerPubKey,m,l,d,c,u)]})}),n==0?r.sizeCheckBuildV0({computeBudgetConfig:o}):r.sizeCheckBuild({computeBudgetConfig:o})}async getRpcPoolInfo({poolId:e}){return(await this.getRpcPoolsInfo({poolIdList:[e]})).poolInfoMap[e.toBase58()]}async getRpcPoolsInfo({poolIdList:e,config:t}){let n=await Ee(this.scope.connection,e.map(c=>({pubkey:c})),t),o={},i=[];for(let c=0;c<e.length;c++){let u=n[c];if(u===null||!u.accountInfo)throw Error("fetch pool info error: "+e[c].toBase58());let l=dn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(_({},l),{poolId:e[c],programId:u.accountInfo.owner}),i.push(l.configId)}let r=await Ee(this.scope.connection,i.map(c=>({pubkey:c})),t),a={};for(let c=0;c<i.length;c++){let u=r[c];if(u===null||!u.accountInfo)throw Error("fetch config info error: "+i[c].toBase58());let l=Qn.decode(u.accountInfo.data);a[i[c].toBase58()]=q(_({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(_({},c),{[u]:q(_({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new nt(0),qi=class extends De{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1,feePayer:i}=e,r=await this.getWSolAccounts(),a=this.createTxBuilder(i);a.addCustomComputeBudget(e.computeBudgetConfig);let c=ne(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[hn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[hn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return a.versionBuild({txVersion:o})}async wrapWSol(e,t,n,o){let i=this.createTxBuilder(o),r=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:r,feePayer:a}){let c=this.createTxBuilder(a),u=e.amountIn,l=e.amountOut,m=u.amount.token.mint.equals(Z),d=l.amount.token.mint.equals(Z),p=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Uo:Fe,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!m,createInfo:m?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&c.addInstruction(b),y===void 0)throw Error("input account check error");let g;if(e.routeType==="route"&&!d)g=this.scope.account.getAssociatedTokenAccount(f,l.amount.token.isToken2022?Uo:Fe);else{let{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?Uo:Fe,mint:f,notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});g=h,w&&c.addInstruction(w)}d&&c.addInstruction({endInstructions:[hn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Fe})],endInstructionTypes:[X.CloseAccount]});let A;if(e.routeType==="route"){let h=e.middleToken;A=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?Uo:Fe)}let k=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Rl({routeProgram:i,inputMint:p,swapInfo:q(_({},e),{poolInfo:[...e.poolInfoList],poolKey:k,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:A,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder();h.addInstruction({instructions:[Wl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]}),h.addInstruction(T);let{transactions:w}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();w.length<2&&c.addInstruction({instructions:[Wl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[X.TransferAmount]})}return c.addInstruction(T),r===0?c.sizeCheckBuildV0({computeBudgetConfig:o,address:T.address}):c.sizeCheckBuild({computeBudgetConfig:o,address:T.address})}async swapClmmToLaunchMint({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,priceLimit:r,slippage:a=.01,shareFeeRate:c=new nt(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let A=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,k=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:w,remainingAccounts:x},launchPoolInfo:B,launchAuthProgramId:K,launchSwapInfo:I,outAmount:C,minOutAmount:L}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:k,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),N=e.toString()===T.poolInfo.mintA.address,O=f.useSOLBalance&&T.poolInfo.mintA.address===Z.toBase58(),R=f.useSOLBalance&&T.poolInfo.mintB.address===Z.toBase58(),v={},z;!r||r.equals(new M(0))?z=N?Tt.add(new nt(1)):It.sub(new nt(1)):z=le.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let H=this.createTxBuilder(A),[ce,se]=[new ve(T.poolInfo.mintA.address),new ve(T.poolInfo.mintB.address)],[ae,ge]=[new ve(T.poolInfo.mintA.programId),new ve(T.poolInfo.mintB.programId)],pe=this.scope.account.getAssociatedTokenAccount(ce,ae),te=this.scope.account.getAssociatedTokenAccount(se,ge);H.addInstruction({instructions:[Ha(this.scope.ownerPubKey,pe,this.scope.ownerPubKey,ce,ae),Ha(this.scope.ownerPubKey,te,this.scope.ownerPubKey,se,ge)]}),(N&&O||!N&&R)&&H.addInstruction({instructions:[Xf.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?pe:te,lamports:BigInt(h.toString())}),zf(N?pe:te)]}),v[T.poolInfo.mintA.address]=pe,v[T.poolInfo.mintB.address]=te,(!pe||!te)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:pe,ownerTokenAccountB:te}),H.addInstruction(n?Be.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:pe,tokenAccountB:te},outputMint:N?se:ce,amountOut:w,amountInMax:h,sqrtPriceLimitX64:z,remainingAccounts:x}):Be.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:pe,tokenAccountB:te},inputMint:new ve(e),amountIn:t,amountOutMin:w,sqrtPriceLimitX64:z,remainingAccounts:x}));let J=B.mintProgramFlag===0?Fe:Uo,Se=this.scope.account.getAssociatedTokenAccount(B.mintA,J),Me=v[B.mintB.toBase58()];if(H.addInstruction({instructions:[Ha(this.scope.ownerPubKey,Se,this.scope.ownerPubKey,B.mintA,J)]}),!Me){let ke=B.mintB.equals(Z),{account:Ct,instructionParams:Et}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:B.mintB,notUseTokenAccount:ke,owner:this.scope.ownerPubKey,skipCloseAccount:!ke,createInfo:ke?{payer:this.scope.ownerPubKey,amount:w}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Me=Ct,Et&&H.addInstruction(Et)}return H.addInstruction({instructions:[Yr(B.programId,this.scope.ownerPubKey,K,B.configId,B.platformId,new ve(i),Se,Me,B.vaultA,B.vaultB,B.mintA,B.mintB,J,Fe,Pn(B.programId,B.platformId,B.mintB).publicKey,An(B.programId,B.creator,B.mintB).publicKey,I.amountB.lt(w)?I.amountB:w,L,c,u)]}),H.addCustomComputeBudget(b),H.versionBuild({txVersion:g,extInfo:{routes:[{mint:new ve(e),amount:n?h:t,decimal:T.poolInfo[N?"mintA":"mintB"].decimals},{mint:N?se:ce,amount:w,decimal:T.poolInfo[N?"mintB":"mintA"].decimals},{mint:B.mintA,amount:C,decimal:B.mintDecimalsA}],outAmount:C,minOutAmount:L}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new nt(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var O,R,v,z,H,ce;let f=r>0?new M(r).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():r,y=u!=null?u:await this.scope.clmm.getPoolInfoFromRpc(o.toString());if(e.toString()!==y.poolInfo.mintA.address&&e.toString()!==y.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let b=e.toString()===y.poolInfo.mintA.address,g=y.poolInfo[b?"mintB":"mintA"],A=n?await Ne.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new ve(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await Ne.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),k=l;if(k||(k=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(i)})),g.address!==k.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${k.mintB.toBase58()})`);let T=m;if(!T){let se=await this.scope.connection.getAccountInfo(k.platformId);T=Ln.decode(se.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(k.mintA),w=zt(k.programId).publicKey,x=h.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(O=h.extensions.feeConfig.olderTransferFee.epoch)!=null?O:a==null?void 0:a.epoch)!=null?R:0),maximumFee:BigInt(h.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((z=(v=h.extensions.feeConfig.newerTransferFee.epoch)!=null?v:a==null?void 0:a.epoch)!=null?z:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,B=n?t:A.minAmountOut.amount.raw,K=Kt.buyExactIn({poolInfo:k,amountB:B,protocolFeeRate:k.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:k.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:x,slot:d!=null?d:await this.scope.connection.getSlot()}),I=K.amountA.amount.sub((H=K.amountA.fee)!=null?H:new nt(0)),C=new M(I.toString()),L=new nt(1e4),N=f?new M(L.sub(new nt(f*1e4)).toNumber()/L.toNumber()).clampedTo(0,1):new M(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?A.maxAmountIn.amount:t,clmmAmountOut:B,remainingAccounts:A.remainingAccounts},clmmComputeInfo:A,launchPoolInfo:k,launchAuthProgramId:w,launchMintTransferFeeConfig:x,launchSwapInfo:K,outAmount:K.amountA.amount.sub((ce=K.amountA.fee)!=null?ce:new nt(0)),minOutAmount:new nt(C.mul(N).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new nt(0),shareFeeReceiver:a,ownerInfo:c={useSOLBalance:!0},checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}){let d=(c==null?void 0:c.feePayer)||this.scope.ownerPubKey,p=await this.scope.fetchEpochInfo(),{clmmPoolData:f,clmmComputeAmount:{remainingAccounts:y},launchPoolInfo:b,launchAuthProgramId:g,launchSwapInfo:A,minLaunchOutAmount:k,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),w=this.createTxBuilder(d),x={},B=b.mintProgramFlag===0?Fe:Uo,{account:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:B,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!K)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let I=b.mintB.equals(Z),{account:C,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Fe,mint:b.mintB,notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(L&&w.addInstruction(L),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);x[b.mintB.toBase58()]=C,w.addInstruction({instructions:[Hr(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new ve(n),K,C,b.vaultA,b.vaultB,b.mintA,b.mintB,B,Fe,Pn(b.programId,b.platformId,b.mintB).publicKey,An(b.programId,b.creator,b.mintB).publicKey,A.amountA.amount.lt(e)?A.amountA.amount:e,k,r,a)]});let N=b.mintB.toString()===f.poolInfo.mintA.address,O=c.useSOLBalance&&f.poolInfo.mintA.address===Z.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===Z.toBase58(),v;!o||o.equals(new M(0))?v=N?Tt.add(new nt(1)):It.sub(new nt(1)):v=le.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[z,H]=[new ve(f.poolInfo.mintA.address),new ve(f.poolInfo.mintB.address)],[ce,se]=[new ve(f.poolInfo.mintA.programId),new ve(f.poolInfo.mintB.programId)],ae=O?void 0:this.scope.account.getAssociatedTokenAccount(z,ce),ge=R?void 0:this.scope.account.getAssociatedTokenAccount(H,se);if(!ae){let{account:pe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ce,mint:z,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?e:0},associatedOnly:!1,checkCreateATAOwner:u});ae=pe,te&&w.addInstruction(te)}if(!ge){let{account:pe,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:se,mint:H,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:N?0:e},associatedOnly:!1,checkCreateATAOwner:u});ge=pe,te&&w.addInstruction(te)}return x[f.poolInfo.mintA.address]=ae,x[f.poolInfo.mintB.address]=ge,(!ae||!ge)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ae,ownerTokenAccountB:ge}),w.addInstruction(Be.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ae,tokenAccountB:ge},inputMint:new ve(f.poolKeys[N?"mintA":"mintB"].address),amountIn:k,amountOutMin:h,sqrtPriceLimitX64:v,remainingAccounts:y})),w.addCustomComputeBudget(l),w.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:k,decimal:b.mintDecimalsB},{mint:new ve(f.poolKeys[N?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[N?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new nt(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,L,N,O;let l=o>0?new M(o).div(2).toDecimalPlaces(4,M.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new ve(n)}));let d=m.mintB,p=a!=null?a:await this.scope.clmm.getPoolInfoFromRpc(t.toString());if(d.toString()!==p.poolInfo.mintA.address&&d.toString()!==p.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let f=d.toString()===p.poolInfo.mintA.address,y=p.poolInfo[f?"mintB":"mintA"],b=u;if(!b){let R=await this.scope.connection.getAccountInfo(m.platformId);b=Ln.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),A=zt(m.programId).publicKey,k=g.extensions.feeConfig?{transferFeeConfigAuthority:ve.default,withdrawWithheldAuthority:ve.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((L=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?L:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((O=(N=g.extensions.feeConfig.newerTransferFee.epoch)!=null?N:i==null?void 0:i.epoch)!=null?O:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=Kt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:k,slot:await this.scope.connection.getSlot()}),h=T.amountB,w=new M(h.toString()),x=new nt(1e4),B=l?new M(x.sub(new nt(l*1e4)).toNumber()/x.toNumber()).clampedTo(0,1):new M(1),K=new nt(w.mul(B).toFixed(0)),I=await Ne.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:K,tokenOut:y,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo()});return{clmmPoolData:p,clmmComputeAmount:I,launchPoolInfo:m,launchAuthProgramId:A,launchMintTransferFeeConfig:k,launchSwapInfo:T,minLaunchOutAmount:K,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async fetchRoutePoolBasicInfo(e){let{amm:t=lr,clmm:n=eo,cpmm:o=no}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ii.offsetOf("baseMint"),length:64}}),r=E([F("baseMint"),F("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:r.decode(p.account.data).baseMint,mintB:r.decode(p.account.data).quoteMint})),c=E([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:lo.span}],dataSlice:{offset:lo.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Ur.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===ve.default.toString()?Z:e,t=t.toString()===ve.default.toString()?Z:t;let r={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),r[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Fe,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let f of p.in)for(let y of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&r[f.id.toString()]===void 0&&(r[f.id.toString()]=f),y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&r[y.id.toString()]===void 0&&(r[y.id.toString()]=y)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(r),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(y=>[y.mintA.toBase58(),y.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(y=>y.id)),r=_r(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new ve(y.mintA.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:y.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(y.mintB.address),a[y.mintB.address]={address:new ve(y.mintB.address),programId:Fe,mintAuthority:null,supply:BigInt(0),decimals:y.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(y=>y.id.toBase58()),!0);Object.values(c).forEach(y=>{let[b,g]=[y.mintA.toBase58(),y.mintB.toBase58()];y.mintProgramA.equals(Fe)?(o.delete(b),a[b]={address:y.mintA,programId:y.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),y.mintProgramB.equals(Fe)?(o.delete(g),a[g]={address:y.mintB,programId:y.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:y.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await To({connection:this.scope.connection,mints:Array.from(o).map(y=>new ve(y))});a=_(_({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(y=>y.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((y,b)=>q(_({},y),{[b]:q(_({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>r[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:r,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:r,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,A,k,T,h,w,x,B,K;let m=l===void 0?new nt(0):e.raw.mul(new nt(l.feeBps.toNumber())).div(new nt(1e4)),d=e.raw.sub(m),p=new Re(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(_({},t),{address:yt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(_({},this.computeAmountOut({itemPool:I,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:p})),{feeConfig:f}))}catch(C){this.logDebug("direct error",I.version,I.id.toString(),C.message)}this.logDebug("direct done");for(let[I,C]of Object.entries(o)){let L={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},N=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:L,amountIn:p})}}catch(v){this.logDebug("route in error",R.version,R.id.toString(),v.message);return}}).sort((R,v)=>{var ce,se,ae,ge;let z=R===void 0?On:R.data.amountOut.amount.raw.sub((se=(ce=R.data.amountOut.fee)==null?void 0:ce.raw)!=null?se:On),H=v===void 0?On:v.data.amountOut.amount.raw.sub((ge=(ae=v.data.amountOut.fee)==null?void 0:ae.raw)!=null?ge:On);return z.lt(H)?1:-1})[0];if(N===void 0)continue;let O=new Re(Or(L),N.data.amountOut.amount.raw.sub((A=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?A:On));for(let R of C.out)try{let v=this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:O});b.push(q(_({},v),{allTrade:!!(N.data.allTrade&&v.allTrade),amountIn:N.data.amountIn,amountOut:v.amountOut,minAmountOut:v.minAmountOut,currentPrice:void 0,executionPrice:new M(new Lt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:v.amountOut.amount.token,numerator:v.amountOut.amount.raw.sub((T=(k=v.amountOut.fee)==null?void 0:k.raw)!=null?T:On)}).toFixed()),priceImpact:new M(N.data.priceImpact.add(v.priceImpact).toFixed()),fee:[N.data.fee[0],v.fee[0]],routeType:"route",poolInfoList:[N.pool,R],remainingAccounts:[N.data.remainingAccounts[0],v.remainingAccounts[0]],minMiddleAmountFee:(h=v.amountOut.fee)!=null&&h.raw?new Re(N.data.amountOut.amount.token,((x=(w=N.data.amountOut.fee)==null?void 0:w.raw)!=null?x:On).add((K=(B=v.amountOut.fee)==null?void 0:B.raw)!=null?K:On)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&v.poolReady,poolType:[N.data.poolType,v.poolType],feeConfig:f,expirationTime:cn(N.data.expirationTime,v.expirationTime)}))}catch(v){this.logDebug("route out error",R.version,R.id.toString(),v.message)}}return b.filter(I=>(I.allTrade||this.logDebug(`pool ${I.poolInfoList.map(C=>C.id.toString()).join(",")} filter out since not all trade`),I.allTrade)).sort((I,C)=>I.amountOut.amount.raw.sub(C.amountOut.amount.raw).gt(On)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:r,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:y,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:k}=Ne.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:r,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(y.toFixed()),priceImpact:new M(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[k],expirationTime:cn(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:r});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ti(q(_({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ti(q(_({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Re(c.token,f)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:r,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:r});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ti(q(_({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ti(q(_({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Re(c.token,f)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:r,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}let i=new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let r=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};r.size>0&&(await Ee(this.scope.connection,Array.from(r).map(l=>({pubkey:new ve(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=_a.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Xr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:q(_({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=_({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Sa({programId:new ve(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Eo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:wt({address:u.mintLp.toBase58(),programId:Fe.toBase58(),decimals:u.lpDecimals}),config:q(_({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as Yf,Transaction as Qa,TransactionInstruction as Hf}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qf}from"@solana/spl-token";import Dl from"bn.js";var kt=class extends De{static getPdaPoolId(e,t){return fe([kt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return fe([kt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Dl(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(l=>kt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<kt.VERSION_PROJECT.length;l++)a.push(...r.map(m=>kt.getPdaOwnerId(t,m,o,l).publicKey));let c=await on(e,[...r,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=r[d],f=a[l],y=c[d],b=c[n.length+l];if(!(y&&b)||y.data.length!==kt.POOL_LAYOUT.span||b.data.length!==kt.OWNER_LAYOUT.span)continue;let g=kt.POOL_LAYOUT.decode(y.data),A=kt.OWNER_LAYOUT.decode(b.data),k=g.openTime.toNumber(),T=g.endTime.toNumber(),h=A.tokenInfo.map(B=>B.debtAmount.gt(new Dl(0))).filter(B=>!B).length!==3,w=i>k&&i<T&&g.status===1,x=h&&w;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:A.lpAmount,project:kt.VERSION_PROJECT[m],openTime:k,endTime:T,canClaim:x,canClaimErrorType:h?w?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,K)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:A.tokenInfo[K].debtAmount.add(A.tokenInfo[K].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(ze.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(ze.WSOL.mint),associatedOnly:u.mintAddress.equals(ze.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),r.push(l)}o.addInstruction({instructions:[kt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:a,signers:c}=o.build();return[{transaction:a,signer:c}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t,feePayer:n}){let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r={};for(let l of e){let m=[];for(let d of l.tokenInfo){let{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({mint:d.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:d.mintAddress.equals(ze.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(ze.WSOL.mint),associatedOnly:d.mintAddress.equals(ze.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[kt.makeClaimInstruction({programId:l.programId,poolInfo:l,ownerInfo:{wallet:i,ownerPda:l.ownerAccountId,claimAddress:m}})]})}let{transaction:a,signers:c}=o.build(),u=o.allInstructions;return xs(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Qa().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Qa().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Qa().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=E([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Qf,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 Hf({keys:i,programId:e,data:a})}},nn=kt;nn.CLAIMED_NUM=3,nn.POOL_LAYOUT=E([xe(8),D("bump"),D("status"),P("openTime"),P("endTime"),F("ammId"),Q(E([D("mintDecimals"),F("mintAddress"),F("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),kt.CLAIMED_NUM,"tokenInfo"),Q(P(),10,"padding")]),nn.OWNER_LAYOUT=E([xe(8),D("bump"),D("version"),F("poolId"),F("owner"),P("lpAmount"),Q(E([F("mintAddress"),P("debtAmount"),P("claimedAmount")]),kt.CLAIMED_NUM,"tokenInfo"),Q(P(),4,"padding")]),nn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Yf(e)),nn.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},nn.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Gi}from"@solana/web3.js";import Gl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Zf,TransactionInstruction as ql}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ul}from"@solana/spl-token";var jf=E([D("instruction"),rc("amount")]),Ui=E([D("instruction")]);function os({programId:s},e){let t=[{pubkey:Ul,isSigner:!1,isWritable:!1},{pubkey:Nu,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Ui.span);return Ui.encode({instruction:2},n),new ql({keys:t,programId:s,data:n})}function ja(s){let{poolConfig:e,userKeys:t,side:n}=s,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,r=Buffer.alloc(Ui.span);Ui.encode({instruction:2},r);let a=[{pubkey:Ul,isWritable:!1,isSigner:!1},{pubkey:Zf,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ql({programId:e.programId,keys:a,data:r})}var $f={[ti.IDO_PROGRAM_ID_V1.toString()]:1,[ti.IDO_PROGRAM_ID_V2.toString()]:2,[ti.IDO_PROGRAM_ID_V3.toString()]:3,[ti.IDO_PROGRAM_ID_V4.toString()]:4},Go=class extends De{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i,feePayer:r}){let a=this.createTxBuilder(r),c=$f[t.programId];c||this.logAndCreateError("invalid version",c);let u=pt(t),[l,m]=[!new Gl(e.coin).isZero(),!new Gl(e.pc).isZero()],d=u.projectInfo.mint.address.equals(Z),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!d,notUseTokenAccount:d,associatedOnly:d?!1:n,checkCreateATAOwner:o});!p&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&f&&a.addInstruction(f);let y=u.buyInfo.mint.address.equals(Z),{account:b,instructionParams:g}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!p&&m&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),m&&g&&a.addInstruction(g),(!p||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),c===3)return a.addInstruction({instructions:[...l?[os({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[os({programId:new Gi(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[os({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Gi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let A={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:p,quoteTokenAccount:b,ledgerAccount:new Gi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[ja(q(_({},A),{side:"base"}))]:[],...m?[ja(q(_({},A),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as Jf}from"@solana/web3.js";import{MintLayout as ey,TOKEN_2022_PROGRAM_ID as Za,TOKEN_PROGRAM_ID as $a}from"@solana/spl-token";var Xi=class extends De{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Set;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:r,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Set(r),this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(En.address,En),this._mintGroup.official.add(En.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Za.toBase58():$a.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Za.toBase58():$a.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,q(_({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Za.toBase58():$a.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return En;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(_({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new Jf(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=ey.decode(r.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:r.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var is=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:r,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed",loopMultiTxStatus:l}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new un(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=we("Raydium"),this.farm=new fi({scope:this,moduleName:"Raydium_Farm"}),this.account=new si({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ci({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Xi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new qi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Li({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ei({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new nn({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new _o({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Go({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new Di({scope:this,moduleName:"Raydium_lauchpad"}),this.availability={};let m=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:m,value:{chainTime:r||Date.now()-a,offset:a}})}static async load(e){var l;let t=ty({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new Pr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new is(q(_({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Ar);return this._owner.publicKey}setOwner(e){return this._owner=e?new un(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Zu);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw console.error(Ar),new Error(Ar)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){if(this.cluster==="devnet")return[];let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(o=>q(_({},o),{mintAuthority:o.mint_authority||void 0,freezeAuthority:o.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{is as Raydium};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=raydium.mjs.map