@raydium-io/raydium-sdk-v2 0.2.42-alpha → 0.2.43-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 (115) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/api.js +1 -1
  3. package/lib/api/api.js.map +1 -1
  4. package/lib/api/api.mjs +1 -1
  5. package/lib/api/api.mjs.map +1 -1
  6. package/lib/api/index.d.ts +1 -1
  7. package/lib/api/index.js +1 -1
  8. package/lib/api/index.js.map +1 -1
  9. package/lib/api/index.mjs +1 -1
  10. package/lib/api/index.mjs.map +1 -1
  11. package/lib/api/type.d.ts +1 -1
  12. package/lib/api/type.js +1 -1
  13. package/lib/api/type.js.map +1 -1
  14. package/lib/api/type.mjs +1 -1
  15. package/lib/api/type.mjs.map +1 -1
  16. package/lib/api/url.d.ts +10 -10
  17. package/lib/api/url.js +1 -1
  18. package/lib/api/url.js.map +1 -1
  19. package/lib/api/url.mjs +1 -1
  20. package/lib/api/url.mjs.map +1 -1
  21. package/lib/{api-ce8cb0e7.d.ts → api-aa5759c5.d.ts} +7 -7
  22. package/lib/common/accountInfo.d.ts +1 -1
  23. package/lib/common/bignumber.d.ts +1 -1
  24. package/lib/common/constant.d.ts +1 -1
  25. package/lib/common/fractionUtil.d.ts +1 -1
  26. package/lib/common/index.d.ts +1 -1
  27. package/lib/common/transfer.d.ts +1 -1
  28. package/lib/common/txTool/txTool.d.ts +1 -1
  29. package/lib/common/txTool/txUtils.d.ts +1 -1
  30. package/lib/common/utility.d.ts +1 -1
  31. package/lib/index.d.ts +3 -3
  32. package/lib/index.js +1 -1
  33. package/lib/index.js.map +1 -1
  34. package/lib/index.mjs +1 -1
  35. package/lib/index.mjs.map +1 -1
  36. package/lib/module/amount.d.ts +1 -1
  37. package/lib/module/fraction.d.ts +1 -1
  38. package/lib/module/index.d.ts +1 -1
  39. package/lib/module/percent.d.ts +1 -1
  40. package/lib/module/price.d.ts +1 -1
  41. package/lib/raydium/account/account.d.ts +3 -3
  42. package/lib/raydium/account/index.d.ts +1 -1
  43. package/lib/raydium/account/instruction.d.ts +1 -1
  44. package/lib/raydium/account/types.d.ts +1 -1
  45. package/lib/raydium/account/util.d.ts +1 -1
  46. package/lib/raydium/clmm/clmm.d.ts +3 -3
  47. package/lib/raydium/clmm/index.d.ts +3 -3
  48. package/lib/raydium/clmm/index.js +1 -1
  49. package/lib/raydium/clmm/index.mjs +1 -1
  50. package/lib/raydium/clmm/instrument.d.ts +2 -2
  51. package/lib/raydium/clmm/type.d.ts +2 -2
  52. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  53. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  54. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  55. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  56. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  57. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  58. package/lib/raydium/cpmm/index.d.ts +1 -1
  59. package/lib/raydium/cpmm/instruction.d.ts +1 -1
  60. package/lib/raydium/cpmm/type.d.ts +1 -1
  61. package/lib/raydium/farm/config.d.ts +1 -1
  62. package/lib/raydium/farm/farm.d.ts +3 -3
  63. package/lib/raydium/farm/index.d.ts +1 -1
  64. package/lib/raydium/farm/instruction.d.ts +1 -1
  65. package/lib/raydium/farm/layout.d.ts +1 -1
  66. package/lib/raydium/farm/type.d.ts +1 -1
  67. package/lib/raydium/farm/util.d.ts +1 -1
  68. package/lib/raydium/ido/ido.d.ts +3 -3
  69. package/lib/raydium/ido/index.d.ts +3 -3
  70. package/lib/raydium/ido/instruction.d.ts +1 -1
  71. package/lib/raydium/ido/type.d.ts +1 -1
  72. package/lib/raydium/index.d.ts +3 -3
  73. package/lib/raydium/index.js +1 -1
  74. package/lib/raydium/index.js.map +1 -1
  75. package/lib/raydium/index.mjs +1 -1
  76. package/lib/raydium/index.mjs.map +1 -1
  77. package/lib/raydium/launchpad/curve/curve.d.ts +1 -1
  78. package/lib/raydium/launchpad/index.d.ts +3 -3
  79. package/lib/raydium/launchpad/instrument.d.ts +1 -1
  80. package/lib/raydium/launchpad/launchpad.d.ts +3 -3
  81. package/lib/raydium/launchpad/pda.d.ts +1 -1
  82. package/lib/raydium/launchpad/pda.js +1 -1
  83. package/lib/raydium/launchpad/pda.mjs +1 -1
  84. package/lib/raydium/launchpad/type.d.ts +1 -1
  85. package/lib/raydium/liquidity/index.d.ts +1 -1
  86. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  87. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  88. package/lib/raydium/liquidity/type.d.ts +1 -1
  89. package/lib/raydium/liquidity/utils.d.ts +1 -1
  90. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  91. package/lib/raydium/marketV2/index.d.ts +3 -3
  92. package/lib/raydium/moduleBase.d.ts +3 -3
  93. package/lib/raydium/raydium.d.ts +3 -3
  94. package/lib/raydium/raydium.js +1 -1
  95. package/lib/raydium/raydium.js.map +1 -1
  96. package/lib/raydium/raydium.mjs +1 -1
  97. package/lib/raydium/raydium.mjs.map +1 -1
  98. package/lib/raydium/token/constant.d.ts +1 -1
  99. package/lib/raydium/token/index.d.ts +1 -1
  100. package/lib/raydium/token/token.d.ts +3 -3
  101. package/lib/raydium/token/type.d.ts +1 -1
  102. package/lib/raydium/token/utils.d.ts +1 -1
  103. package/lib/raydium/tradeV2/index.d.ts +2 -2
  104. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  105. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  106. package/lib/raydium/tradeV2/type.d.ts +2 -2
  107. package/lib/raydium/type.d.ts +1 -1
  108. package/lib/raydium/utils1216/index.d.ts +3 -3
  109. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  110. package/lib/{raydium-d940abae.d.ts → raydium-940808d1.d.ts} +2 -2
  111. package/lib/{type-526e8620.d.ts → type-3ac7311b.d.ts} +1 -1
  112. package/package.json +1 -1
  113. package/src/api/api.ts +12 -5
  114. package/src/api/type.ts +6 -6
  115. package/src/api/url.ts +7 -7
@@ -1,4 +1,4 @@
1
- var tm=Object.defineProperty,nm=Object.defineProperties;var om=Object.getOwnPropertyDescriptors;var Zi=Object.getOwnPropertySymbols;var yu=Object.prototype.hasOwnProperty,bu=Object.prototype.propertyIsEnumerable;var fu=(s,e,t)=>e in s?tm(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,V=(s,e)=>{for(var t in e||(e={}))yu.call(e,t)&&fu(s,t,e[t]);if(Zi)for(var t of Zi(e))bu.call(e,t)&&fu(s,t,e[t]);return s},q=(s,e)=>nm(s,om(e));var Xe=(s,e)=>{var t={};for(var n in s)yu.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&Zi)for(var n of Zi(s))e.indexOf(n)<0&&bu.call(s,n)&&(t[n]=s[n]);return t};import{merge as ly}from"lodash";import nc from"axios";import{PublicKey as Au}from"@solana/web3.js";import{get as gu,set as im}from"lodash";var ps=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}},Pu={},rm={};function he(s){let e=gu(Pu,s);if(!e){let t=gu(rm,s);e=new ps({name:s,logLevel:t}),im(Pu,s,e)}return e}import{MINT_SIZE as sm,TOKEN_PROGRAM_ID as am,getTransferFeeConfig as um,unpackMint as cm}from"@solana/spl-token";var fs=he("Raydium_accountInfo_util");async function on(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=V({batchRequest:!1},t),r=ys(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=ys(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&fs.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"&&fs.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new Au(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&fs.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(V({},o),{accountInfo:n[i]}))}async function xo({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ee(s,e.map(c=>({pubkey:Pt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<sm){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=cm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(V({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||am,feeConfig:(a=um(u))!=null?a:void 0})}return o[Au.default.toBase58()]=o[Z.toBase58()],o}import gn from"bn.js";var So=9e15,Vn=1e9,bs="0123456789abcdef",er="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",tr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",gs={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-So,maxE:So,crypto:!1},Tu,kn,Pe=!0,or="[DecimalError] ",Fn=or+"Invalid argument: ",Iu=or+"Precision limit exceeded",Bu=or+"crypto unavailable",xu="[object Decimal]",At=Math.floor,rt=Math.pow,lm=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,mm=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,dm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Su=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,rn=1e7,fe=7,pm=9007199254740991,fm=er.length-1,Ps=tr.length-1,X={toStringTag:xu};X.absoluteValue=X.abs=function(){var s=new this.constructor(this);return s.s<0&&(s.s=1),ae(s)};X.ceil=function(){return ae(new this.constructor(this),this.e+1,2)};X.clampedTo=X.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)};X.comparedTo=X.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};X.cosine=X.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())+fe,n.rounding=1,t=ym(n,Nu(n,t)),n.precision=s,n.rounding=e,ae(kn==2||kn==3?t.neg():t,s,e,!0)):new n(1):new n(NaN)};X.cubeRoot=X.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(Pe=!1,i=l.s*rt(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=pt(l.d),s=l.e,(i=(s-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=rt(t,1/3),s=At((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),pt(a.d).slice(0,r)===(t=pt(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t=="9999"||!o&&t=="4999"){if(!o&&(ae(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")&&(ae(n,s+1,1),e=!n.times(n).times(n).eq(l));break}return Pe=!0,ae(n,s,m.rounding,e)};X.decimalPlaces=X.dp=function(){var s,e=this.d,t=NaN;if(e){if(s=e.length-1,t=(s-At(this.e/fe))*fe,s=e[s],s)for(;s%10==0;s/=10)t--;t<0&&(t=0)}return t};X.dividedBy=X.div=function(s){return _e(this,new this.constructor(s))};X.dividedToIntegerBy=X.divToInt=function(s){var e=this,t=e.constructor;return ae(_e(e,new t(s),0,1,1),t.precision,t.rounding)};X.equals=X.eq=function(s){return this.cmp(s)===0};X.floor=function(){return ae(new this.constructor(this),this.e+1,3)};X.greaterThan=X.gt=function(s){return this.cmp(s)>0};X.greaterThanOrEqualTo=X.gte=function(s){var e=this.cmp(s);return e==1||e===0};X.hyperbolicCosine=X.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/rr(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=Ko(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 ae(i,r.precision=t,r.rounding=n,!0)};X.hyperbolicSine=X.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=Ko(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/rr(5,s)),o=Ko(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,ae(o,e,t,!0)};X.hyperbolicTangent=X.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)};X.inverseCosine=X.acos=function(){var s=this,e=s.constructor,t=s.abs().cmp(1),n=e.precision,o=e.rounding;return t!==-1?t===0?s.isNeg()?yn(e,n,o):new e(0):new e(NaN):s.isZero()?yn(e,n+4,o).times(.5):(e.precision=n+6,e.rounding=1,s=new e(1).minus(s).div(s.plus(1)).sqrt().atan(),e.precision=n,e.rounding=o,s.times(2))};X.inverseHyperbolicCosine=X.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,Pe=!1,t=t.times(t).minus(1).sqrt().plus(t),Pe=!0,n.precision=s,n.rounding=e,t.ln()):new n(t)};X.inverseHyperbolicSine=X.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,Pe=!1,t=t.times(t).plus(1).sqrt().plus(t),Pe=!0,n.precision=s,n.rounding=e,t.ln())};X.inverseHyperbolicTangent=X.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?ae(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)};X.inverseSine=X.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=yn(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)))};X.inverseTangent=X.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<=Ps)return r=yn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=Ps)return r=yn(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/fe+2|0),s=t;s;--s)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(Pe=!1,e=Math.ceil(a/fe),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)),Pe=!0,ae(r,l.precision=m,l.rounding=d,!0)};X.isFinite=function(){return!!this.d};X.isInteger=X.isInt=function(){return!!this.d&&At(this.e/fe)>this.d.length-2};X.isNaN=function(){return!this.s};X.isNegative=X.isNeg=function(){return this.s<0};X.isPositive=X.isPos=function(){return this.s>0};X.isZero=function(){return!!this.d&&this.d[0]===0};X.lessThan=X.lt=function(s){return this.cmp(s)<0};X.lessThanOrEqualTo=X.lte=function(s){return this.cmp(s)<1};X.logarithm=X.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(Pe=!1,a=m+p,r=Mn(u,a),n=e?nr(l,a+10):Mn(s,a),c=_e(r,n,a,1),Ho(c.d,o=m,d))do if(a+=10,r=Mn(u,a),n=e?nr(l,a+10):Mn(s,a),c=_e(r,n,a,1),!i){+pt(c.d).slice(o+1,o+15)+1==1e14&&(c=ae(c,m+1,0));break}while(Ho(c.d,o+=10,d));return Pe=!0,ae(c,m,d)};X.minus=X.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 Pe?ae(s,a,c):s}if(t=At(s.e/fe),l=At(p.e/fe),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/fe),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]=rn-1;--u[o],u[n]+=rn}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=ir(u,t),Pe?ae(s,a,c):s):new f(c===3?-0:0)};X.modulo=X.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]?ae(new n(t),n.precision,n.rounding):(Pe=!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),Pe=!0,t.minus(e))};X.naturalExponential=X.exp=function(){return As(this)};X.naturalLogarithm=X.ln=function(){return Mn(this)};X.negated=X.neg=function(){var s=new this.constructor(this);return s.s=-s.s,ae(s)};X.plus=X.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)),Pe?ae(s,a,c):s;if(i=At(m.e/fe),n=At(s.e/fe),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/fe),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)/rn|0,u[o]%=rn;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=ir(u,n),Pe?ae(s,a,c):s};X.precision=X.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=Ku(t.d),s&&t.e+1>e&&(e=t.e+1)):e=NaN,e};X.round=function(){var s=this,e=s.constructor;return ae(new e(s),s.e+1,e.rounding)};X.sine=X.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())+fe,n.rounding=1,t=gm(n,Nu(n,t)),n.precision=s,n.rounding=e,ae(kn>2?t.neg():t,s,e,!0)):new n(NaN)};X.squareRoot=X.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(Pe=!1,u=Math.sqrt(+r),u==0||u==1/0?(e=pt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=At((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),pt(i.d).slice(0,t)===(e=pt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(ae(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")&&(ae(n,c+1,1),s=!n.times(n).eq(r));break}return Pe=!0,ae(n,c,l.rounding,s)};X.tangent=X.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,ae(kn==2||kn==4?t.neg():t,s,e,!0)):new n(NaN)};X.times=X.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=At(l.e/fe)+At(s.e/fe),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%rn|0,e=a/rn|0;i[o]=(i[o]+e)%rn|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=ir(i,t),Pe?ae(s,m.precision,m.rounding):s};X.toBinary=function(s,e){return ws(this,2,s,e)};X.toDecimalPlaces=X.toDP=function(s,e){var t=this,n=t.constructor;return t=new n(t),s===void 0?t:(vt(s,0,Vn),e===void 0?e=n.rounding:vt(e,0,8),ae(t,s+t.e+1,e))};X.toExponential=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=bn(n,!0):(vt(s,0,Vn),e===void 0?e=o.rounding:vt(e,0,8),n=ae(new o(n),s+1,e),t=bn(n,!0,s+1)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toFixed=function(s,e){var t,n,o=this,i=o.constructor;return s===void 0?t=bn(o):(vt(s,0,Vn),e===void 0?e=i.rounding:vt(e,0,8),n=ae(new i(o),s+o.e+1,e),t=bn(n,!1,s+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};X.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=Ku(f)-p.e-1,r=i%fe,e.d[0]=rt(10,r<0?fe+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(Pe=!1,a=new y(pt(f)),l=y.precision,y.precision=i=f.length*fe*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,Pe=!0,d};X.toHexadecimal=X.toHex=function(s,e){return ws(this,16,s,e)};X.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:vt(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]?(Pe=!1,t=_e(t,s,0,e,1).times(s),Pe=!0,ae(t)):(s.s=t.s,t=s),t};X.toNumber=function(){return+this};X.toOctal=function(s,e){return ws(this,8,s,e)};X.toPower=X.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(rt(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,s.eq(1))return ae(a,n,i);if(e=At(s.e/fe),e>=s.d.length-1&&(t=u<0?-u:u)<=pm)return o=Cu(c,a,t,n),s.s<0?new c(1).div(o):ae(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=rt(+a,u),e=t==0||!isFinite(t)?At(u*(Math.log("0."+pt(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):(Pe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=As(s.times(Mn(a,n+t)),n),o.d&&(o=ae(o,n+5,1),Ho(o.d,n,i)&&(e=n+10,o=ae(As(s.times(Mn(a,e+t)),e),e+5,1),+pt(o.d).slice(n+1,n+15)+1==1e14&&(o=ae(o,n+1,0)))),o.s=r,Pe=!0,c.rounding=i,ae(o,n,i))};X.toPrecision=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=bn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(vt(s,1,Vn),e===void 0?e=o.rounding:vt(e,0,8),n=ae(new o(n),s,e),t=bn(n,s<=n.e||n.e<=o.toExpNeg,s)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toSignificantDigits=X.toSD=function(s,e){var t=this,n=t.constructor;return s===void 0?(s=n.precision,e=n.rounding):(vt(s,1,Vn),e===void 0?e=n.rounding:vt(e,0,8)),ae(new n(t),s,e)};X.toString=function(){var s=this,e=s.constructor,t=bn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()&&!s.isZero()?"-"+t:t};X.truncated=X.trunc=function(){return ae(new this.constructor(this),this.e+1,1)};X.valueOf=X.toJSON=function(){var s=this,e=s.constructor,t=bn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()?"-"+t:t};function pt(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=fe-n.length,t&&(i+=vn(t)),i+=n;r=s[e],n=r+"",t=fe-n.length,t&&(i+=vn(t))}else if(r===0)return"0";for(;r%10===0;)r/=10;return i+r}function vt(s,e,t){if(s!==~~s||s<e||s>t)throw Error(Fn+s)}function Ho(s,e,t,n){var o,i,r,a;for(i=s[0];i>=10;i/=10)--e;return--e<0?(e+=fe,o=0):(o=Math.ceil((e+1)/fe),e%=fe),i=rt(10,fe-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)==rt(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)==rt(10,e-3)-1,r}function $i(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]+=bs.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 ym(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/rr(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=Ko(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,P,w,T,h,k,B,x,S,I,C,N,L=n.constructor,v=n.s==o.s?1:-1,R=n.d,M=o.d;if(!R||!R[0]||!M||!M[0])return new L(!n.s||!o.s||(R?M&&R[0]==M[0]:!M)?NaN:R&&R[0]==0||!M?v*0:v/0);for(c?(p=1,l=n.e-o.e):(c=rn,p=fe,l=At(n.e/p)-At(o.e/p)),C=M.length,S=R.length,g=new L(v),P=g.d=[],m=0;M[m]==(R[m]||0);m++);if(M[m]>(R[m]||0)&&l--,i==null?(k=i=L.precision,r=L.rounding):a?k=i+(n.e-o.e)+1:k=i,k<0)P.push(1),f=!0;else{if(k=k/p+2|0,m=0,C==1){for(d=0,M=M[0],k++;(m<S||d)&&k--;m++)B=d*c+(R[m]||0),P[m]=B/M|0,d=B%M|0;f=d||m<S}else{for(d=c/(M[0]+1)|0,d>1&&(M=s(M,d,c),R=s(R,d,c),C=M.length,S=R.length),x=C,w=R.slice(0,C),T=w.length;T<C;)w[T++]=0;N=M.slice(),N.unshift(0),I=M[0],M[1]>=c/2&&++I;do d=0,u=e(M,w,C,T),u<0?(h=w[0],C!=T&&(h=h*c+(w[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(M,d,c),b=y.length,T=w.length,u=e(y,w,b,T),u==1&&(d--,t(y,C<b?N:M,b,c))):(d==0&&(u=d=1),y=M.slice()),b=y.length,b<T&&y.unshift(0),t(w,y,T,c),u==-1&&(T=w.length,u=e(M,w,C,T),u<1&&(d++,t(w,C<T?N:M,T,c))),T=w.length):u===0&&(d++,w=[0]),P[m++]=d,u&&w[0]?w[T++]=R[x]||0:(w=[R[x]],T=1);while((x++<S||w[0]!==void 0)&&k--);f=w[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Tu=f;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,ae(g,a?i+g.e+1:i,r,f)}return g}}();function ae(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+=fe,r=e,l=m[d=0],c=l/rt(10,o-r-1)%10|0;else if(d=Math.ceil((i+1)/fe),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=fe,r=i-fe+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=fe,r=i-fe+o,c=r<0?0:l/rt(10,o-r-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(r<0?l:l%rt(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/rt(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]=rt(10,(fe-e%fe)%fe),s.e=-e||0):m[0]=s.e=0,s;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=rt(10,fe-i),m[d]=r>0?(l/rt(10,o-r)%rt(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]==rn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=rn)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return Pe&&(s.e>p.maxE?(s.d=null,s.e=NaN):s.e<p.minE&&(s.e=0,s.d=[0])),s}function bn(s,e,t){if(!s.isFinite())return Lu(s);var n,o=s.e,i=pt(s.d),r=i.length;return e?(t&&(n=t-r)>0?i=i.charAt(0)+"."+i.slice(1)+vn(n):r>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(s.e<0?"e":"e+")+s.e):o<0?(i="0."+vn(-o-1)+i,t&&(n=t-r)>0&&(i+=vn(n))):o>=r?(i+=vn(o+1-r),t&&(n=t-o-1)>0&&(i=i+"."+vn(n))):((n=o+1)<r&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-r)>0&&(o+1===r&&(i+="."),i+=vn(n))),i}function ir(s,e){var t=s[0];for(e*=fe;t>=10;t/=10)e++;return e}function nr(s,e,t){if(e>fm)throw Pe=!0,t&&(s.precision=t),Error(Iu);return ae(new s(er),e,1,!0)}function yn(s,e,t){if(e>Ps)throw Error(Iu);return ae(new s(tr),e,t,!0)}function Ku(s){var e=s.length-1,t=e*fe+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 vn(s){for(var e="";s--;)e+="0";return e}function Cu(s,e,t,n){var o,i=new s(1),r=Math.ceil(n/fe+4);for(Pe=!1;;){if(t%2&&(i=i.times(e),ku(i.d,r)&&(o=!0)),t=At(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ku(e.d,r)}return Pe=!0,i}function wu(s){return s.d[s.d.length-1]&1}function Ru(s,e,t){for(var n,o,i=new s(e[0]),r=0;++r<e.length;){if(o=new s(e[r]),!o.s){i=o;break}n=i.cmp(o),(n===t||n===0&&i.s===t)&&(i=o)}return i}function As(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?(Pe=!1,c=f):c=e,a=new d(.03125);s.e>-2;)s=s.times(a),m+=5;for(n=Math.log(rt(2,m))/Math.LN10*2+5|0,c+=n,t=i=r=new d(1),d.precision=c;;){if(i=ae(i.times(s),c,1),t=t.times(++l),a=r.plus(_e(i,t,c,1)),pt(a.d).slice(0,c)===pt(r.d).slice(0,c)){for(o=m;o--;)r=ae(r.times(r),c,1);if(e==null)if(u<3&&Ho(r.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return ae(r,d.precision=f,p,Pe=!0);else return d.precision=f,r}r=a}}function Mn(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,P=g.rounding,w=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?(Pe=!1,l=w):l=e,g.precision=l+=f,t=pt(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=pt(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=nr(g,l+2,w).times(i+""),y=Mn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=w,e==null?ae(y,w,P,Pe=!0):y;for(m=y,c=r=y=_e(y.minus(1),y.plus(1),l,1),d=ae(y.times(y),l,1),o=3;;){if(r=ae(r.times(d),l,1),u=c.plus(_e(r,new g(o),l,1)),pt(u.d).slice(0,l)===pt(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(nr(g,l+2,w).times(i+""))),c=_e(c,new g(p),l,1),e==null)if(Ho(c.d,l-f,P,a))g.precision=l+=f,u=r=y=_e(m.minus(1),m.plus(1),l,1),d=ae(y.times(y),l,1),o=a=1;else return ae(c,g.precision=w,P,Pe=!0);else return g.precision=w,c;c=u,o+=2}}function Lu(s){return String(s.s*s.s/0)}function Ji(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)%fe,t<0&&(n+=fe),n<o){for(n&&s.d.push(+e.slice(0,n)),o-=fe;n<o;)s.d.push(+e.slice(n,n+=fe));e=e.slice(n),n=fe-e.length}else n-=o;for(;n--;)e+="0";s.d.push(+e),Pe&&(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 bm(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Su.test(e))return Ji(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(mm.test(e))t=16,e=e.toLowerCase();else if(lm.test(e))t=2;else if(dm.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=Cu(n,new n(t),i,i*2)),u=$i(e,t,rn),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=ir(u,l),s.d=u,Pe=!1,r&&(s=_e(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?rt(2,c):Qo.pow(2,c))),Pe=!0,s)}function gm(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Ko(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/rr(5,t)),e=Ko(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 Ko(s,e,t,n,o){var i,r,a,c,u=1,l=s.precision,m=Math.ceil(l/fe);for(Pe=!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 Pe=!0,r.d.length=m+1,r}function rr(s,e){for(var t=s;--e;)t*=s;return t}function Nu(s,e){var t,n=e.s<0,o=yn(s,s.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return kn=n?4:1,e;if(t=e.divToInt(o),t.isZero())kn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return kn=wu(t)?n?2:3:n?4:1,e;kn=wu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function ws(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(vt(t,1,Vn),n===void 0?n=p.rounding:vt(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Lu(s);else{for(l=bn(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=$i(bn(d),10,o),d.e=d.d.length),m=$i(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=Tu),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+=bs.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=$i(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=bs.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 ku(s,e){if(s.length>e)return s.length=e,!0}function Pm(s){return new this(s).abs()}function Am(s){return new this(s).acos()}function wm(s){return new this(s).acosh()}function km(s,e){return new this(s).plus(e)}function hm(s){return new this(s).asin()}function Tm(s){return new this(s).asinh()}function Im(s){return new this(s).atan()}function Bm(s){return new this(s).atanh()}function xm(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=yn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?yn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=yn(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=yn(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 Sm(s){return new this(s).cbrt()}function Km(s){return ae(s=new this(s),s.e+1,2)}function Cm(s,e,t){return new this(s).clamp(e,t)}function Rm(s){if(!s||typeof s!="object")throw Error(or+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,Vn,"rounding",0,8,"toExpNeg",-So,0,"toExpPos",0,So,"maxE",0,So,"minE",-So,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=gs[t]),(n=s[t])!==void 0)if(At(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]=gs[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(Bu);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function Lm(s){return new this(s).cos()}function Nm(s){return new this(s).cosh()}function Ou(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,hu(i)){u.s=i.s,Pe?!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++;Pe?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}if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Ji(u,i.toString())}if(c==="string")return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Su.test(i)?Ji(u,i):bm(u,i);if(c==="bigint")return i<0?(i=-i,u.s=-1):u.s=1,Ji(u,i.toString());throw Error(Fn+i)}if(o.prototype=X,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=Rm,o.clone=Ou,o.isDecimal=hu,o.abs=Pm,o.acos=Am,o.acosh=wm,o.add=km,o.asin=hm,o.asinh=Tm,o.atan=Im,o.atanh=Bm,o.atan2=xm,o.cbrt=Sm,o.ceil=Km,o.clamp=Cm,o.cos=Lm,o.cosh=Nm,o.div=Om,o.exp=vm,o.floor=Mm,o.hypot=Fm,o.ln=Vm,o.log=_m,o.log10=Wm,o.log2=Em,o.max=Dm,o.min=qm,o.mod=Um,o.mul=Gm,o.pow=Xm,o.random=zm,o.round=Ym,o.sign=Hm,o.sin=Qm,o.sinh=jm,o.sqrt=Zm,o.sub=$m,o.sum=Jm,o.tan=ed,o.tanh=td,o.trunc=nd,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 Om(s,e){return new this(s).div(e)}function vm(s){return new this(s).exp()}function Mm(s){return ae(s=new this(s),s.e+1,3)}function Fm(){var s,e,t=new this(0);for(Pe=!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 Pe=!0,new this(1/0);t=e}return Pe=!0,t.sqrt()}function hu(s){return s instanceof Qo||s&&s.toStringTag===xu||!1}function Vm(s){return new this(s).ln()}function _m(s,e){return new this(s).log(e)}function Em(s){return new this(s).log(2)}function Wm(s){return new this(s).log(10)}function Dm(){return Ru(this,arguments,-1)}function qm(){return Ru(this,arguments,1)}function Um(s,e){return new this(s).mod(e)}function Gm(s,e){return new this(s).mul(e)}function Xm(s,e){return new this(s).pow(e)}function zm(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:vt(s,1,Vn),n=Math.ceil(s/fe),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(Bu);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],s%=fe,n&&s&&(o=rt(10,fe-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-=fe)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<fe&&(t-=fe-n)}return r.e=t,r.d=a,r}function Ym(s){return ae(s=new this(s),s.e+1,this.rounding)}function Hm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function Qm(s){return new this(s).sin()}function jm(s){return new this(s).sinh()}function Zm(s){return new this(s).sqrt()}function $m(s,e){return new this(s).sub(e)}function Jm(){var s=0,e=arguments,t=new this(e[s]);for(Pe=!1;t.s&&++s<e.length;)t=t.plus(e[s]);return Pe=!0,ae(t,this.precision,this.rounding)}function ed(s){return new this(s).tan()}function td(s){return new this(s).tanh()}function nd(s){return ae(s=new this(s),s.e+1,1)}X[Symbol.for("nodejs.util.inspect.custom")]=X.toString;X[Symbol.toStringTag]="Decimal";var Qo=X.constructor=Ou(gs);er=new Qo(er);tr=new Qo(tr);var O=Qo;import ld from"big.js";import ur from"bn.js";import od from"toformat";var id=od,jo=id;import ar from"big.js";import sd from"bn.js";import ad from"decimal.js-light";import Zo from"bn.js";var vu=9007199254740991;function se(s){let e=he("Raydium_parseBigNumberish");if(s instanceof Zo)return s;if(typeof s=="string"){if(s.match(/^-?[0-9]+$/))return new Zo(s);e.logWithError(`invalid BigNumberish string: ${s}`)}return typeof s=="number"?(s%1&&e.logWithError(`BigNumberish number underflow: ${s}`),(s>=vu||s<=-vu)&&e.logWithError(`BigNumberish number overflow: ${s}`),new Zo(String(s))):typeof s=="bigint"?new Zo(s.toString()):(e.error(`invalid BigNumberish value: ${s}`),new Zo(0))}var sr=he("module/fraction"),ks=jo(ar),$o=jo(ad),ud={[0]:$o.ROUND_DOWN,[1]:$o.ROUND_HALF_UP,[2]:$o.ROUND_UP},cd={[0]:ar.roundDown,[1]:ar.roundHalfUp,[2]:ar.roundUp},Ne=class{constructor(e,t=new sd(1)){this.numerator=se(e),this.denominator=se(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ne(this.denominator,this.numerator)}add(e){let t=e instanceof Ne?e:new Ne(se(e));return this.denominator.eq(t.denominator)?new Ne(this.numerator.add(t.numerator),this.denominator):new Ne(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ne?e:new Ne(se(e));return this.denominator.eq(t.denominator)?new Ne(this.numerator.sub(t.numerator),this.denominator):new Ne(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ne?e:new Ne(se(e));return new Ne(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ne?e:new Ne(se(e));return new Ne(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||sr.logWithError(`${e} is not an integer.`),e<=0&&sr.logWithError(`${e} is not positive.`),$o.set({precision:e+1,rounding:ud[n]});let o=new $o(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)||sr.logWithError(`${e} is not an integer.`),e<0&&sr.logWithError(`${e} is negative.`),ks.DP=e,ks.RM=cd[n]||1,new ks(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var md=he("Raydium_amount"),Mu=jo(ld);function dd(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")):md.logWithError(`invalid number string, num: ${s}`)}else t=s;return[t,n.slice(0,e)||n]}var Me=class extends Ne{constructor(t,n,o=!0,i){let r=new ur(0),a=hs.pow(new ur(t.decimals));if(o)r=se(n);else{let c=new ur(0),u=new ur(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=dd(n.toString(),t.decimals);c=se(l),u=se(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=he(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 Me(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Me(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 Mu.DP=this.token.decimals,new Mu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as pd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";var _n={chainId:101,address:pd.default.toBase58(),programId:Fu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},wt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fu.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 Ss}from"@solana/web3.js";import{PublicKey as ze,SystemProgram as Vu,SYSVAR_RENT_PUBKEY as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as yd}from"@solana/spl-token";function K({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var Ts=[K({pubkey:yd,isWritable:!1}),K({pubkey:Vu.programId,isWritable:!1}),K({pubkey:fd,isWritable:!1})];function Is({publicKey:s,transformSol:e}){let t=Bs(s.toString());if(t instanceof ze)return e&&t.equals(ct)?Z:t;if(e&&t.toString()===ct.toBase58())return Z;if(typeof t=="string"){if(t===ze.default.toBase58())return ze.default;try{return new ze(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Bs(s){try{return new ze(s)}catch{return s}}var cr=new ze("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),En=new ze("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ft=new ze("SysvarRent111111111111111111111111111111111"),_u=new ze("SysvarC1ock11111111111111111111111111111111"),sn=new ze("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),bd=new ze("Sysvar1nstructions1111111111111111111111111"),xs=Vu.programId,Jy=new ze("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),eb=new ze("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),tb=new ze("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),nb=new ze("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),ob=new ze("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),ib=new ze("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),rb=new ze("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),sb=new ze("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ab=new ze("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),ub=new ze("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),cb=new ze("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new ze("So11111111111111111111111111111111111111112"),ct=ze.default;function Pt(s){return Is({publicKey:s,transformSol:!0})}var Ks=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===ct.toBase58()||e instanceof Ss&&ct.equals(e)){this.decimals=wt.decimals,this.symbol=wt.symbol,this.name=wt.name,this.mint=new Ss(wt.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?Ss.default:Is({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ye=Ks;Ye.WSOL=new Ks(q(V({},wt),{mint:wt.address}));var Cs=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},lr=Cs;lr.SOL=new Cs(_n);import gd from"bn.js";var Eu=new Ne(new gd(100)),lt=class extends Ne{toSignificant(e=5,t,n){return this.mul(Eu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eu).toFixed(e,t,n)}};var Pd=he("Raydium_price"),Mt=class extends Ne{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ne(Rs(n.decimals),Rs(o.decimals))}get raw(){return new Ne(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Pd.logWithError("mul token not equals");let n=super.mul(t);return new Mt({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 Ft=new gn(0),Wu=new gn(1),$b=new gn(2),Jb=new gn(3),eg=new gn(5),hs=new gn(10),tg=new gn(100),ng=new gn(1e3),og=new gn(1e4);function Rs(s){return hs.pow(se(s))}function mr(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 gn(1)).div(t)}function dr(s,e,t){return s.mul(e).div(t)}function ys(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var an=class{constructor(e){this._owner=e}get publicKey(){return an.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return an.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return an.isKeyPair(this._owner)}get isPublicKey(){return an.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!an.isKeyPair(e)}};import{PublicKey as Id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bd}from"@solana/spl-token";import{ComputeBudgetProgram as Du,Keypair as Uu,PublicKey as Ad,Transaction as Gu,TransactionMessage as wd,VersionedTransaction as Xu}from"@solana/web3.js";var z={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 kd}from"@solana/spl-token";var qu=he("Raydium_txUtil"),zu=1644;function pr(s){let e=[],t=[];return s.microLamports&&(e.push(Du.setComputeUnitPrice({microLamports:s.microLamports})),t.push(z.SetComputeUnitPrice)),s.units&&(e.push(Du.setComputeUnitLimit({units:s.units})),t.push(z.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Co(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 fr(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 Ls(s,e){s.length<1&&qu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&qu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Gu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<zu}catch{return!1}}function be(s,e){let[t,n]=Ad.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function ei({instructions:s,payer:e,signers:t}){return Ls(s,[e,...t])}function ti({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uu.generate().publicKey.toString()}){let i=new wd({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xu(i).serialize()).toString("base64").length<zu}catch{return!1}}var hd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),Td=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof Xu&&(e=hd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function to(s){let e=[];return s.forEach(t=>{t instanceof Gu&&(t.recentBlockhash||(t.recentBlockhash=kd.toBase58()),t.feePayer||(t.feePayer=Uu.generate().publicKey)),e.push(Td(t))}),console.log("simulate tx string:",e),e}function re(s,e,t){return be([s.toBuffer(),(t!=null?t:Bd).toBuffer(),e.toBuffer()],new Id("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ce}from"@solana/web3.js";var Yu=new ce("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Hu=new ce("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Qu=new ce("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ni=new ce("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ig=new ce("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ju=new ce("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ns=new ce("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),yr=new ce("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bg=new ce("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Zu=new ce("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),no=new ce("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),oi=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),br=new ce("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),oo=new ce("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xg=new ce("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),$u=new ce("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),xd=new ce("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Sd=new ce("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Kd=new ce("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Cd=new ce("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),io=new ce("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Ju=new ce("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sg=new ce("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),gr=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Pr=new ce("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),st=new ce("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Kg=new ce("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Cg=new ce("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Rg=new ce("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Lg=new ce("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ng=new ce("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ii={IDO_PROGRAM_ID_V1:xd,IDO_PROGRAM_ID_V2:Sd,IDO_PROGRAM_ID_V3:Kd,IDO_PROGRAM_ID_V4:Cd};var hn={OPEN_BOOK_PROGRAM:new ce("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ce("Ray1111111111111111111111111111111111111111"),AMM_V4:new ce("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ce("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ce("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ce("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ce("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ce("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ce("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ce("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ce("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ce("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ce.default,Router:new ce("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ce("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ce("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ce("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ce("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ce("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ce("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ce("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ce("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ce("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ce("Ray1111111111111111111111111111111111111111")};import De from"bn.js";var Pn=1e4;function Fe(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(V({},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 De(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===Pn){let c=new De(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new De(Pn)),new De(Pn-i.transferFeeBasisPoints)),u=new De(i.maximumFee.toString()),l=c.sub(s).gt(u)?s.add(u):c,m=Wn(l.mul(new De(i.transferFeeBasisPoints)),new De(Pn)),d=m.gt(r)?r:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Wn(s.mul(new De(i.transferFeeBasisPoints)),new De(Pn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function un(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 De(0))?t.add(new De(1)):t}function ro(s,e){if(s.isZero())return new De(0);let t=s.div(e);return t.isZero()?new De(1):s.mod(e).gt(new De(0))?t.add(new De(1)):t}function Os(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 De(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Wn(s.mul(new De(o.transferFeeBasisPoints)),new De(Pn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function vs(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 De(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Pn){let a=new De(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new De(Pn)),new De(Pn-o.transferFeeBasisPoints)),c=new De(o.maximumFee.toString()),u=a.sub(s).gt(c)?s.add(c):a,l=Wn(u.mul(new De(o.transferFeeBasisPoints)),new De(Pn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Ms,AddressLookupTableAccount as No}from"@solana/web3.js";async function Fs({connection:s,address:e,cluster:t="mainnet"}){let n=await on(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Ms(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new No({key:a,state:No.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Lo[a.toString()]=c:Ro[a.toString()]=c}return o}var Ro={},Vs=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Ro[e])return Ro;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Ro[e]=new No({key:t,state:No.deserialize(n.data)})),Ro},Lo={},_s=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Lo[e])return Lo;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Lo[e]=new No({key:t,state:No.deserialize(n.data)})),Lo};import{PublicKey as Oo,sendAndConfirmTransaction as Es,SystemProgram as Rd,Transaction as ri,TransactionMessage as si,VersionedTransaction as ai}from"@solana/web3.js";import Ld from"axios";var Ar=2e3,wr=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 Ld.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}=pr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Rd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Oo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(z.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!==Oo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(q(V({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new ri;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 Co(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),to([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Es(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 Co(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],w=0;for(let T of r){if(++w,w<=p)continue;let h=await Es(this.connection,T,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});P.push(h)}return{txIds:P,signedTxs:r}}return{txIds:await await Promise.all(r.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let P=r.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));to(P);let w=await this.signAllTransactions(P);if(m){let T=0,h=[],k=async()=>{if(!w[T])return;let B=await this.connection.sendRawTransaction(w[T].serialize(),{skipPreflight:y});h.push({txId:B,status:"sent",signedTx:w[T]}),d==null||d([...h]),T++;let x=!1,S=null,I=null,C=N=>{S!==null&&clearInterval(S),I!==null&&this.connection.removeSignatureListener(I);let L=h.findIndex(v=>v.txId===B);if(L>-1){if(h[L].status==="error"||h[L].status==="success")return;h[L].status=N.err?"error":"success"}d==null||d([...h]),N.err||k()};this.loopMultiTxStatus&&(S=setInterval(async()=>{var N;if(x){clearInterval(S);return}try{let L=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});L&&(x=!0,clearInterval(S),C({err:((N=L.meta)==null?void 0:N.err)||null}),console.log("tx status from getTransaction:",B))}catch(L){x=!0,clearInterval(S),console.error("getTransaction timeout:",L,B)}},Ar)),I=this.connection.onSignature(B,N=>{if(x){this.connection.removeSignatureListener(I);return}x=!0,C(N)},"confirmed"),this.connection.getSignatureStatus(B)};return await k(),{txIds:h.map(B=>B.txId),signedTxs:w}}else{let T=[];for(let h=0;h<w.length;h+=1){let k=await this.connection.sendRawTransaction(w[h].serialize(),{skipPreflight:y});T.push(k)}return{txIds:T,signedTxs:w}}}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=Xe(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=V(V({},this.cluster==="devnet"?await _s(this.connection):await Vs(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Oo(b));let l=await Fs({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Oo.default.toBase58():i!=null?i:await Co(this.connection,this.blockhashCommitment),d=new si({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 ai(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:P,notSendToRpc:w}=b||{};if(to([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await fr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let k of h)try{k.sign(this.signers)}catch{}return{txId:w?"":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),to(r),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of r){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await fr(this.connection,P),b.push(P)}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,P=[],w=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});P.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...P]),g++;let h=!1,k=null,B=null,x=S=>{k!==null&&clearInterval(k),B!==null&&this.connection.removeSignatureListener(B);let I=P.findIndex(C=>C.txId===T);if(I>-1){if(P[I].status==="error"||P[I].status==="success")return;P[I].status=S.err?"error":"success"}d==null||d([...P]),S.err||w()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var S;if(h){clearInterval(k);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(k),x({err:((S=I.meta)==null?void 0:S.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(k),console.error("getTransaction timeout:",I,T)}},Ar)),B=this.connection.onSignature(T,S=>{if(h){this.connection.removeSignatureListener(B);return}h=!0,x(S)},"confirmed"),this.connection.getSignatureStatus(T)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let w=await this.connection.sendTransaction(b[P],{skipPreflight:f});g.push(w)}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=Xe(m,["splitIns","computeBudgetConfig"]),i=n?pr(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(V({},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(P=>P.keys.filter(w=>w.isSigner).map(w=>w.pubkey.toString())).flat()).values()].map(P=>new Oo(P));if(p!==t[l]&&u.length<12&&(ei({instructions:y,payer:this.feePayer,signers:g})||ei({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,ei({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ri().add(...i.instructions,...u)):a.push(new ri().add(...u)),c.push(Array.from(new Set(u.map(P=>P.keys.filter(w=>w.isSigner).map(w=>w.pubkey.toString())).flat())).map(P=>r[P]).filter(P=>P!==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);ei({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new ri().add(...i.instructions,...u)):a.push(new ri().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:P=!0}=p||{},w=g!=null?g:await Co(this.connection,this.blockhashCommitment);if(a.forEach(async(h,k)=>{h.recentBlockhash=w,c[k].length&&h.sign(...c[k])}),to(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,k=[];for(let B of a){if(++h,h<=b){k.push("tx skipped");continue}let x=await Es(this.connection,B,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});k.push(x)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...h];if(f){let B=0,x=[],S=async()=>{if(!k[B])return;B<b&&(x.push({txId:"",status:"success",signedTx:k[B]}),y==null||y([...x]),B++,S());let I=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:P});x.push({txId:I,status:"sent",signedTx:k[B]}),y==null||y([...x]),B++;let C=!1,N=null,L=null,v=R=>{N!==null&&clearInterval(N),L!==null&&this.connection.removeSignatureListener(L);let M=x.findIndex(G=>G.txId===I);if(M>-1){if(x[M].status==="error"||x[M].status==="success")return;x[M].status=R.err?"error":"success"}y==null||y([...x]),R.err||S()};this.loopMultiTxStatus&&(N=setInterval(async()=>{var R;if(C){clearInterval(N);return}try{let M=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});M&&(C=!0,clearInterval(N),v({err:((R=M.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(M){C=!0,clearInterval(N),console.error("getTransaction timeout:",M,I)}},Ar)),L=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(L);return}C=!0,v(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await S(),{txIds:x.map(I=>I.txId),signedTxs:k}}else{let B=[];for(let x=0;x<k.length;x+=1){let S=await this.connection.sendRawTransaction(k[x].serialize(),{skipPreflight:P});B.push(S)}return{txIds:B,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var T;let w=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=w,a=Xe(w,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),c=V(V({},this.cluster==="devnet"?await _s(this.connection):await Vs(this.connection)),o),u=Array.from(new Set([...this.lookupTableAddress,...i])),l=[];for(let h of u)c[h]===void 0&&l.push(new Oo(h));let m=await Fs({connection:this.connection,address:l});for(let[h,k]of Object.entries(m))c[h]=k;let d=t?pr(t):{instructions:[],instructionTypes:[]},p=await Co(this.connection,this.blockhashCommitment),f=this.signers.reduce((h,k)=>q(V({},h),{[k.publicKey.toBase58()]:k}),{}),y=[],b=[],g=[],P=0;if(this.allInstructions.forEach(h=>{let k=[...g,h],B=t?[...d.instructions,...k]:k;if(h!==n[P]&&g.length<r&&(ti({instructions:B,payer:this.feePayer,lookupTableAddressAccount:c})||ti({instructions:k,payer:this.feePayer,lookupTableAddressAccount:c})))g.push(h);else{if(g.length===0)throw Error("item ins too big");P+=h===n[P]?1:0;let x={};for(let S of[...new Set(u)])c[S]!==void 0&&(x[S]=c[S]);if(t&&ti({instructions:[...d.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let S=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...d.instructions,...g]}).compileToV0Message(Object.values(c));y.push(new ai(S))}else{let S=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(c));y.push(new ai(S))}b.push(Array.from(new Set(g.map(S=>S.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(S=>f[S]).filter(S=>S!==void 0)),g=[h]}}),g.length>0){let k=[...new Set(g.map(B=>B.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(B=>f[B]).filter(B=>B!==void 0);if(t&&ti({instructions:[...d.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let B=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...d.instructions,...g]}).compileToV0Message(Object.values(c));y.push(new ai(B))}else{let B=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(c));y.push(new ai(B))}b.push(k)}return(T=this.owner)!=null&&T.signer&&b.forEach(h=>{h.some(k=>k.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),y.forEach((h,k)=>{h.sign(b[k])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async h=>{var C;let{sequentially:k,onTxUpdate:B,skipTxCount:x=0,recentBlockHash:S,skipPreflight:I=!0}=h||{};if(y.map(async(N,L)=>{b[L].length&&N.sign(b[L]),S&&(N.message.recentBlockhash=S)}),to(y),(C=this.owner)!=null&&C.isKeyPair){if(k){let N=0,L=[];for(let v of y){if(++N,N<=x){console.log("skip tx: ",N),L.push("tx skipped");continue}let R=await this.connection.sendTransaction(v,{skipPreflight:I});await fr(this.connection,R),L.push(R)}return{txIds:L,signedTxs:y}}return{txIds:await Promise.all(y.map(async N=>await this.connection.sendTransaction(N,{skipPreflight:I}))),signedTxs:y}}if(this.signAllTransactions){let N=await this.signAllTransactions(y.slice(x,y.length)),L=[...y.slice(0,x),...N];if(k){let v=0,R=[],M=async()=>{if(!L[v])return;if(v<x){R.push({txId:"",status:"success",signedTx:L[v]}),B==null||B([...R]),v++,M();return}let G=await this.connection.sendTransaction(L[v],{skipPreflight:I});R.push({txId:G,status:"sent",signedTx:L[v]}),B==null||B([...R]),v++;let Y=!1,J=null,ee=null,ie=de=>{J!==null&&clearInterval(J),ee!==null&&this.connection.removeSignatureListener(ee);let ne=R.findIndex($=>$.txId===G);if(ne>-1){if(R[ne].status==="error"||R[ne].status==="success")return;R[ne].status=de.err?"error":"success"}B==null||B([...R]),de.err||M()};this.loopMultiTxStatus&&(J=setInterval(async()=>{var de;if(Y){clearInterval(J);return}try{let ne=await this.connection.getTransaction(G,{commitment:"confirmed",maxSupportedTransactionVersion:0});ne&&(Y=!0,clearInterval(J),ie({err:((de=ne.meta)==null?void 0:de.err)||null}),console.log("tx status from getTransaction:",G))}catch(ne){Y=!0,clearInterval(J),console.error("getTransaction timeout:",ne,G)}},Ar)),ee=this.connection.onSignature(G,de=>{if(Y){this.connection.removeSignatureListener(ee);return}Y=!0,ie(de)},"confirmed"),this.connection.getSignatureStatus(G)};return M(),{txIds:[],signedTxs:L}}else{let v=[];for(let R=0;R<L.length;R+=1){let M=await this.connection.sendTransaction(L[R],{skipPreflight:I});v.push(M)}return{txIds:v,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};import{PublicKey as Nd}from"@solana/web3.js";import Od from"bn.js";function vd(s){return typeof s=="object"&&s!==null&&![Ye,Me,Nd,Ne,Od,Mt,lt].some(e=>typeof e=="object"&&s instanceof e)}function yt(s){return typeof s=="string"?Bs(s):Array.isArray(s)?s.map(e=>yt(e)):vd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,yt(t)])):s}import Md from"bn.js";var Vt=new Md(1e6);var mt={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/v2/tag?query=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"},ec=q(V({},mt),{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 tc="ray_tab_hash",Ws="ray_req_hash",Fd=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem(tc);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem(tc,s)),s},kr=async n=>{var o=n,{logCount:s=1e3,removeLastLog:e}=o,t=Xe(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(Ws)||"[]").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(V({},t),{time:Date.now(),session:Fd()}));try{localStorage.setItem(Ws,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(Ws,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return kr(q(V({},t),{logCount:s,removeLastLog:!0}))}};var hr=he("Raydium_Api"),Ds=new Map,qs=new Map;var Tr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=nc.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?ec.BASE_HOST:mt.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return hr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(hr.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&&kr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),hr.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&&kr({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),hr.error(`${l.toUpperCase()} ${m}${d} ${u||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||mt.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||mt.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_POSITION_LINE||mt.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await nc.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||mt.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||mt.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||mt.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||mt.JUP_TOKEN_LIST})).map(t=>q(V({},t),{chainId:101,programId:t.tokenProgram,address:t.id,logoURI:t.icon,extensions:{},freeze_authority:null,permanent_delegate:null,mint_authority:t.mintAuthority||null,minted_at:Date.now().toString()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||mt.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||mt.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||mt.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>Ds.has(r)?(n.push(Ds.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||mt.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Ds.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&&Pt(t).toBase58(),n&&n!=="undefined"?Pt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||mt.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||mt.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||mt.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||mt.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=qs.get(this.cluster))!=null&&t.length)return qs.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 qs.set(this.cluster,e.data.data),e.data.data}};var Ir="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",oc="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Rr,SystemProgram as pp}from"@solana/web3.js";import{AccountLayout as Fo,createAssociatedTokenAccountIdempotentInstruction as Js,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as fp}from"@solana/spl-token";var Us=(...s)=>s.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),qe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=he(t)}createTxBuilder(e){return this.scope.checkOwner(),new wr({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(Us(e))}logInfo(...e){this.logger.info(Us(e))}logAndCreateError(...e){let t=Us(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ap,SystemProgram as up}from"@solana/web3.js";import cp from"bn.js";import{createCloseAccountInstruction as lp,createInitializeAccountInstruction as mp,createTransferInstruction as dp,TOKEN_PROGRAM_ID as Mo}from"@solana/spl-token";import{Keypair as op,PublicKey as Pc}from"@solana/web3.js";import ip from"bn.js";import{TOKEN_PROGRAM_ID as rp}from"@solana/spl-token";function Vd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function Gs(s,...e){if(!Vd(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 Xs(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 ic(s,e){Gs(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var xr=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),cn=(s,e)=>s<<32-e|s>>>e;var uA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function _d(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function zs(s){return typeof s=="string"&&(s=_d(s)),Gs(s),s}var Br=class{clone(){return this._cloneInto()}},cA={}.toString;function rc(s){let e=n=>s().update(zs(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Ed(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 sc=(s,e,t)=>s&e^~s&t,ac=(s,e,t)=>s&e^s&t^e&t,Sr=class extends Br{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=xr(this.buffer)}update(e){Xs(this);let{view:t,buffer:n,blockLen:o}=this;e=zs(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=xr(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){Xs(this),ic(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;Ed(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=xr(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 Wd=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),Ys=class extends Sr{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=cn(d,7)^cn(d,18)^d>>>3,y=cn(p,17)^cn(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=cn(a,6)^cn(a,11)^cn(a,25),p=l+d+sc(a,c,u)+Wd[m]+qn[m]|0,y=(cn(n,2)^cn(n,13)^cn(n,22))+ac(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 uc=rc(()=>new Ys);import{PublicKey as Jd}from"@solana/web3.js";import pc,{isBN as fc}from"bn.js";import{bits as Dd,BitStructure as PA,blob as qd,Blob as AA,cstr as wA,f32 as kA,f32be as hA,f64 as TA,f64be as IA,greedy as BA,Layout as Ud,ns64 as xA,ns64be as SA,nu64 as Gd,nu64be as KA,offset as Xd,s16 as CA,s16be as RA,s24 as LA,s24be as NA,s32 as zd,s32be as OA,s40 as vA,s40be as MA,s48 as FA,s48be as VA,s8 as _A,seq as Yd,struct as EA,Structure as Hd,u16 as Qd,u16be as WA,u24 as DA,u24be as qA,u32 as jd,u32be as UA,u40 as GA,u40be as XA,u48 as zA,u48be as YA,u8 as Zd,UInt as $d,union as HA,Union as QA,unionLayoutDiscriminator as jA,utf8 as ZA}from"@solana/buffer-layout";var Kr=Ud,cc=Hd;var Hs=$d;var lc=Zd,Gt=Qd;var ui=jd;var mc=Gd;var Ue=zd;var dc=Yd;var Le=qd;var Qs=Dd,js=Xd;var ao=class extends Kr{constructor(t,n,o){super(t,o);this.blob=Le(t),this.signed=n}decode(t,n=0){let o=new pc(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 pc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Cr=class extends Kr{constructor(t){super(8,t);this._lower=Qs(ui(),!1),this._upper=Qs(ui(),!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 V(V({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(s){return new Hs(1,s)}function kt(s){return new Hs(4,s)}function A(s){return new ao(8,!1,s)}function le(s){return new ao(16,!1,s)}function yc(s){return new ao(1,!0,s)}function vo(s){return new ao(8,!0,s)}function bc(s){return new ao(16,!0,s)}var uo=class extends Kr{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 uo(Le(32),e=>new Jd(e),e=>e.toBuffer(),s)}function He(s){return new uo(lc(),ep,tp,s)}function ep(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function tp(s){return s?1:0}function gc(s,e){let t=ui("length"),n=_([t,Q(s,js(t,-t.span),"values")]);return new uo(n,({values:o})=>o,o=>({values:o}),e)}function np(s){let e=ui("length"),t=_([e,Le(js(e,-e.span),"data")]);return new uo(t,({data:n})=>n,n=>({data:n}),s)}function _t(s){return new uo(np(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var Zs=class extends cc{decode(e,t){return super.decode(e,t)}};function _(s,e,t){return new Zs(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:fc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=fc(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 dc(s,o,t)}var co=_([F("mint"),F("owner"),A("amount"),kt("delegateOption"),F("delegate"),E("state"),kt("isNativeOption"),A("isNative"),A("delegatedAmount"),kt("closeAuthorityOption"),F("closeAuthority")]);var Pw=he("Raydium_Util");function Ac({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=co.decode(r.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:re(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:Pc.default,amount:new ip(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Je({fromPublicKey:s,programId:e=rp,assignSeed:t}){let n=t?btoa(t).slice(0,32):op.generate().publicKey.toBase58().slice(0,32);return{publicKey:sp(s,n,e),seed:n}}function sp(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=uc(n);return new Pc(o)}function $s(s){let{mint:e,tokenAccount:t,owner:n,programId:o=Mo}=s;return mp(t,e,n,o)}function Tn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Mo}=s;return lp(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(co.span,n),c=se(t).add(new cp(a)),u=Je({fromPublicKey:o,programId:Mo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[up.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:co.span,programId:Mo}),$s({mint:new ap(wt.address),tokenAccount:u.publicKey,owner:i,programId:Mo})],instructionTypes:[z.CreateAccount,z.InitAccount],endInstructionTypes:r?[]:[z.CloseAccount],endInstructions:r?[]:[Tn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function wc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Mo}){return dp(s,e,t,BigInt(String(n)),o,i)}var ci=class extends qe{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 re(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=V(V({},{}),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:fp},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ac({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,P;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 Rr(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Rr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(d))).sort((w,T)=>w.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 w=Js(o.payer||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(w),f.instructionTypes.push(z.CreateATA);else if(!(h.owner.equals(m)&&Fo.decode(h.data).mint.equals(n)&&Fo.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(w),f.instructionTypes.push(z.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(wc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Gn})),f.instructionTypes.push(z.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(Tn({owner:r,payer:o.payer||r,tokenAccount:d,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:d,instructionParams:f}}else{let w=Je({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Fo.span),h=pp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:w.seed,newAccountPubkey:w.publicKey,lamports:T+Number((P=(g=o.amount)==null?void 0:g.toString())!=null?P:0),space:Fo.span,programId:m});return f.instructions.push(h,$s({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(z.CreateAccount),f.instructionTypes.push(z.InitAccount),c||(f.endInstructions.push(Tn({owner:r,payer:o.payer||r,tokenAccount:w.publicKey,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:w.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 Js(r,u,r,t,n);a.instructions=[l],a.instructionTypes=[z.CreateATA],i=u}return o&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[Tn({owner:r,payer:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[z.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 Rr(Z).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return V({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Js(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)&&Fo.decode(y.data).mint.equals(i)&&Fo.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:[z.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 Rr(Z))&&r){let m=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Xe(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=Xe(d,["tokenAccount"]);u=p,l.addInstruction(f)}return V({tokenAccount:u},l.AllTxData)}};import{PublicKey as Oe,SystemProgram as Lp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Fc}from"@solana/spl-token";import{PublicKey as sa}from"@solana/web3.js";var ea=_([E("instruction")]),ta=_([E("instruction")]),yp=_([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),le("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),A("rewardType"),Q(A(),15,"padding")]),bp=_([A("state"),A("nonce"),F("lpVault"),F("rewardVault"),F(),F(),A(),A(),A("totalReward"),le("perShareReward"),A("lastSlot"),A("perSlotReward")]),gp=_([A("state"),A("nonce"),F("lpVault"),F("rewardVaultA"),A("totalRewardA"),le("perShareRewardA"),A("perSlotRewardA"),E("option"),F("rewardVaultB"),Le(7),A("totalRewardB"),le("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),F()]),Pp=_([A(),A("state"),A("nonce"),A("validRewardTokenNum"),le("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(yp,5,"rewardInfos"),F("creator"),F(),Q(A(),32,"padding")]),Ap=new Proxy(bp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),wp=new Proxy(gp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},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)}}),Lr=new Proxy(Pp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(V({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),kp=_([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),na=_([E("instruction"),A("nonce"),Q(kp,5,"rewardTimeInfo")]),oa=_([E("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),ia=_([E("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),jw=_([A("state"),F("id"),F("owner"),A("deposited"),Q(A(),1,"rewardDebts")]),ra=_([A("state"),F("id"),F("owner"),A("deposited"),Q(le(),1,"rewardDebts"),A(""),A("voteLockedBalance"),Q(A(),15)]),Zw=_([A("state"),F("id"),F("owner"),A("deposited"),Q(A(),2,"rewardDebts")]),kc=_([A("state"),F("id"),F("owner"),A("deposited"),Q(le(),2,"rewardDebts"),Q(A(),17)]),hc=_([A(),A("state"),F("id"),F("owner"),A("deposited"),Q(le(),5,"rewardDebts"),Q(A(),16)]),Xt=_([E("instruction"),A("amount")]),hp=_([F("mint"),F("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),yc("digitShift"),Q(E(),7,"reserved1"),Q(A(),7,"reserved2")]),Tp=_([Le(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(E(),32,"reserved1"),Q(hp,4,"votingMints"),vo("timeOffset"),E("bump"),Q(E(),7,"reserved2"),Q(A(),11,"reserved3")]),Ip=_([vo("startTime"),vo("endTime"),E("kind"),Q(E(),15,"reserved")]),Bp=_([Q(Ip,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),He("isUsed"),He("allowClawback"),E("votingMintConfigIdx"),Q(E(),29,"reserved")]),xp=_([Le(8),F("voterAuthority"),F("registrar"),Q(Bp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),Q(E(),94,"reserved")]);import{NATIVE_MINT as sk}from"@solana/spl-token";var ak=he("Raydium_farm_config"),Tc=new sa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ic=new sa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var uk=new sa("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Bc={3:ra,5:kc,6:hc},aa=s=>[3,4,5,6].indexOf(s)!==-1,ua=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},Zt={[Yu.toString()]:3,[Hu.toString()]:4,[Qu.toString()]:5,[ni.toString()]:6,[hn.FARM_PROGRAM_ID_V3.toString()]:3,[hn.FARM_PROGRAM_ID_V4.toString()]:4,[hn.FARM_PROGRAM_ID_V5.toString()]:5,[hn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as we,SystemProgram as Kc,SYSVAR_CLOCK_PUBKEY as di,SYSVAR_RENT_PUBKEY as Cp,TransactionInstruction as Jt}from"@solana/web3.js";import Cc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Wk,createAssociatedTokenAccountIdempotentInstruction as Dk,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";import Sp from"bn.js";var Kp=he("Raydium.farm.util");function li({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=be([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],s);return o}function $t({programId:s,poolId:e,owner:t,version:n}){let{publicKey:o}=be([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var xc=({programId:s,poolId:e})=>be([e.toBuffer()],s);function Sc(s){return{isSet:new Sp(1),rewardPerSecond:se(s.perSecond),rewardOpenTime:se(s.openTime),rewardEndTime:se(s.endTime),rewardType:se(Xn[s.rewardType])}}function ca(s){return se(s.endTime).sub(se(s.openTime)).mul(se(s.perSecond))}function mi(s){let e=Bc[s];return e||Kp.logWithError("invalid version",s),e}var Rp=he("Raydium_farm_instruction"),$k={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 pi(s){let{version:e,id:t,ledger:n,programId:o,owner:i}=s,r={3:9,5:10}[e];r||Rp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(ea.span);ea.encode({instruction:r},a);let c=[K({pubkey:t}),K({pubkey:n}),K({pubkey:i,isWritable:!1}),K({pubkey:Kc.programId,isWritable:!1}),K({pubkey:Cp,isWritable:!1})];return{instruction:new Jt({programId:o,keys:c,data:a}),instructionType:z.FarmV3CreateLedger}}function Rc(s){var n;let e=Buffer.alloc(na.span);na.encode({instruction:0,nonce:new Cc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...Ts,K({pubkey:s.farmId}),K({pubkey:s.farmAuthority,isWritable:!1}),K({pubkey:s.lpVault}),K({pubkey:s.lpMint,isWritable:!1}),K({pubkey:s.lockVault}),K({pubkey:s.lockMint,isWritable:!1}),K({pubkey:(n=s.lockUserAccount)!=null?n:ct}),K({pubkey:s.owner,isWritable:!1,isSigner:!0})];for(let o of s.rewardInfo)t.push(K({pubkey:o.rewardMint,isWritable:!1}),K({pubkey:o.rewardVault}),K({pubkey:o.userRewardToken}));return{instruction:new Jt({programId:s.programId,keys:t,data:e}),instructionType:z.FarmV6Create}}function Lc(s){let e=Buffer.alloc(ta.span);ta.encode({instruction:5},e);let t=[K({pubkey:In,isWritable:!1}),K({pubkey:s.id}),K({pubkey:s.authority,isWritable:!1}),K({pubkey:s.lpVault,isWritable:!1}),K({pubkey:s.rewardVault}),K({pubkey:s.userRewardToken}),K({pubkey:s.owner,isWritable:!1,isSigner:!0})];return{instruction:new Jt({programId:s.programId,keys:t,data:e}),instructionType:z.FarmV6CreatorWithdraw}}function la({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(oa.span);oa.encode({instruction:3,rewardReopenTime:se(o.openTime),rewardEndTime:se(o.endTime),rewardPerSecond:se(o.perSecond)},i);let r=[K({pubkey:In,isWritable:!1}),K({pubkey:n.id}),K({pubkey:n.lpVault,isWritable:!1}),K({pubkey:e}),K({pubkey:t}),K({pubkey:s,isWritable:!1,isSigner:!0})];return new Jt({programId:n.programId,keys:r,data:i})}function ma({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(ia.span);ia.encode({instruction:4,isSet:new Cc(1),rewardPerSecond:se(o.perSecond),rewardOpenTime:se(o.openTime),rewardEndTime:se(o.endTime),rewardType:se(Xn[o.rewardType])},i);let r=[...Ts,K({pubkey:t.id}),K({pubkey:t.authority,isWritable:!1}),K({pubkey:o.mint,isWritable:!1}),K({pubkey:n}),K({pubkey:e}),K({pubkey:s,isWritable:!1,isSigner:!0})];return new Jt({programId:t.programId,keys:r,data:i})}function fi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new we(e.programId),new we(e.id)],u=$t({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Xt.span);Xt.encode({instruction:2,amount:se(r)},l);let m=[K({pubkey:In,isWritable:!1}),K({pubkey:c}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:u}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(K({pubkey:new we(t.rewardInfos[d].vault)})),m.push(K({pubkey:o[d]}));return new Jt({programId:a,keys:m,data:l})}function yi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=$t({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:12,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(K({pubkey:o[p]})),d.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Nc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=_([E("instruction"),A("amount")]),m=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:a[0]}),K({pubkey:i,isSigner:!0,isWritable:!1}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1}),K({pubkey:o[1]}),K({pubkey:new we(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:r},d),new Jt({keys:m,programId:c,data:d})}function bi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=$t({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:11,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Oc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=$t({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:10,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function vc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=$t({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:11,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(K({pubkey:o[p]})),d.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Mc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new we(e.programId),new we(e.id)],u=$t({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Xt.span);Xt.encode({instruction:1,amount:se(r)},l);let m=[K({pubkey:In,isWritable:!1}),K({pubkey:Kc.programId,isWritable:!1}),K({pubkey:c}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:u}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(K({pubkey:new we(t.rewardInfos[d].vault)})),m.push(K({pubkey:o[d]}));return new Jt({programId:a,keys:m,data:l})}var gi=class extends qe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ct)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ca(q(V({},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=ni,txVersion:i,feePayer:r,lockProgram:a}){var B,x;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Oe(e.lpMint.address),lockInfo:{lockMint:(B=a==null?void 0:a.mint)!=null?B:Tc,lockVault:(x=a==null?void 0:a.vault)!=null?x:Ic},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(r),m=n!=null?n:this.scope.ownerPubKey,d=Je({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(Lr.span);l.addInstruction({instructions:[Lp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Lr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=xc({programId:new Oe(u.programId),poolId:d.publicKey}),b=li({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let S of u.rewardInfos){S.openTime>=S.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",S.openTime.toString()),isNaN(Xn[S.rewardType])&&this.logAndCreateError("rewardType error",S.rewardType),Number(S.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",S.perSecond),g.push(Sc(S));let{rewardPubKey:I,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:S,payer:m});C&&l.addInstruction(C),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let N=S.mint.equals(ct)?new Oe(wt.address):S.mint;P.push({rewardMint:N,rewardVault:li({programId:u.programId,poolId:d.publicKey,mint:N,type:"rewardVault"}),userRewardToken:I})}let{account:w,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Oe(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),w||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:k}=Rc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:w,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:w,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=Zt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=yt((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(ct)?new Oe(wt.address):n.mint,m=c.rewardInfos.findIndex(P=>new Oe(P.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:ct,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:[la({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[z.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var m;let r=Zt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=yt((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(ct)?new Oe(wt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Oe(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:ct,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:d,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=la({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[w],instructionTypes:[z.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=Zt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=yt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r),m=o.mint.equals(ct)?new Oe(wt.address):o.mint,d=li({programId:new Oe(n.programId),poolId:new Oe(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:[ma({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[z.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=Zt[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=yt((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(ct)?new Oe(wt.address):m.mint,p=li({programId:new Oe(n.programId),poolId:new Oe(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=ma({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(V({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[z.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=Zt[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),aa(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Oe(n.programId),new Oe(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=$t({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),w=this.createTxBuilder(i);w.addCustomComputeBudget(l),w.addTipInstruction(m);let T={};for(let v of this.scope.account.tokenAccounts)if(a){let R=re(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&R.equals(v.publicKey)&&(T[v.mint.toString()]=v.publicKey)}else T[v.mint.toString()]=v.publicKey;let h=g.lpMint,k=T[h.address];k||this.logAndCreateError("you don't have any lp","lp zero",T);let B=[];for(let v of d){let R=r&&v.mint.address===Z.toString(),M=T[v.mint.address];if(!M){let{account:G,instructionParams:Y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new Oe(v.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});M=G,Y&&w.addInstruction(Y)}T[v.mint.address]=M,B.push(M)}let x,S=await this.scope.connection.getAccountInfo(P);if(S&&(x=mi(f).decode(S.data)),n.programId!==ni.toString()&&n.programId!==hn.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:v,instructionType:R}=pi({id:b,programId:y,version:f,ledger:P,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[v],instructionTypes:[R]})}let I=ua({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:B});I&&this.logAndCreateError(I);let C={amount:se(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:k,rewardAccounts:B,userAuxiliaryLedgers:u==null?void 0:u.map(v=>new Oe(v))},N=f===6?Mc(C):f===5?vc(C):Oc(C),L={3:z.FarmV3Deposit,5:z.FarmV5Deposit,6:z.FarmV6Deposit};return w.addInstruction({instructions:[N],instructionTypes:[L[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=Zt[n.programId];aa(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=re(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=$t({programId:new Oe(n.programId),poolId:new Oe(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)mi(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:N,instructionType:L}=pi({id:new Oe(y.id),programId:new Oe(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[N],instructionTypes:[L]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=y.lpMint.address,w=r&&P===Z.toString(),T=g[P.toString()];if(!T){let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Oe(P),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[P.toString()]=T;let h=[];for(let I of p){let C=r&&I.mint.address===Z.toString(),N=g[I.mint.address];if(!N){let{account:L,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Oe(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});N=L,v&&b.addInstruction(v)}g[I.mint.address]=N,h.push(N)}let k=ua({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});k&&this.logAndCreateError(k);let B={amount:se(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Oe(I))},x=f===6?fi(B):f===5?yi(B):f===4?Nc(B):bi(B),S={3:z.FarmV3Withdraw,4:z.FarmV4Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[S[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=yt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=Zt[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>Pt(b.mint.address).equals(Pt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:ct,m=this.createTxBuilder(r),d;if(t.equals(ct)||t.equals(Oe.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ca(q(V({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new O(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:[Fc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[z.CreateATA]}))}let{instruction:p,instructionType:f}=Lc({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=re(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(V({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:P}=f,w=Zt[y],T=b.address,h=n&&T===Z.toString(),k=m[T];if(!k){let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Oe(T),notUseTokenAccount:h,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:i,checkCreateATAOwner:r});k=N,L&&l.addInstruction(L)}m[T.toString()]=k;let B=[];for(let N of g){let L=n&&N.mint.address===Z.toString(),v=m[N.mint.address];if(!v)if(L){let{account:R,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:N.mint.programId,mint:new Oe(N.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:i,checkCreateATAOwner:r});v=R,M&&l.addInstruction(M)}else{let R=new Oe(N.mint.address);v=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Fc(this.scope.ownerPubKey,v,this.scope.ownerPubKey,R)]})}m[N.mint.address]=v,B.push(v)}let x=p[P],S={amount:Ft,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:k,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(N=>new Oe(N))},I=w===6?fi(S):w===5?yi(S):bi(S),C={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as kf,NATIVE_MINT as Yr,TOKEN_PROGRAM_ID as Hn}from"@solana/spl-token";import{Keypair as Vr,PublicKey as H,SystemProgram as Kn,TransactionInstruction as bt}from"@solana/web3.js";import ha from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Bi,TOKEN_2022_PROGRAM_ID as Ze,TOKEN_PROGRAM_ID as Ve}from"@solana/spl-token";import Dp from"bn.js";import en from"bn.js";var Qe=new en(0),zt=new en(1),Bn=new en(-1),at=new en(1).shln(64),Nr=new en(1).shln(128),Pi=at.sub(zt),Ai=64,Vc=Nr.subn(1),ht=-443636,xt=-ht,St=new en("4295048016"),Kt=new en("79226673521066979257578248091"),Or=new en("4295048017"),vr=new en("79226673521066979257578248090"),_c=16,Ec="59543866431248",Wc="184467440737095516",Dc="15793534762490258745",Mr=new en(10).pow(new en(6));var qc={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:[]},Ch=new en("18446744073700000000");import Ae from"bn.js";function Fr(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function da(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function pa(s,e){let t=0;for(let n=0;n<s&&!e.testn(n);n++)t++;return t}function wi(s,e){for(let t=0;t<s;t++)if(e.testn(t))return!1;return!0}function Uc(s,e){return wi(s,e)?null:da(s,e)}function Gc(s,e){return wi(s,e)?null:pa(s,e)}var vh=Buffer.from("amm_config","utf8"),fa=Buffer.from("pool","utf8"),ya=Buffer.from("pool_vault","utf8"),Op=Buffer.from("pool_reward_vault","utf8"),Xc=Buffer.from("position","utf8"),vp=Buffer.from("tick_array","utf8"),Mp=Buffer.from("operation","utf8"),Fp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Vp=Buffer.from("observation","utf8");function zc(s,e,t,n){return be([fa,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function ba(s,e,t){return be([ya,e.toBuffer(),t.toBuffer()],s)}function Yc(s,e,t){return be([Op,e.toBuffer(),t.toBuffer()],s)}function Ie(s,e,t){return be([vp,e.toBuffer(),Fr(t)],s)}function ln(s,e,t,n){return be([Xc,e.toBuffer(),Fr(t),Fr(n)],s)}function Ct(s,e){return be([Xc,e.toBuffer()],s)}function xn(s){return be([Buffer.from("metadata","utf8"),sn.toBuffer(),s.toBuffer()],sn)}function ki(s){return be([Mp],s)}function et(s,e){return be([Fp,e.toBuffer()],s)}function Hc(s,e){return be([Vp,e.toBuffer()],s)}var Qc=Buffer.from("locked_position","utf8");function ga(s,e){return be([Qc,e.toBuffer()],s)}function Vo(s,e){return be([Qc,e.toBuffer()],s)}var _p=Buffer.from("support_mint","utf8");function Pa(s,e){return be([_p,e.toBuffer()],s)}import{PublicKey as Yt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as jc}from"@solana/spl-token";import Ge from"bn.js";import An from"bn.js";var hi=class{static getfeeGrowthInside(e,t,n){let o=new An(0),i=new An(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 An(0),a=new An(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=ge.wrappingSubU128(ge.wrappingSubU128(e.feeGrowthGlobalX64A,o),r),u=ge.wrappingSubU128(ge.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=ge.mulDivFloor(ge.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,at),c=t.tokenFeesOwedA.add(a),u=ge.mulDivFloor(ge.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,at),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=ge.mulDivFloor(ge.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,at),c=t.tokenFeesOwedA.add(a),u=ge.mulDivFloor(ge.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,at),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=ge.wrappingSubU128(c,u.growthInsideLastX64),m=ge.mulDivFloor(l,t.liquidity,at),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=ge.wrappingSubU128(c,u.growthInsideLastX64),m=ge.mulDivFloor(l,t.liquidity,at),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 An(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 An(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ge.wrappingSubU128(ge.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 An(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 An(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ge.wrappingSubU128(ge.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,P,w;let a=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=pe.getSqrtPriceX64FromTick(t.tickLower),u=pe.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=xe.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Fe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,r,!0),Fe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,r,!0)],[f,y]=[Fe(new An(new O(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,r,!0),Fe(new An(new O(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}};var Ep=15,Be=class{static async getTickArrays(e,t,n,o,i,r,a){let c=[],u=oe.getTickArrayStartIndexByTick(o,i),l=oe.getInitializedTickArrayInRange(r,a,i,u,Math.floor(Ep/2));for(let p=0;p<l.length;p++){let{publicKey:f}=Ie(t,n,l[p]);c.push(f)}let m=(await on(e,c)).map(p=>p!==null?Ti.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(V({},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=oe.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/Be.tickCount(t)),a=n?oe.searchLowBitFromStart(o,i,r-1,1,t):oe.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=ut-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<ut;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=Ie(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:r,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,r){let a=oe.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<ut;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Ie(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(oe.checkIsOutOfBoundary(e)){if(e>xt)return!1;let n=oe.getTickArrayStartIndexByTick(ht,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ut*e}};var Aa=14,Sn=class{static maxTickInTickarrayBitmap(e){return e*ut*lo}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(!Be.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),r=o?t-Be.tickCount(n):t+Be.tickCount(n);if(r<-i||r>=i)return{isInit:!1,tickIndex:t};let a=n*ut,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=Uc(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=Gc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-Be.tickCount(n)}}}},Ii=class{static getBitmapOffset(e,t){if(!Be.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Sn.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=Sn.maxTickInTickarrayBitmap(e),n=-t;if(xt<=t)throw Error(`extensionTickBoundary check error: ${xt}, ${t}`);if(n<=ht)throw Error(`extensionTickBoundary check error: ${n}, ${ht}`);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:oe.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=Be.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}=Sn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=oe.mergeTickArrayBitmap(e).shln(lo-1-a),u=wi(512,c)?null:da(512,c);if(u!==null){let l=t-u*Be.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=oe.mergeTickArrayBitmap(e).shrn(a),u=wi(512,c)?null:pa(512,c);if(u!==null){let l=t+u*Be.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r-Be.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Sn.maxTickInTickarrayBitmap(t),o=Math.floor(n/Be.tickCount(t));return e<0&&n!=0&&(o=lo-o),o}};var ve=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}=mo.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(Bn),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}=Ie(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=mo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,r,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(Bn),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=ve.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Ii.checkTickArrayIsInit(Be.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):oe.checkTickArrayIsInitialized(oe.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Ie(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:r}=this.nextInitializedTickArrayStartIndex(e,Be.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Ie(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/Be.tickCount(e.tickSpacing)),o=t?oe.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):oe.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=Be.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Sn.nextInitializedTickArrayStartIndex(oe.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:r,tickIndex:a}=Ii.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<ht||t>xt)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(V({},m),{perSecond:ge.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Yt(d)});if(p.tokenMint.equals(Yt.default))continue;if(n<=p.openTime.toNumber()||o.eq(Qe)){r.push(p);continue}let f=new Ge(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=ge.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),P=ge.mulDivFloor(y,p.emissionsPerSecondX64,at),w=p.rewardTotalEmissioned.add(P);r.push(q(V({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:f}))}return r}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let r=oe.getTickArrayStartIndexByTick(i,e);if(r>=n||r<o)return!0}return!1}static tickRange(e){let t=Sn.maxTickInTickarrayBitmap(e),n=-t;return t>xt&&(t=Be.getArrayStartIndex(xt,e)+Be.tickCount(e)),n<ht&&(n=Be.getArrayStartIndex(ht,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Be.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Be.tickCount(t)*lo}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()]=$c.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=oe.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=oe.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Ie(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=Ti.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(V({},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(Ct(p,d).publicKey);let l=await on(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=_o.decode(d.data),f=p.poolId.toString(),y=e.find(x=>x.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=oe._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=oe._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:T}=xe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:w,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(x=>q(V({},x),{pendingReward:new Ge(0)})),leverage:h,tokenFeeAmountA:new Ge(0),tokenFeeAmountB:new Ge(0)}];let k=await oe.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),B=await oe.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=k,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}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]=Ti.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,w=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[P].toString()],h=f[m[w].toString()],k=T.ticks[oe.getTickOffsetInArray(g.tickLower,y.tickSpacing)],B=h.ticks[oe.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:S}=await hi.GetPositionFees(y,g,k,B),I=await hi.GetPositionRewards(y,g,k,B);g.tokenFeeAmountA=x.gte(new Ge(0))?x:new Ge(0),g.tokenFeeAmountB=S.gte(new Ge(0))?S:new Ge(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ge(0))?I[C]:new Ge(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:r,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var N;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 O(0))?u=l?St.add(new Ge(1)):Kt.sub(new Ge(1)):u=pe.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Fe(i,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:P}=ve.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((N=p.fee)!=null?N:Qe),u,c),w=Fe(y,d,o,!1),T=pe.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new O(1).div(T),k=y.mul(new Ge(Math.floor((1-r)*1e10))).div(new Ge(1e10)),B=Fe(k,d,o,!1),x=l?e.currentPrice:new O(1).div(e.currentPrice),S=new O(h).sub(x).abs(),I=x,C=new lt(new O(S).mul(10**15).toFixed(0),new O(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:w,minAmountOut:B,expirationTime:un(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:P,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 Ye(q(V({},u),{mint:u.address,isToken2022:u.programId===jc.toBase58()})),new Ye(q(V({},l),{mint:l.address,isToken2022:l.programId===jc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:P,executionPrice:w,priceImpact:T,fee:h,remainingAccounts:k,executionPriceX64:B}=ve.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Yt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),x=q(V({},f),{amount:new Me(m,f.amount),fee:f.fee===void 0?void 0:new Me(m,f.fee)}),S=q(V({},y),{amount:new Me(d,y.amount),fee:y.fee===void 0?void 0:new Me(d,y.fee)}),I=q(V({},b),{amount:new Me(d,b.amount),fee:b.fee===void 0?void 0:new Me(d,b.fee)}),C=new Mt({baseToken:m,denominator:new Ge(10).pow(new Ge(20+m.decimals)),quoteToken:d,numerator:P.mul(new O(10**(20+d.decimals))).toFixed(0)}),N=new Mt({baseToken:m,denominator:new Ge(10).pow(new Ge(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),L=new Me(m,h);return{allTrade:p,realAmountIn:x,amountOut:S,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:N,priceImpact:T,fee:L,remainingAccounts:k,executionPriceX64:B}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:r,priceLimit:a=new O(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 O(0))?l=c?Kt.sub(new Ge(1)):St.add(new Ge(1)):l=pe.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Fe(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=ve.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:Qe),l),b=c?e.mintB.address:e.mintA.address,g=Fe(d,u[b],o,!1),P=pe.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),w=c?P:new O(1).div(P),T=d.mul(new Ge(Math.floor((1+r)*1e10))).div(new Ge(1e10)),h=Fe(T,u[b],o,!0),k=c?e.currentPrice:new O(1).div(e.currentPrice),B=new O(w).sub(k).abs(),x=k,S=new lt(new O(B).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:un(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:S,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=oe.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=oe.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[Pt(e.mintA.address).toString()],d=o[Pt(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=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=pe.getSqrtPriceX64FromTick(r),g=pe.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:w}=xe.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=xe.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),k=new O(P.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(w.toString()).div(new O(10).pow(f)).mul(d.value)),B=new O(T.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(h.toString()).div(new O(10).pow(f)).mul(d.value)),x=new O(1).div(k.add(B)),I=new O(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,N=e.rewardDefaultInfos.map(L=>{var M,G;let v=L.mint.decimals,R=o[L.mint.address];return c<((M=L.startTime)!=null?M:0)||c>((G=L.endTime)!=null?G:0)||!L.perSecond||!R||v===void 0?0:new O(R.value).mul(new O(L.perSecond).mul(C)).div(new O(10).pow(v)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:N,apr:I+N.reduce((L,v)=>L+v,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=pe.getSqrtPriceX64FromTick(n),d=pe.getSqrtPriceX64FromTick(o),p=Fe(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ge(new O(p.amount.sub((P=p.fee)!=null?P:Qe).toString()).toFixed(0)),y;if(l.lte(m))y=t?xe.getLiquidityFromTokenAmountA(m,d,f,!a):new Ge(0);else if(l.lte(d)){let w=xe.getLiquidityFromTokenAmountA(l,d,f,!a),T=xe.getLiquidityFromTokenAmountB(m,l,f);y=t?w:T}else y=t?new Ge(0):xe.getLiquidityFromTokenAmountB(m,d,f);let b=await ve.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,P,w;let c=pe.getSqrtPriceX64FromTick(n),u=pe.getSqrtPriceX64FromTick(o),l=a?1+r:1-r,m=xe.getAmountsFromLiquidity(pe.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Fe(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Fe(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Fe(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Fe(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Yt(c.id));(await on(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=po.decode(c.data))});let r=t.map(c=>et(new Yt(c.programId),new Yt(c.id)).publicKey),a=await ve.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(V({},c),{[u.id]:q(V({},n[u.id]),{id:new Yt(u.id),version:6,programId:new Yt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(V({},u.config),{id:new Yt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapAccount:et(new Yt(u.programId),new Yt(u.id)).publicKey,exBitmapInfo:a[et(new Yt(u.programId),new Yt(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 wa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Zc(s){return q(V({},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:wa,week:wa,month:wa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(V({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ge=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(Qe)||(i=i.add(zt)),i}static mulDivFloor(e,t,n){if(n.eq(Qe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Qe))throw new Error("division by 0");return e.mul(t).add(n.sub(zt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new Ae(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Nr).sub(t).mod(Nr)}};function dt(s,e){return ka(s.mul(e),64,256)}function Wp(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ka(s,e,t){let n=s.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var pe=class{static sqrtPriceX64ToPrice(e,t,n){return ge.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ge.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(Qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Qe))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(Qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Qe))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(Qe))return e;let i=t.shln(Ai);if(o){let r=i,a=i.add(n.mul(e));return a.gte(r)?ge.mulDivCeil(r,e,a):ge.mulDivRoundingUp(r,zt,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 ge.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Ai);if(o)return e.add(i.div(t));{let r=ge.mulDivRoundingUp(i,zt,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<ht||e>xt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new Ae("18445821805675395072"):new Ae("18446744073709551616");return(t&2)!=0&&(n=dt(n,new Ae("18444899583751176192"))),(t&4)!=0&&(n=dt(n,new Ae("18443055278223355904"))),(t&8)!=0&&(n=dt(n,new Ae("18439367220385607680"))),(t&16)!=0&&(n=dt(n,new Ae("18431993317065453568"))),(t&32)!=0&&(n=dt(n,new Ae("18417254355718170624"))),(t&64)!=0&&(n=dt(n,new Ae("18387811781193609216"))),(t&128)!=0&&(n=dt(n,new Ae("18329067761203558400"))),(t&256)!=0&&(n=dt(n,new Ae("18212142134806163456"))),(t&512)!=0&&(n=dt(n,new Ae("17980523815641700352"))),(t&1024)!=0&&(n=dt(n,new Ae("17526086738831433728"))),(t&2048)!=0&&(n=dt(n,new Ae("16651378430235570176"))),(t&4096)!=0&&(n=dt(n,new Ae("15030750278694412288"))),(t&8192)!=0&&(n=dt(n,new Ae("12247334978884435968"))),(t&16384)!=0&&(n=dt(n,new Ae("8131365268886854656"))),(t&32768)!=0&&(n=dt(n,new Ae("3584323654725218816"))),(t&65536)!=0&&(n=dt(n,new Ae("696457651848324352"))),(t&131072)!=0&&(n=dt(n,new Ae("26294789957507116"))),(t&262144)!=0&&(n=dt(n,new Ae("37481735321082"))),e>0&&(n=Vc.div(n)),n}static getTickFromPrice(e,t,n){return pe.getTickFromSqrtPriceX64(pe.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Kt)||e.lt(St))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Ae(t-64),o=Wp(n,32,128),i=new Ae("8000000000000000","hex"),r=0,a=new Ae(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new Ae(0))&&r<_c;){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 Ae(Ec)),d=ka(m.sub(new Ae(Wc)),64,128).toNumber(),p=ka(m.add(new Ae(Dc)),64,128).toNumber();return d==p?d:pe.getSqrtPriceX64FromTick(p).lte(e)?p:d}},fo=class{static getTickWithPriceAndTickspacing(e,t,n,o){let r=pe.getTickFromSqrtPriceX64(pe.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=fo.getTickWithPriceAndTickspacing(e,t,n,o),r=pe.getSqrtPriceX64FromTick(i);return pe.sqrtPriceX64ToPrice(r,n,o)}},xe=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(Qe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ai),r=t.sub(e);return o?ge.mulDivRoundingUp(ge.mulDivCeil(i,r,t),zt,e):ge.mulDivFloor(i,r,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Qe))throw new Error("sqrtPriceX64A must greater than 0");return o?ge.mulDivCeil(n,t.sub(e),at):ge.mulDivFloor(n,t.sub(e),at)}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?ge.mulDivRoundingUp(a,zt,Pi):a.shrn(Ai)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ge.mulDivFloor(n,Pi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return xe.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let r=xe.getLiquidityFromTokenAmountA(e,n,o,!1),a=xe.getLiquidityFromTokenAmountB(t,e,i);return r.lt(a)?r:a}else return xe.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:xe.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new Ae(0)};if(e.lt(n)){let r=xe.getTokenAmountAFromLiquidity(e,n,o,i),a=xe.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:r,amountB:a}}else return{amountA:new Ae(0),amountB:xe.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=xe.getAmountsFromLiquidity(e,t,n,o,r),l=i?1+a:1-a,m=new Ae(new O(c.toString()).mul(l).toFixed(0)),d=new Ae(new O(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 P,w,T,h;let u=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=pe.getSqrtPriceX64FromTick(t),m=pe.getSqrtPriceX64FromTick(n),d=r?1+i:1-i,p=xe.getAmountsFromLiquidity(u,l,m,o,r),[f,y]=[Fe(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),Fe(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[Fe(new Ae(new O(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Fe(new Ae(new O(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:un(f.expirationTime,y.expirationTime)}}},mo=class{static swapCompute(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y=!1){if(d.eq(Qe))throw new Error("amountSpecified must not be 0");if(f||(f=r?St.add(zt):Kt.sub(zt)),r){if(f.lt(St))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(Kt))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(Qe),g={amountSpecifiedRemaining:d,amountCalculated:Qe,sqrtPriceX64:m,tick:u>p?Math.min(p+Be.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new Ae(0)},P=p,w=n[p],T=0,h=!r&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Qe)&&!g.sqrtPriceX64.eq(f);){T>10;let k={};k.sqrtPriceStartX64=g.sqrtPriceX64;let B=oe.nextInitTick(w,g.tick,l,r,h),x=B||null,S=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=ve.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},P,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")}P=C.nextStartIndex;let{publicKey:N}=Ie(e,t,P);S=N,w=n[P];try{x=oe.firstInitializedTick(w,r)}catch{throw Error("not found next tick info")}}k.tickNext=x.tick,k.initialized=x.liquidityGross.gtn(0),p!==P&&S&&(g.accounts.push(S),p=P),k.tickNext<ht?k.tickNext=ht:k.tickNext>xt&&(k.tickNext=xt),k.sqrtPriceNextX64=pe.getSqrtPriceX64FromTick(k.tickNext);let I;if(r&&k.sqrtPriceNextX64.lt(f)||!r&&k.sqrtPriceNextX64.gt(f)?I=f:I=k.sqrtPriceNextX64,[g.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=mo.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(k.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),g.amountCalculated=g.amountCalculated.sub(k.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(k.amountOut),g.amountCalculated=g.amountCalculated.add(k.amountIn.add(k.feeAmount))),g.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let C=x.liquidityNet;r&&(C=C.mul(Bn)),g.liquidity=xe.addDelta(g.liquidity,C)}h=k.tickNext!=g.tick&&!r&&w.startTickIndex===k.tickNext,g.tick=r?k.tickNext-1:k.tickNext}else if(g.sqrtPriceX64!=k.sqrtPriceStartX64){let C=pe.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&w.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:k,isExist:B}=Be.nextInitializedTickArray(g.tick,l,r,o,i);B&&p!==k&&(g.accounts.push(Ie(e,t,k).publicKey),p=k)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Qe,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 Ae(0),amountIn:new Ae(0),amountOut:new Ae(0),feeAmount:new Ae(0)},c=o.gte(Qe);if(c){let l=ge.mulDivFloor(o,Mr.sub(new Ae(i.toString())),Mr);a.amountIn=r?xe.getTokenAmountAFromLiquidity(t,e,n,!0):xe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=pe.getNextSqrtPriceX64FromInput(e,n,l,r)}else a.amountOut=r?xe.getTokenAmountBFromLiquidity(t,e,n,!1):xe.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(Bn).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=pe.getNextSqrtPriceX64FromOutput(e,n,o.mul(Bn),r);let u=t.eq(a.sqrtPriceX64Next);return r?(u&&c||(a.amountIn=xe.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=xe.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:xe.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:xe.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(Bn))&&(a.amountOut=o.mul(Bn)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=ge.mulDivCeil(a.amountIn,new Ae(i),Mr.sub(new Ae(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var ut=60,lo=512,oe=class{static getTickArrayAddressByTick(e,t,n,o){let i=oe.getTickArrayStartIndexByTick(n,o),{publicKey:r}=Ie(e,t,i);return r}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=oe.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=ut)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Be.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)*Be.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ut,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*ut,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*ut:e+t*ut}static mergeTickArrayBitmap(e){let t=new Dp(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*ut));return[...oe.searchLowBitFromStart(e,t,r-1,i,n),...oe.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return oe.searchHightBitFromStart(e,t,-7680,lo,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=oe.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=Ie(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=>oe.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=Be.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=>oe.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=Be.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<ht||e>xt}static nextInitTick(e,t,n,o,i){if(Be.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<ut;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ut-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ut;){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=pe.getSqrtPriceX64FromTick(t),i=pe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new O(1).div(t),i=fo.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=pe.getSqrtPriceX64FromTick(i),a=pe.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=pe.getSqrtPriceX64FromTick(t),i=pe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new O(1).div(t),i=fo.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=pe.getSqrtPriceX64FromTick(i),a=pe.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}};var Jc=_([Le(8),E("bump"),Gt("index"),F(""),kt("protocolFeeRate"),kt("tradeFeeRate"),Gt("tickSpacing"),Q(A(),8,"")]),qp=_([kt("blockTimestamp"),vo("tickCumulative"),Q(A(),4)]),el=_([Le(8),He("initialized"),A("recentEpoch"),Gt("observationIndex"),F("poolId"),Q(qp,100,"observations"),Q(A(),4)]),Up=_([E("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),le("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),le("rewardGrowthGlobalX64")]),po=_([Le(8),E("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Gt("tickSpacing"),le("liquidity"),le("sqrtPriceX64"),Ue("tickCurrent"),kt(),le("feeGrowthGlobalX64A"),le("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),le("swapInAmountTokenA"),le("swapOutAmountTokenB"),le("swapInAmountTokenB"),le("swapOutAmountTokenA"),E("status"),Q(E(),7,""),Q(Up,3,"rewardInfos"),Q(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),Q(A(),15*4-3,"padding")]),Gp=_([le("growthInsideLastX64"),A("rewardAmountOwed")]),_o=_([Le(8),E("bump"),F("nftMint"),F("poolId"),Ue("tickLower"),Ue("tickUpper"),le("liquidity"),le("feeGrowthInsideLastX64A"),le("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),Q(Gp,3,"rewardInfos"),Q(A(),8,"")]),UT=_([Le(8),E("bump"),F("poolId"),Ue("tickLowerIndex"),Ue("tickUpperIndex"),le("liquidity"),le("feeGrowthInsideLastX64A"),le("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),Q(le(),3,"rewardGrowthInside"),Q(A(),8,"")]),Xp=_([Ue("tick"),bc("liquidityNet"),le("liquidityGross"),le("feeGrowthOutsideX64A"),le("feeGrowthOutsideX64B"),Q(le(),3,"rewardGrowthsOutsideX64"),Q(kt(),13,"")]),Ti=_([Le(8),F("poolId"),Ue("startTickIndex"),Q(Xp,ut,"ticks"),E("initializedTickCount"),Q(E(),115,"")]),tl=_([Le(329),Q(F(),100,"whitelistMints")]),$c=_([Le(8),F("poolId"),Q(Q(A(),8),Aa,"positiveTickArrayBitmap"),Q(Q(A(),8),Aa,"negativeTickArrayBitmap")]),GT=_([A(),E("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(A(),8)]),nl=_([Le(8),E("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),A("recentEpoch"),Q(A(),8)]);el.span;var ol=he("Raydium_Clmm"),Ht={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]},il=[188,37,179,131,82,150,84,73],rl=[16,72,250,198,14,162,212,19],Se=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([le("sqrtPriceX64"),A("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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(w=>({pubkey:w,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:Qe},g);let P=Buffer.from([...Ht.createPool,...g]);return new bt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new H(o.address),new H(i.address)],{publicKey:m}=zc(t,r,u,l),{publicKey:d}=Hc(t,m),{publicKey:p}=ba(t,m,u),{publicKey:f}=ba(t,m,l),y=et(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,r,d,u,p,new H(o.programId||Ve),l,f,new H(i.programId||Ve),y,a,c)];return{signers:[],instructions:b,instructionTypes:[z.CreateAccount,z.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,P,w,T,h,k,B,x,S,I){let C=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),N=[...I?[{pubkey:I,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...N],v=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:k,amountMaxA:B,amountMaxB:x,withMetadata:S==="create",baseFlag:!1,optionBaseFlag:0},v);let R=Buffer.from([...Ht.openPosition,...v]);return new bt({keys:L,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h,k,B,x,S){let I=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),C=[...S?[{pubkey:S,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:k,amountMaxB:B,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},L);let v=Buffer.from([...Ht.openPositionWithTokenEx,...L]);return new bt({keys:N,programId:e,data:v})}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 H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let S=Vr.generate();d.push(S),y=S.publicKey}let b=oe.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=oe.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:w}=Ie(p,f,g),{publicKey:T}=m?re(n.wallet,y,Ze):re(n.wallet,y,Ve),{publicKey:h}=xn(y),{publicKey:k}=Ct(p,y),{publicKey:B}=ln(p,f,o,i),x=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0);return{signers:d,instructions:[x],instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:P,tickArrayUpper:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:B}}}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 H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let S=Vr.generate();d.push(S),y=S.publicKey}let b=oe.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=oe.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:w}=Ie(p,f,g),{publicKey:T}=m?re(n.wallet,y,Ze):re(n.wallet,y,Ve),{publicKey:h}=xn(y),{publicKey:k}=Ct(p,y),{publicKey:B}=ln(p,f,o,i),x=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,u,r,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,u,r,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:P,tickArrayUpper:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:B},instructions:[x],signers:d,instructionTypes:[z.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,P,w,T,h,k,B,x,S,I){let C=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),N=[...I?[{pubkey:I,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...N],v=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ha(0),amountMaxA:B==="MintA"?x:S,amountMaxB:B==="MintA"?S:x,withMetadata:k==="create",baseFlag:B==="MintA",optionBaseFlag:1},v);let R=Buffer.from([...Ht.openPosition,...v]);return new bt({keys:L,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h,k,B,x,S){let I=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),C=[...S?[{pubkey:S,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:new ha(0),amountMaxA:k==="MintA"?B:x,amountMaxB:k==="MintA"?x:B,withMetadata:h==="create",baseFlag:k==="MintA",optionBaseFlag:1},L);let v=Buffer.from([...Ht.openPositionWithTokenEx,...L]);return new bt({keys:N,programId:e,data:v})}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 H((await l(1))[0]);else{let S=Vr.generate();p.push(S),d=S.publicKey}let[f,y]=[new H(e.programId),new H(e.id)],b=oe.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=oe.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:P}=Ie(f,y,b),{publicKey:w}=Ie(f,y,g),{publicKey:T}=m?re(n.wallet,d,Ze):re(n.wallet,d,Ve),{publicKey:h}=xn(d),{publicKey:k}=Ct(f,d),{publicKey:B}=ln(f,y,o,i),x=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:P,tickArrayUpper:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:B},instructions:[x],signers:p,instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=_([]),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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:r?Ze:Ve,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Ht.closePosition,...u]);return new bt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new H(e.programId),a=i?re(n.wallet,o.nftMint,Ze).publicKey:re(n.wallet,o.nftMint,Ve).publicKey,{publicKey:c}=Ct(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:[z.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,P){let w=_([le("liquidity"),A("amountMaxA"),A("amountMaxB"),E("optionBaseFlag"),He("baseFlag")]),T=[...P?[{pubkey:P,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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],k=Buffer.alloc(w.span);w.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},k);let B=Buffer.from([...Ht.increaseLiquidity,...k]);return new bt({keys:h,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,l]=[new H(e.programId),new H(e.id)],m=oe.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=oe.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?re(o.wallet,n.nftMint,Ze):re(o.wallet,n.nftMint,Ve),{publicKey:b}=Ct(u,n.nftMint),{publicKey:g}=ln(u,l,n.tickLower,n.tickUpper),P=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),i,r,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?et(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[z.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 H(e.programId),new H(e.id)],m=oe.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=oe.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?re(o.wallet,n.nftMint,Ze):re(o.wallet,n.nftMint,Ve),{publicKey:b}=Ct(u,n.nftMint),{publicKey:g}=ln(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 H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),i,r,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?et(u,l).publicKey:void 0)],signers:[],instructionTypes:[z.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,P){let w=_([le("liquidity"),A("amountMaxA"),A("amountMaxB"),E("optionBaseFlag"),He("baseFlag")]),T=[...P?[{pubkey:P,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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],k=Buffer.alloc(w.span);w.encode({liquidity:new ha(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},k);let B=Buffer.from([...Ht.increaseLiquidity,...k]);return new bt({keys:h,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([le("liquidity"),A("amountMinA"),A("amountMinB")]),h=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...y.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=[{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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:P},B);let x=Buffer.from([...Ht.decreaseLiquidity,...B]);return new bt({keys:k,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new H(e.programId),new H(e.id)],d=oe.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=oe.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Ie(l,m,d),{publicKey:y}=Ie(l,m,p),{publicKey:b}=u?re(o.wallet,n.nftMint,Ze):re(o.wallet,n.nftMint,c),{publicKey:g}=Ct(l,n.nftMint),{publicKey:P}=ln(l,m,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new H(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new H(e.rewardDefaultInfos[k].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,P,f,y,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),w,i,r,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?et(l,m).publicKey:void 0);return T.push(h),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:P},signers:[],instructions:T,instructionTypes:[z.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 P=_([A("amount"),A("otherAmountThreshold"),le("sqrtPriceLimitX64"),He("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],h=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let k=Buffer.from([...Ht.swap,...h]);return new bt({keys:T,programId:e,data:k})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new H(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,et(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.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 H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new H(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,et(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=_([A("openTime"),A("endTime"),le("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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:se(l),endTime:se(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...Ht.initReward,...y]);return new bt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(e.id)],a=Yc(i,r,o.mint).publicKey,c=ki(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,r,c,new H(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:[z.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=_([E("rewardIndex"),le("emissionsPerSecondX64"),A("openTime"),A("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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,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:se(l),endTime:se(m)},y);let b=Buffer.from([...Ht.setRewardEmissions,...y]);return new bt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(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 H(t.rewardInfos[d].vault),u=new H(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&ol.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ki(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,r,l,new H(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[z.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,r,a){let c=_([E("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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Ht.collectReward,...l]);return new bt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new H(e.programId),new H(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new H(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&ol.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:[z.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 H((await c(1))[0]);else{let g=Vr.generate();u.push(g),l=g.publicKey}let m=a?re(i,r,Ze).publicKey:re(i,r,Ve).publicKey,{publicKey:d}=Ct(n,r),p=Vo(e,l).publicKey,f=re(i,l,Ve).publicKey,y=xn(l).publicKey,b=Se.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:re(t,r,a?Ze:Ve).publicKey,positionNftProgram:a?Ze:Ve});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[z.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:sn,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1}],g=_([He("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:y},P);let w=Buffer.from([...il,...P]);return new bt({keys:b,programId:e,data:w})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=re(o,i,Ve),{publicKey:a}=Ct(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:ga(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1}];return new bt({keys:c,programId:e,data:Buffer.from(il)})}static harvestLockPositionInstruction(e){let[t,n]=[new H(e.poolKeys.programId),new H(e.poolKeys.id)],o=oe.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=oe.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=Ie(t,n,o),{publicKey:a}=Ie(t,n,i),{publicKey:c}=re(e.owner,e.ownerPosition.nftMint,Ve),{publicKey:u}=Ct(t,e.ownerPosition.nftMint),{publicKey:l}=ln(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new H(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new H(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:ga(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 H(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new H(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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new bt({keys:p,programId:e.programId,data:Buffer.from(rl)})}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:P,mintB:w,rewardAccounts:T,exTickArrayBitmap:h}){let k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],B=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey: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:Ve,isSigner:!1,isWritable:!1},{pubkey:Ze,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...k];return new bt({keys:B,programId:e,data:Buffer.from(rl)})}};var zp=_([kt("mintAuthorityOption"),F("mintAuthority"),A("supply"),E("decimals"),E("isInitialized"),kt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as mI}from"@solana/web3.js";import{MintLayout as pI,TOKEN_PROGRAM_ID as yI}from"@solana/spl-token";var _r=s=>new Ye({mint:s.address,decimals:s.decimals,symbol:s.symbol,name:s.name}),xi=o=>{var i=o,{amount:s,isRaw:e,name:t}=i,n=Xe(i,["amount","isRaw","name"]);return new Me(new Ye({mint:Pt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var Tt=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Xe(i,["address","programId","decimals"]);return V({chainId:101,address:Pt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(V({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(V({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(V({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import sl from"bn.js";var Ta=new sl(25),Er=new sl(1e4);import{PublicKey as nt,SystemProgram as Hp,SYSVAR_RENT_PUBKEY as vI,TransactionInstruction as Yn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qp,TOKEN_PROGRAM_ID as yo}from"@solana/spl-token";import Wr from"bn.js";var Ia=_([E("instruction"),A("amountIn"),A("minAmountOut")]),Ba=_([E("instruction"),A("maxAmountIn"),A("amountOut")]),RI=_([E("instruction"),E("nonce")]),Yp=_([E("instruction"),E("nonce"),A("startTime")]),Si=_([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),le("swapBaseInAmount"),le("swapQuoteOutAmount"),A("swapBase2QuoteFee"),le("swapQuoteInAmount"),le("swapBaseOutAmount"),A("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"),A("lpReserve"),Q(A(),3,"padding")]),LI=_([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),le("swapBaseInAmount"),le("swapQuoteOutAmount"),le("swapQuoteInAmount"),le("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),Q(A(),64,"padding")]),xa=_([E("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),Sa=_([E("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var al=_([A("fee")]);var Dr=he("Raydium_liquidity_instruction");function ul(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=oo}=s,u=Buffer.alloc(xa.span);xa.encode({instruction:3,baseAmountIn:se(o),quoteAmountIn:se(i),otherAmountMin:se(a),fixedSide:r==="base"?Ft:Wu},u);let l=[K({pubkey:yo,isWritable:!1}),K({pubkey:new nt(e.id)}),K({pubkey:new nt(t.authority),isWritable:!1}),K({pubkey:new nt(t.openOrders),isWritable:!1}),K({pubkey:new nt(t.targetOrders)}),K({pubkey:new nt(e.lpMint.address)}),K({pubkey:new nt(t.vault.A)}),K({pubkey:new nt(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(K({pubkey:c})),l.push(K({pubkey:new nt(e.marketId),isWritable:!1}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:new nt(t.marketEventQueue),isWritable:!1})),new Yn({programId:new nt(e.programId),keys:l,data:u})}function Ka(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=oo}=s,c=yt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(Sa.span);Sa.encode({instruction:4,lpAmount:se(o),baseAmountMin:se(i),quoteAmountMin:se(r)},l);let m=[K({pubkey:yo,isWritable:!1}),K({pubkey:c.id}),K({pubkey:c.authority,isWritable:!1}),K({pubkey:c.openOrders}),K({pubkey:c.targetOrders}),K({pubkey:c.mintLp.address}),K({pubkey:c.vault.A}),K({pubkey:c.vault.B})];return u===5?m.push(K({pubkey:a})):(m.push(K({pubkey:c.id})),m.push(K({pubkey:c.id}))),m.push(K({pubkey:c.marketProgramId,isWritable:!1}),K({pubkey:c.marketId}),K({pubkey:c.marketBaseVault}),K({pubkey:c.marketQuoteVault}),K({pubkey:c.marketAuthority,isWritable:!1}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:c.marketEventQueue}),K({pubkey:c.marketBids}),K({pubkey:c.marketAsks})),new Yn({programId:c.programId,keys:m,data:l})}return new Yn({programId:c.programId,keys:[]})}function Ca({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:P,openTime:w,coinAmount:T,pcAmount:h,ammConfigId:k,feeDestinationId:B}){let x=_([E("instruction"),E("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),S=[{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Qp,isSigner:!1,isWritable:!1},{pubkey:Hp.programId,isSigner:!1,isWritable:!1},{pubkey:ft,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:k,isSigner:!1,isWritable:!1},{pubkey:B,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(x.span);return x.encode({instruction:1,nonce:P,openTime:w,coinAmount:T,pcAmount:h},I),{instruction:new Yn({keys:S,programId:s,data:I}),instructionType:z.AmmV4CreatePool}}function jp({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=oo},i){let r=yt(s),a=Buffer.alloc(Ia.span);Ia.encode({instruction:9,amountIn:se(t),minAmountOut:se(n)},a);let c=[K({pubkey:yo,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders})];return i===4&&c.push(K({pubkey:r.targetOrders})),c.push(K({pubkey:r.vault.A}),K({pubkey:r.vault.B})),i===5&&c.push(K({pubkey:o})),c.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Yn({programId:r.programId,keys:c,data:a})}function Zp({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=oo},i){let r=yt(s),a=Buffer.alloc(Ba.span);Ba.encode({instruction:11,maxAmountIn:se(t),amountOut:se(n)},a);let c=[K({pubkey:yo,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders}),K({pubkey:r.targetOrders}),K({pubkey:r.vault.A}),K({pubkey:r.vault.B})];return i===5&&c.push(K({pubkey:o})),c.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Yn({programId:r.programId,keys:c,data:a})}function $p(s,e,t,n,o,i,r,a,c,u){let l=_([E("instructionId"),A("amountIn"),A("minAmountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:16,amountIn:c,minAmountOut:u},m);let d=[{pubkey:yo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Yn({programId:s,keys:d,data:m})}function Jp(s,e,t,n,o,i,r,a,c,u){let l=_([E("instructionId"),A("maxAmountIn"),A("amountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:17,maxAmountIn:c,amountOut:u},m);let d=[{pubkey:yo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Yn({programId:s,keys:d,data:m})}function qr(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4){if(r==="in")return $p(new nt(e.programId),new nt(e.id),new nt(e.authority),new nt(e.vault.A),new nt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Wr(o.toString()),new Wr(i.toString()));if(r==="out")return Jp(new nt(e.programId),new nt(e.id),new nt(e.authority),new nt(e.vault.A),new nt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Wr(o.toString()),new Wr(i.toString()));Dr.logWithError("invalid params","params",s)}throw Dr.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function Ur(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 jp(q(V({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return Zp(q(V({},a),{maxAmountIn:o,amountOut:i}),t);Dr.logWithError("invalid params","params",s)}throw Dr.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var go=5e4,ef=_([A("x"),A("y"),A("price")]),tf=_([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),Q(ef,go,"DataElement")]);function nf(s,e){return[0,go-2]}function of(s){return[0,go-2]}function rf(s){return[0,go-2]}function sf(s,e,t){let[n,o]=nf(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>=go-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 Ra(s,e,t){let[n,o,i]=sf(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 bo(s,e,t){return e*s.multiplier/t}function cl(s,e,t){return e*t/s.multiplier}function af(s,e){let[t,n]=of(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>go-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 uf(s,e){let[t,n]=rf(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=go-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 ll(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=af(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 cf(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=uf(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 lf(s,e){let t=ll(s,e,0,!1);return t[3]?t[0]:0}function ml(s,e,t,n){let o=Ra(s,e,t),i=bo(s,e,o),r=bo(s,t,o),a=bo(s,n,o),c=!0,[u,l,m,d]=ll(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return cl(s,p,o)}}function dl(s,e,t,n){let o=Ra(s,e,t),i=bo(s,e,o),r=bo(s,t,o),a=bo(s,n,o),c=!1,[u,l,m,d]=cf(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return cl(s,p,o)}}function mf(s){let e=tf.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 pl(s,e,t,n){let o=lf(s,bo(s,e,Ra(s,e,t)))/s.multiplier;return n?o:1/o}var Ki=class{constructor({connection:e,modelDataPubKey:t=oo}){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=mf(e==null?void 0:e.data))}}};import{PublicKey as ff}from"@solana/web3.js";import dB from"bn.js";import{TOKEN_PROGRAM_ID as yf}from"@solana/spl-token";import{PublicKey as df}from"@solana/web3.js";var pf=he("Raydium_liquidity_serum");function fl({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=df.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw pf.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 Gr({programId:s}){let{publicKey:e}=be([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function Po({name:s,programId:e,marketId:t}){let{publicKey:n}=be([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function bf({programId:s,marketId:e}){let{publicKey:t}=be([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function Na({programId:s}){return be([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function Oa({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=Po({name:"amm_associated_seed",programId:a,marketId:t}),l=Po({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Na({programId:a}),p=Po({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Po({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=Po({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=bf({programId:a,marketId:t}),g=Po({name:"target_associated_seed",programId:a,marketId:t}),P=Po({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=fl({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:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:ff.default,configId:Gr({programId:a})}}var La={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Xr=s=>{let e={},t=yf.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:Tt({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:Tt({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new O(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new O(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:La,week:La,month:La,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Gr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new O(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:Tt({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())}),burnPercent:0}}),e};import $e from"bn.js";import{PublicKey as Ci}from"@solana/web3.js";import Ri from"bn.js";import{TOKEN_PROGRAM_ID as Pl}from"@solana/spl-token";import{SystemProgram as Ao,SYSVAR_RENT_PUBKEY as Pf,Transaction as yl,TransactionInstruction as Af}from"@solana/web3.js";import{createInitializeAccountInstruction as bl,TOKEN_PROGRAM_ID as gl}from"@solana/spl-token";function gf(s="accountFlags"){let e=new Cr(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 va=_([Le(5),gf("accountFlags"),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Le(7)]);function wf({programId:s,marketInfo:e}){let t=_([E("version"),kt("instruction"),A("baseLotSize"),A("quoteLotSize"),Gt("feeRateBps"),A("vaultSignerNonce"),A("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:Pf,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 Af({keys:n,programId:s,data:o})}async function zr({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new yl,o=await s.getMinimumBalanceForRentExemption(165);n.add(Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:gl}),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:gl}),bl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),bl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(va.span),space:va.span,programId:t.programId}));let i=new yl;return i.add(Ao.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}),Ao.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}),Ao.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}),Ao.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}),wf({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:[z.CreateAccount,z.CreateAccount,z.InitAccount,z.InitAccount]},{transaction:i,signer:[],instructionTypes:[z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.InitMarket]}]}var Eo=class extends qe{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=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),P=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),w=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),T=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),h=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),k=Je({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-baseVault`}),B=Je({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-quoteVault`}),x=0,S=new Ri(100);function I(){let G=new Ri(0);for(;;)try{return{vaultOwner:Ci.createProgramAddressSync([g.publicKey.toBuffer(),G.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:G}}catch{if(G.iaddn(1),G.gt(new Ri(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:N}=I(),L=new Ri(Math.round(10**e.decimals*n)),v=new Ri(Math.round(n*10**t.decimals*o));if(L.eq(Ft))throw Error("lot size is too small");if(v.eq(Ft))throw Error("tick size or lot size is too small");let R=await zr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:k,quoteVault:B,vaultOwner:C,requestQueue:P,eventQueue:w,bids:T,asks:h,feeRateBps:x,quoteDustThreshold:S,vaultSignerNonce:N,baseLotSize:L,quoteLotSize:v,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),M=this.createTxBuilder(f);M.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let G of R.slice(1,R.length))M.addInstruction({instructions:G.transaction.instructions,signers:G.signer,instructionTypes:G.instructionTypes});return m===0?M.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.publicKey,quoteVault:B.publicKey,baseMint:new Ci(e.mint),quoteMint:new Ci(t.mint)}}):M.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.publicKey,quoteVault:B.publicKey,baseMint:new Ci(e.mint),quoteMint:new Ci(t.mint)}})}};var Li=class extends qe{constructor(t){super(t);this.stableLayout=new Ki({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:hn.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 $e(new O(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=_r(t[i?"mintB":"mintA"]),[c,u]=[new $e(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new $e(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new $e(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.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=Ft;r.isZero()||(d=m==="base"?mr(r.mul(u),c):mr(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=mr(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new lt(new $e(1)).add(o),y=new lt(new $e(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,P=new Me(a,d),w=new Me(a,b),T=new Me(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:P,maxAnotherAmount:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[i.token,r.token],w=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!w&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),k=[g,P],B=[w,T],x=[i.raw,r.raw],S=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(k.reverse(),B.reverse(),x.reverse(),I=c==="a"?"quote":"base"):S==="base"&&(I=c==="a"?"base":"quote");let[C,N]=k,[L,v]=B,[R,M]=x,G=o!=null?o:await this.getAmmPoolKeys(n.id),Y=this.createTxBuilder(p),te=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:L,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:J}=te,ee=Xe(te,["tokenAccount"]);Y.addInstruction(ee);let ke=await f.handleTokenAccount({side:"in",amount:M,mint:N.mint,tokenAccount:v,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ie}=ke,de=Xe(ke,["tokenAccount"]);Y.addInstruction(de);let Re=await f.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ne}=Re,$=Xe(Re,["tokenAccount"]);return Y.addInstruction($),Y.addInstruction({instructions:[ul({poolInfo:n,poolKeys:G,userKeys:{baseTokenAccount:J,quoteTokenAccount:ie,lpTokenAccount:ne,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:M,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5AddLiquidity:z.AmmV4AddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),Y.addCustomComputeBudget(m),Y.addTipInstruction(d),l===0?await Y.buildV0():Y.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,P=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let w=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:k,checkCreateATAOwner:B}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),N=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:w,bypassAssociatedCheck:k,checkCreateATAOwner:B}),{tokenAccount:x}=N,S=Xe(N,["tokenAccount"]);h.addInstruction(S);let L=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:k,checkCreateATAOwner:B}),{tokenAccount:I}=L,C=Xe(L,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Ka({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:P,baseTokenAccount:x,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.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=Hn,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),P={};for(let G of this.scope.account.tokenAccountRawInfos)(P[G.accountInfo.mint.toString()]===void 0||re(this.scope.ownerPubKey,G.accountInfo.mint,Hn).publicKey.equals(G.pubkey))&&(P[G.accountInfo.mint.toString()]=G.pubkey);let w=P[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let T=o.add(a!=null?a:new $e(0)),h=t.mintA.address===Ye.WSOL.mint.toString(),k=t.mintB.address===Ye.WSOL.mint.toString(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,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(x||{}),B===void 0)throw new Error("base token account not found");let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),S===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=B,P[t.mintB.address]=S,r!==void 0&&!(a!=null&&a.isZero())){let G=Zt[r.programId],Y=$t({programId:new tt(r.programId),poolId:new tt(r.id),owner:this.scope.ownerPubKey,version:G}),J,ee=await this.scope.connection.getAccountInfo(Y);if(ee&&(J=mi(G).decode(ee.data)),G!==6&&!J){let{instruction:Re,instructionType:Te}=pi({id:new tt(r.id),programId:new tt(r.programId),version:G,ledger:Y,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Re],instructionTypes:[Te]})}let ie=[];for(let Re of r.rewardInfos){let Te=Re.mint.address===Ye.WSOL.mint.toString();if(P[Re.mint.address])ie.push(P[Re.mint.address]);else{let{account:ot,instructionParams:Ot}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Re.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Te,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});ot||this.logAndCreateError("farm reward account not found:",Re.mint.address),Ot&&g.addInstruction(Ot),ie.push(ot)}}let de=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],ne={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:de,lpAccount:w,rewardAccounts:ie},$=Zt[r.programId],te=$===6?fi(ne):$===5?yi(ne):bi(ne),ke={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};g.addInstruction({instructions:[te],instructionTypes:[ke[$]]})}let C=await this.getAmmPoolKeys(t.id),N=Ka({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:w,baseTokenAccount:B,quoteTokenAccount:S,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[N],instructionTypes:[t.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[L,v]=t.mintA.address===n.mintA.address?[B,S]:[S,B],R=await this.scope.clmm.getClmmPoolKeys(n.id),M=await Se.openPositionFromBaseInstructions(q(V({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:L,tokenAccountB:v},withMetadata:"create"},i),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...M.instructions],signers:M.signers,instructionTypes:[...M.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 v;let P=u.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),w=u.useSOLBalance&&o.mint.equals(Yr),T=u.useSOLBalance&&i.mint.equals(Yr),h=this.createTxBuilder(g),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:P,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});h.addInstruction(B||{});let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:P,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(S||{}),k===void 0||x===void 0)throw Error("you don't has some token account");let I=Oa({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:N,instructionType:L}=Ca(q(V({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:x,userLpVault:re(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[N],instructionTypes:[L]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=yr,marketProgram:n=ju,feeDestinationId:o=$u,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:P,computeBudgetConfig:w,txTipConfig:T,feePayer:h}){var Qi,ji,Bo;let k=this.scope.ownerPubKey,B=m.feePayer||((Qi=this.scope.owner)==null?void 0:Qi.publicKey),x=m.useSOLBalance&&r.mint.equals(Yr),S=m.useSOLBalance&&a.mint.equals(Yr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-market`}),N=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-request`}),L=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-event`}),v=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-bids`}),R=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-asks`}),M=Je({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-baseVault`}),G=Je({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-quoteVault`}),Y=0,J=new $e(100);function ee(){let Bt=new $e(0);for(;;)try{return{vaultOwner:tt.createProgramAddressSync([C.publicKey.toBuffer(),Bt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Bt}}catch{if(Bt.iaddn(1),Bt.gt(new $e(25555)))throw Error("find vault owner error")}}let{vaultOwner:ie,vaultSignerNonce:de}=ee(),ne=new $e(Math.round(10**r.decimals*b)),$=new $e(Math.round(b*10**a.decimals*g));if(ne.eq(Ft))throw Error("lot size is too small");if($.eq(Ft))throw Error("tick size or lot size is too small");let te=await zr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ie,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:M,quoteVault:G,requestQueue:N,eventQueue:L,bids:v,asks:R,feeRateBps:Y,quoteDustThreshold:J,vaultSignerNonce:de,baseLotSize:ne,quoteLotSize:$,lowestFeeMarket:d}}),ke=this.createTxBuilder(h);ke.addInstruction({instructions:te[0].transaction.instructions,signers:te[0].signer});for await(let Bt of te.slice(1,te.length))ke.addInstruction({instructions:Bt.transaction.instructions,signers:Bt.signer,instructionTypes:Bt.instructionTypes});let{account:Re,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:B,amount:c}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&I?`${I}-wsol`:void 0});ke.addInstruction(Te||{});let{account:ot,instructionParams:Ot}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:B,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:y,assignSeed:S&&I?`${I}-wsol`:void 0});if(ke.addInstruction(Ot||{}),Re===void 0)throw Error("you don't has base token account");if(ot===void 0)throw Error("you don't has quote token account");let it=Oa({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Yi={programId:t,ammId:it.id,ammAuthority:it.authority,ammOpenOrders:it.openOrders,lpMint:it.lpMint,coinMint:it.baseMint,pcMint:it.quoteMint,coinVault:it.baseVault,pcVault:it.quoteVault,withdrawQueue:it.withdrawQueue,ammTargetOrders:it.targetOrders,poolTempLp:it.lpVault,marketProgramId:it.marketProgramId,marketId:it.marketId,ammConfigId:it.configId,feeDestinationId:o},{instruction:Hi,instructionType:Io}=Ca(q(V({},Yi),{userWallet:this.scope.ownerPubKey,userCoinVault:Re,userPcVault:ot,userLpVault:re(this.scope.ownerPubKey,it.lpMint,i).publicKey,nonce:it.nonce,openTime:l,coinAmount:c,pcAmount:u}));ke.addInstruction({instructions:[Hi],instructionTypes:[Io]});let jt=x||S?[((ji=Te==null?void 0:Te.instructions)==null?void 0:ji[0])||((Bo=Ot==null?void 0:Ot.instructions)==null?void 0:Bo[0])].filter(Bt=>!!Bt):void 0;return P===0?ke.sizeCheckBuildV0({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:N.publicKey,eventQueue:L.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:M.publicKey,quoteVault:G.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Yi)}):ke.sizeCheckBuild({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:N.publicKey,eventQueue:L.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:M.publicKey,quoteVault:G.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Yi)})}async getCreatePoolFee({programId:t}){let n=Gr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return al.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,P=t.version===4,w;if(P)w=new O(y.toString()).div(10**g).div(new O(f.toString()).div(10**b));else{let L=pl(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?w=new O(1e6).div(L*1e6):w=new O(L*1e6).div(1e6)}let T=n,h=new $e(0),k=new $e(0);if(!T.isZero())if(P){k=Wn(T.mul(Ta),Er);let L=T.sub(k),v=f.add(L);h=y.mul(L).div(v)}else{k=T.mul(new $e(2)).div(new $e(1e4));let L=T.sub(k);p==="quote"?h=new $e(ml(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.toNumber())):h=new $e(dl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.toNumber()))}let B=new $e(new O(h.toString()).mul(1-r).toFixed(0)),x=h,S=B,I=new O(h.toString()).div(new O(T.sub(k).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new O(h.toString()).div(10**g).div(new O(T.sub(k).toString()).div(10**b)));let C=w.sub(I).div(w).mul(100);return{amountOut:x,minAmountOut:S,currentPrice:w,executionPrice:I,priceImpact:C,fee:k}}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 O(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 O(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(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 O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new $e(0),P=n;if(!P.isZero()){P.gt(y)&&(P=y.sub(new $e(1)));let S=y.sub(P);g=f.mul(P).div(S).mul(Er).div(Er.sub(Ta))}let w=new $e(new O(g.toString()).mul(1+r).toFixed(0)),T=g,h=w;this.logDebug("amountIn:",new O(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let k=null;!g.isZero()&&!P.isZero()&&(k=new O(P.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${k.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 O(1).div(k).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let B=b.mul(T.toString()),x=B.sub(n.toString()).abs().div(B);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:k,priceImpact:x}}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,P]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],w=y&&g.address===Z.toBase58(),T=b&&P.address===Z.toBase58(),{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(g.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:f});p.addInstruction(k||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:w,associatedOnly:f});let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(x||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:B,outputTokenUseSolBalance:T,associatedOnly:f});let S=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[I===4?qr({version:I,poolKeys:S,userKeys:{tokenAccountIn:h,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):Ur({version:I,poolKeys:S,userKeys:{tokenAccountIn:h,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[I===4?z.AmmV4SwapBaseIn:z.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=Si.decode(m.accountInfo.data);i[String(t[l])]=q(V({},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 $e(kf.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(V({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Xr({[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 Rt from"bn.js";import{AccountLayout as Al,createAssociatedTokenAccountIdempotentInstruction as wl,TOKEN_2022_PROGRAM_ID as Qn,TOKEN_PROGRAM_ID as Ni}from"@solana/spl-token";var Oi=class extends qe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var B;let{programId:t,owner:n=((B=this.scope.owner)==null?void 0:B.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 Rt(new j(o.address).toBuffer()).gt(new Rt(new j(i.address).toBuffer()))?[i,o,new O(1).div(a)]:[o,i,a],P=pe.priceToSqrtPriceX64(g,y.decimals,b.decimals),w=[],T=[];y.programId===Qn.toBase58()&&T.push(Pa(t,new j(y.address)).publicKey),b.programId===Qn.toBase58()&&T.push(Pa(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((x,S)=>{x&&w.push(T[S])});let k=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:P,forerunCreate:!l&&u,extendMintAccount:w});return f.addInstruction(k),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(V({},k.address),{observationId:k.address.observationId.toBase58(),exBitmapAccount:k.address.exBitmapAccount.toBase58(),programId:t.toString(),id:k.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:k.address.mintAVault.toString(),B:k.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:V({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.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},qc),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 P=this.createTxBuilder(g),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),k=n.useSOLBalance&&e.mintB.address===Z.toString(),[B,x]=r==="MintA"?[a,c]:[c,a],{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});S&&(w=S),P.addInstruction(I||{});let{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});C&&(T=C),P.addInstruction(N||{}),(!w||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:w==null?void 0:w.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let L=t||await this.getClmmPoolKeys(e.id),v=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:L,ownerInfo:q(V({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return P.addInstruction(v),P.addCustomComputeBudget(f),P.addTipInstruction(y),P.versionBuild({txVersion:b,extInfo:V({},v.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 P=this.createTxBuilder(g),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===Z.toBase58(),k=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:B,instructionParams:x}=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});B&&(w=B),P.addInstruction(x||{});let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});S&&(T=S),P.addInstruction(I||{}),(w===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),N=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return P.addInstruction(N),P.addCustomComputeBudget(p),P.addTipInstruction(f),P.versionBuild({txVersion:d,extInfo:{address:N.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,P=c.useSOLBalance&&t.mintA.address===Z.toString(),w=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:P,owner:this.scope.ownerPubKey,createInfo:P||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(g=k),y.addInstruction(B||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),S=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,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(Qn)});return y.addInstruction(S),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;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(),P=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:w,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});w&&(y=w),f.addInstruction(T||{});let{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(k||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),x=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(Qn)});return f.addInstruction(x),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:x.address}})}async decreaseLiquidity(e){var L;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(),P,w,{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});P=T,h&&y.addInstruction(h);let{account:k,instructionParams:B}=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});w=k,B&&y.addInstruction(B);let x=[];for(let v of t.rewardDefaultInfos){let R=i.useSOLBalance&&v.mint.address===Z.toString(),M;if(v.mint.address===t.mintA.address)M=P;else if(v.mint.address===t.mintB.address)M=w;else{let{account:G,instructionParams:Y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(v.mint.programId),mint:new j(v.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});M=G,Y&&y.addInstruction(Y)}x.push(M)}!P&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),I=(L=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:L.owner.equals(Qn),C=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:w,rewardAccounts:x},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[z.ClmmDecreasePosition]});let N=V({},C.address);if(i.closePosition){let v=await Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:v.instructions,endInstructionTypes:v.instructionTypes}),N=V(V({},N),v.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:N}})}async lockPosition(e){var f;let{programId:t=oi,authProgramId:n=br,poolProgramId:o=no,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Se.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(Qn)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=oi,authProgramId:n=br,clmmProgram:o=no,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=_o.decode(b.data),P=a.useSOLBalance&&f.mintA.address===Z.toString(),w=a.useSOLBalance&&f.mintB.address===Z.toString(),T,h,{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});T=k,B&&y.addInstruction(B);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});h=x,S&&y.addInstruction(S);let I={},C=[];for(let ie of f.rewardInfos){let de=a.useSOLBalance&&ie.mint.address===Z.toString(),ne=I[ie.mint.address];if(!ne){let{account:$,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ie.mint.programId),mint:new j(ie.mint.address),notUseTokenAccount:de,owner:this.scope.ownerPubKey,skipCloseAccount:!de,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:de?!1:c});ne=$,te&&y.addInstruction(te)}I[ie.mint.address]=ne,C.push(ne)}let N=Vo(t,r.lockNftMint).publicKey,L=re(this.scope.ownerPubKey,r.lockNftMint,Ni).publicKey,v=oe.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=oe.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:M}=Ie(new j(f.programId),r.poolId,v),{publicKey:G}=Ie(new j(f.programId),r.poolId,R),{publicKey:Y}=ln(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),J=[];for(let ie=0;ie<f.rewardInfos.length;ie++)J.push({poolRewardVault:new j(f.rewardInfos[ie].vault),ownerRewardVault:C[ie],rewardMint:new j(f.rewardInfos[ie].mint.address)});let ee=await Se.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:N,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:L,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:Y,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:M,tickArrayUpper:G,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:J,exTickArrayBitmap:et(o,r.poolId).publicKey});return y.addInstruction({instructions:[ee],instructionTypes:[z.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=Se.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(Qn)});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 Rt(new O(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=Se.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:ge.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 Rt(new O(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 P=t!=null?t:await this.getClmmPoolKeys(e.id),w=Se.initRewardInstructions({poolInfo:e,poolKeys:P,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:ge.decimalToX64(p.perSecond)}});d=V(V({},d),w.address),m.addInstruction(w)}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 Rt(new O(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=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ge.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 Rt(new O(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),P=Se.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:ge.decimalToX64(p.perSecond)}});m.addInstruction(P),d=V(V({},d),P.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=Se.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(P=>P.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=Se.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=V(V({},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,P=c.useSOLBalance&&e.mintA.address===Z.toBase58(),w=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new O(0))?T=g?St.add(new Rt(1)):Kt.sub(new Rt(1)):T=pe.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=x,S&&b.addInstruction(S)}let k;if(!k){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=x,S&&b.addInstruction(S)}(!h||!k)&&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:k,mintAUseSOLBalance:P,mintBUseSOLBalance:w,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:k},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,P=c.useSOLBalance&&e.mintA.address===Z.toBase58(),w=c.useSOLBalance&&e.mintB.address===Z.toBase58(),T;!r||r.equals(new O(0))?T=n.toString()===e.mintB.address?St.add(new Rt(1)):Kt.sub(new Rt(1)):T=pe.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=x,S&&b.addInstruction(S)}let k;if(!k){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=x,S&&b.addInstruction(S)}(!h||!k)&&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:k,mintAUseSOLBalance:P,mintBUseSOLBalance:w,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Se.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:k},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=oi,lockAuth:d=br,clmmProgram:p=no}){var w,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)i?re(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 k,B;g[h.pubkey.toBase58()]=(B=(k=h==null?void 0:h.accountInfo)==null?void 0:k.owner)!=null?B:null});let P=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(v=>!v.liquidity.isZero()||v.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let k=h,B=o.useSOLBalance&&k.mintA.address===Z.toString(),x=o.useSOLBalance&&k.mintB.address===Z.toString(),S=f[k.mintA.address];if(!S)if(B){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new j(k.mintA.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:i,checkCreateATAOwner:r});S=v,R&&P.addInstruction(R)}else{let v=new j(k.mintA.address);S=this.scope.account.getAssociatedTokenAccount(v,new j(k.mintA.programId)),P.addInstruction({instructions:[wl(this.scope.ownerPubKey,S,this.scope.ownerPubKey,v,new j(k.mintA.programId))]})}let I=f[k.mintB.address];if(!I)if(x){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new j(k.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});I=v,R&&P.addInstruction(R)}else{let v=new j(k.mintB.address);I=this.scope.account.getAssociatedTokenAccount(v,new j(k.mintB.programId)),P.addInstruction({instructions:[wl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,v,new j(k.mintB.programId))]})}f[k.mintA.address]=S,f[k.mintB.address]=I;let C=[];for(let v of k.rewardDefaultInfos){let R=o.useSOLBalance&&v.mint.address===Z.toString(),M=f[v.mint.address];if(!M){let{account:G,instructionParams:Y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(v.mint.programId),mint:new j(v.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:i});M=G,Y&&P.addInstruction(Y)}f[v.mint.address]=M,C.push(M)}let N=await this.getClmmPoolKeys(k.id),L=[];for(let v=0;v<N.rewardInfos.length;v++)L.push({poolRewardVault:new j(N.rewardInfos[v].vault),ownerRewardVault:C[v],rewardMint:new j(N.rewardInfos[v].mint.address)});for(let v of t[h.id]){let R=(w=n==null?void 0:n[h.id])==null?void 0:w[v.nftMint.toBase58()];if(R){let M=re(this.scope.ownerPubKey,R.lockNftMint,Ni).publicKey,G=oe.getTickArrayStartIndexByTick(v.tickLower,N.config.tickSpacing),Y=oe.getTickArrayStartIndexByTick(v.tickUpper,N.config.tickSpacing),{publicKey:J}=Ie(new j(N.programId),R.poolId,G),{publicKey:ee}=Ie(new j(N.programId),R.poolId,Y),{publicKey:ie}=ln(new j(N.programId),R.poolId,v.tickLower,v.tickUpper),de=Vo(m,R.lockNftMint).publicKey,ne=Se.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:de,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:M,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:ie,vaultA:new j(N.vault.A),vaultB:new j(N.vault.B),tickArrayLower:J,tickArrayUpper:ee,userVaultA:S,userVaultB:I,mintA:new j(N.mintA.address),mintB:new j(N.mintB.address),rewardAccounts:L,exTickArrayBitmap:et(p,R.poolId).publicKey});P.addInstruction({instructions:[ne],instructionTypes:[z.ClmmHarvestLockPosition],lookupTableAddress:N.lookupTableAccount?[N.lookupTableAccount]:[]})}else{let M=Se.decreaseLiquidityInstructions({poolInfo:k,poolKeys:N,ownerPosition:v,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:S,tokenAccountB:I,rewardAccounts:C},liquidity:new Rt(0),amountMinA:new Rt(0),amountMinB:new Rt(0),nft2022:(T=g[v.nftMint.toBase58()])==null?void 0:T.equals(Qn)});P.addInstruction(M)}}}return c===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ki(e).publicKey);return t?tl.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=no}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new Rt(1))).map(r=>Ct(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=_o.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=oi}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Rt(1))).map(c=>Vo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=nl.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=_o.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=po.decode(r.accountInfo.data),c=pe.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(V({},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()]=Jc.decode(c.accountInfo.data))});let r=await ve.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:Tt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ni.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?zn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:Tt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ni.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(V({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await ve.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 xo({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=Zc(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Al.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Al.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(V({},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:Tt({address:m.tokenMint.toBase58(),programId:Ni.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 Mf,NATIVE_MINT as Do,TOKEN_PROGRAM_ID as Lt,createAssociatedTokenAccountIdempotentInstruction as Zr}from"@solana/spl-token";import kl from"bn.js";import Hr from"bn.js";function Ma(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function hf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Ma(s,e).gt(vi)&&(t=t.add(new Hr(1))),[t,e]}var vi=new Hr(0),Mi=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]=hf(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 Ma(e.mul(n),t).gt(vi)&&r.gt(vi)&&(r=r.add(new Hr(1))),Ma(e.mul(o),t).gt(vi)&&a.gt(vi)&&(a=a.add(new Hr(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import Tf from"bn.js";var Et=class{static tradingFee(e,t){return Jo(e,t,Vt)}static protocolFee(e,t){return dr(e,t,Vt)}static fundFee(e,t){return dr(e,t,Vt)}static creatorFee(e,t){return Jo(e,t,Vt)}static splitCreatorFee(e,t,n){return dr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Vt),o=Vt.sub(t);return n.add(o).sub(new Tf(1)).div(o)}};var Fi=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 kl(0),l=Et.tradingFee(e,o),m;c?(u=Et.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=Et.protocolFee(l,r),p=Et.protocolFee(l,a),f=Mi.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Et.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 kl(0),m;if(c)m=e;else{let b=Et.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Mi.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Et.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=Et.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=Et.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=Et.protocolFee(u,r),y=Et.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:n.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import je from"bn.js";import{PublicKey as _i,TransactionInstruction as Rn,Keypair as Nf,SystemProgram as _a}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qr,TOKEN_2022_PROGRAM_ID as Ea,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";var If=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),kS=Buffer.from("amm_config","utf8"),Bf=Buffer.from("pool","utf8"),xf=Buffer.from("pool_lp_mint","utf8"),Sf=Buffer.from("pool_vault","utf8"),Kf=Buffer.from("observation","utf8"),Cf=Buffer.from("permission","utf8");function wo(s){return be([If],s)}function Fa(s,e,t,n){return be([Bf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function Rf(s,e){return be([xf,e.toBuffer()],s)}function hl(s,e,t){return be([Sf,e.toBuffer(),t.toBuffer()],s)}function ko(s,e){return be([Kf,e.toBuffer()],s)}function Va({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=wo(e).publicKey,r=s||Fa(e,t,n,o).publicKey,a=Rf(e,r).publicKey,c=hl(e,r,n).publicKey,u=hl(e,r,o).publicKey,l=ko(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Lf=Buffer.from("locked_liquidity","utf8");function Vi(s,e){return be([Lf,e.toBuffer()],s)}function Tl(s,e){return be([Cf,e.toBuffer()],s)}var Of=he("Raydium_cpmm"),Ln={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 Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountMaxA"),A("amountMaxB"),A("openTime")]),h=Fa(s,t,i,r).publicKey,k=[{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:Cn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1},{pubkey:xs,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1}],B=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:P,openTime:w},B),new Rn({keys:k,programId:s,data:Buffer.from([...Ln.initialize,...B])})}function Bl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([A("lpAmount"),A("amountMaxA"),A("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:Cn,isSigner:!1,isWritable:!1},{pubkey:Ea,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 Of.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Rn({keys:b,programId:s,data:Buffer.from([...Ln.deposit,...g])})}function xl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([A("lpAmount"),A("amountMinA"),A("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:Cn,isSigner:!1,isWritable:!1},{pubkey:Ea,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:En,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Rn({keys:b,programId:s,data:Buffer.from([...Ln.withdraw,...g])})}function Wo(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([A("amountIn"),A("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}],P=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},P),new Rn({keys:g,programId:s,data:Buffer.from([...Ln.swapBaseInput,...P])})}function Sl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([A("amountInMax"),A("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}],P=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},P),new Rn({keys:g,programId:s,data:Buffer.from([...Ln.swapBaseOutput,...P])})}async function Kl(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=Nf.generate();r.push(g),u=g.publicKey}let{publicKey:l}=re(o,u,Cn),{publicKey:m}=xn(u),{publicKey:d}=Vi(s.lockProgram,u),{publicKey:p}=re(e.wallet,c,Cn),{publicKey:f}=re(s.lockAuthProgram,c,Cn),y=vf({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:[z.CpmmLockLp],lookupTableAddress:[]}}function vf({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:ft,isSigner:!1,isWritable:!1},{pubkey:_a.programId,isSigner:!1,isWritable:!1},{pubkey:Cn,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],P=_([A("lpAmount"),He("withMetadata")]),w=Buffer.alloc(P.span);P.encode({lpAmount:y,withMetadata:b},w);let T=Buffer.from([...Ln.lockCpLiquidity,...w]);return new Rn({keys:g,programId:s,data:T})}function Wa({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:io,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Ju,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:Cn,isSigner:!1,isWritable:!1},{pubkey:Ea,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1}],P=_([A("lpFeeAmount")]),w=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},w);let T=Buffer.from([...Ln.collectCpFee,...w]);return new Rn({keys:g,programId:s,data:T})}function Da(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:Qr,isSigner:!1,isWritable:!1},{pubkey:_a.programId,isSigner:!1,isWritable:!1}];return new Rn({keys:p,programId:s,data:Ln.collectCreatorFee})}function Cl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h,k){let B=_([A("amountA"),A("amountB"),A("openTime"),E("feeOn")]),x=[{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:P,isSigner:!1,isWritable:!0},{pubkey:Cn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1},{pubkey:_a.programId,isSigner:!1,isWritable:!1}],S=Buffer.alloc(B.span);return B.encode({amountA:w,amountB:T,openTime:h,feeOn:k},S),new Rn({keys:x,programId:s,data:Buffer.from([...Ln.initializeWithPermission,...S])})}var Rl=_([Le(8),E("bump"),He("disableCreatePool"),Gt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),F("protocolOwner"),F("fundOwner"),A("creatorFeeRate"),Q(A(),15)]),jr=_([Le(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),A("epoch"),E("feeOn"),He("enableCreatorFee"),Q(E(),6),A("creatorFeesMintA"),A("creatorFeesMintB"),Q(A(),28)]),vS=_([Le(8),F("configId"),Q(A(),30)]);var Ei=class extends qe{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=jr.decode(d.accountInfo.data);o[String(e[m])]=q(V({},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]]=Rl.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 je(Mf.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(V({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(f.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(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(V({},n),{[o]:q(V({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:wo(i.programId).publicKey,mintA:Tt({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:Tt({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 xo({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=Tt({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=Tt({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=Tt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Lt.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 O(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new O(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:wo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:ko(t.programId,new U(e)).publicKey.toBase58()},rpcData:t,computePoolInfo:q(V({},t),{id:new U(e),configInfo:t.configInfo,version:7,authority:wo(t.programId).publicKey,mintA:o,mintB:i})}}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=Xe(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var M,G,Y;let b=i.feePayer||((M=this.scope.owner)==null?void 0:M.publicKey),g=new je(new U(p.mintA.address).toBuffer()).lte(new je(new U(p.mintB.address).toBuffer())),[P,w]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],k=i.useSOLBalance&&P.address===Do.toBase58(),B=i.useSOLBalance&&w.address===Do.toBase58(),[x,S]=[new U(P.address),new U(w.address)],I=this.createTxBuilder(d),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:x,tokenProgram:P.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:b,amount:T}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:r,checkCreateATAOwner:a});I.addInstruction(N||{});let{account:L,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({mint:new U(w.address),tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:b,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(I.addInstruction(v||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let R=Va({poolId:e,programId:t,configId:new U(u.id),mintA:x,mintB:S});return I.addInstruction({instructions:[Il(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,x,S,R.lpMint,C,L,re(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((G=P.programId)!=null?G:Lt),new U((Y=w.programId)!=null?Y:Lt),R.observationId,T,h,o)],instructionTypes:[z.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(V({},R),{mintA:P,mintB:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:w}=a||this.computePairAmount({poolInfo:q(V({},t),{lpAmount:new O(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new lt(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=w.amount,h=t.mintA.address===Do.toString(),k=t.mintB.address===Do.toString(),B=this.createTxBuilder(d),[x,S]=[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});B.addInstruction(C||{});let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:y});B.addInstruction(L||{}),!I&&!N&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let v=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),J=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:v,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=J,M=Xe(J,["tokenAccount"]);B.addInstruction(M);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),Y=new lt(new je(1)).sub(r);return B.addInstruction({instructions:[Bl(new U(t.programId),this.scope.ownerPubKey,new U(G.authority),new U(t.id),R,I,N,new U(G.vault.A),new U(G.vault.B),x,S,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:Y.mul(g).quotient,i?P.amount:T,i?T:P.amount)],instructionTypes:[z.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.addTipInstruction(u),B.versionBuild({txVersion:m,lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:void 0})}async withdrawLiquidity(e){var M,G;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 lt(new je(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]=[Fe(p,t.mintA.extensions.feeConfig,y,!1),Fe(f,t.mintB.extensions.feeConfig,y,!1)],{account:P}=this.scope,w=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],k=T.equals(Z),B=h.equals(Z),x,S,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(k&&l),associatedOnly:!k,checkCreateATAOwner:!1});x=I,C&&w.addInstruction(C);let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(B&&l),associatedOnly:!B,checkCreateATAOwner:!1});S=N,L&&w.addInstruction(L),(!x||!S)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let v=await P.getCreatedTokenAccount({mint:new U(t.lpMint.address)});v||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return w.addInstruction({instructions:[xl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),v,x,S,new U(R.vault.A),new U(R.vault.B),T,h,new U(t.lpMint.address),o,p.sub((M=b.fee)!=null?M:new je(0)),f.sub((G=g.fee)!=null?G:new je(0)))],instructionTypes:[z.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),w.addCustomComputeBudget(r),w.addTipInstruction(a),w.versionBuild({txVersion:c,lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:void 0})}async swap(e){var C,N,L,v,R,M;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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[P,w]=[new U(t.mintA.address),new U(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new je((1+c)*1e4)).div(new je(1e4)):a.outputAmount=a.outputAmount.mul(new je((1-c)*1e4)).div(new je(1e4));let T=t.mintA.address===Z.toBase58(),h=t.mintB.address===Z.toBase58(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new U((C=t.mintA.programId)!=null?C:Lt),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:p||this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});B&&g.addInstruction(B);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:w,tokenProgram:new U((N=t.mintB.programId)!=null?N:Lt),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:p||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});S&&g.addInstruction(S),(!k||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:x,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?Sl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:x,o?x:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:Lt),new U((M=t[o?"mintB":"mintA"].programId)!=null?M:Lt),o?P:w,o?w:P,ko(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Wo(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:x,o?x:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((L=t[o?"mintA":"mintB"].programId)!=null?L:Lt),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:Lt),o?P:w,o?w:P,ko(new U(t.programId),new U(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?z.CpmmSwapBaseOut:z.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d,lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:void 0})}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 Kl({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:gr,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,lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:void 0})}async harvestLockLp(e){var N;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=gr,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),P,w,{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});P=T,h&&p.addInstruction(h);let{account:k,instructionParams:B}=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});w=k,B&&p.addInstruction(B),(!P||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:w});let x=(N=e.poolKeys)!=null?N:await this.getCpmmPoolKeys(t.id),{publicKey:S}=re(d,o,Lt),{publicKey:I}=Vi(i,o),{publicKey:C}=re(r,new U(t.lpMint.address),Lt);return p.addInstruction({instructions:[Wa({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:S,lockPda:I,poolId:new U(t.id),mintLp:new U(x.mintLp.address),userVaultA:P,userVaultB:w,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.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:[z.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l,lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:void 0})}async harvestMultiLockLp(e){var p;let{lockInfo:t,programId:n=gr,authProgram:o=Pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={},d=[];for(let f of t){let{poolInfo:y,lpFeeAmount:b,nftMint:g}=f;if(b.isZero())continue;let[P,w]=[new U(y.mintA.address),new U(y.mintB.address)],T=P.equals(Z),h=w.equals(Z),k=m[y.mintA.address],B=m[y.mintB.address];if(!k)if(T){let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new U(y.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});k=N,L&&l.addInstruction(L),m[y.mintA.address]=N}else{let N=new U(y.mintA.address);k=this.scope.account.getAssociatedTokenAccount(N,new U(y.mintA.programId)),l.addInstruction({instructions:[Zr(this.scope.ownerPubKey,k,this.scope.ownerPubKey,N,new U(y.mintA.programId))]}),m[y.mintA.address]=k}if(!B)if(h){let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new U(y.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});B=N,L&&l.addInstruction(L),m[y.mintB.address]=N}else{let N=new U(y.mintB.address);B=this.scope.account.getAssociatedTokenAccount(N,new U(y.mintB.programId)),l.addInstruction({instructions:[Zr(this.scope.ownerPubKey,B,this.scope.ownerPubKey,N,new U(y.mintB.programId))]}),m[y.mintB.address]=B}(!k||!B)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:k,tokenAccountB:B});let x=(p=f.poolKeys)!=null?p:await this.getCpmmPoolKeys(y.id);x.lookupTableAccount&&d.push(x.lookupTableAccount);let{publicKey:S}=re(u,g,Lt),{publicKey:I}=Vi(n,g),{publicKey:C}=re(o,new U(y.lpMint.address),Lt);l.addInstruction({instructions:[Wa({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:g,nftAccount:S,lockPda:I,poolId:new U(y.id),mintLp:new U(x.mintLp.address),userVaultA:k,userVaultB:B,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.vault.B),mintA:P,mintB:w,lockLpVault:C,lpFeeAmount:b,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[z.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:r,lookupTableAddress:d}):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=Xe(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var G,Y,J;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((G=this.scope.owner)==null?void 0:G.publicKey),P=new je(new U(f.mintA.address).toBuffer()).lte(new je(new U(f.mintB.address).toBuffer())),[w,T]=P?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,k]=P?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],B=i.useSOLBalance&&w.address===Do.toBase58(),x=i.useSOLBalance&&T.address===Do.toBase58(),[S,I]=[new U(w.address),new U(T.address)],C=this.createTxBuilder(d),{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});C.addInstruction(L||{});let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:k}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),N===void 0||v===void 0)throw Error("you don't has some token account");let M=Va({poolId:e,programId:t,configId:new U(u.id),mintA:S,mintB:I});return C.addInstruction({instructions:[Cl(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),M.authority,M.poolId,S,I,M.lpMint,N,v,re(this.scope.ownerPubKey,M.lpMint).publicKey,M.vaultA,M.vaultB,n,new U((Y=w.programId)!=null?Y:Lt),new U((J=T.programId)!=null?J:Lt),M.observationId,Tl(t,this.scope.ownerPubKey).publicKey,h,k,o,p)],instructionTypes:[z.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(V({},M),{mintA:w,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=io,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:[Zr(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),Zr(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Da(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,poolKeyList:t,programId:n=io,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=r||this.scope.ownerPubKey,c=this.createTxBuilder(a),u={},l=t!=null?t:[];if(!l.length){let d=e.map(b=>b.id),p=95,f=[];for(let b=0;b<d.length;b+=p)f.push(d.slice(b,b+p));l=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let m=l.reduce((d,p)=>q(V({},d),{[p.id]:p}),{});for(let d of e){let p=m[d.id]||await this.getCpmmPoolKeys(d.id),[f,y,b,g]=[new U(d.mintA.address),new U(d.mintB.address),new U(d.mintA.programId),new U(d.mintB.programId)],P=u[d.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),w=u[d.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);u[d.mintA.address]=P,u[d.mintB.address]=w,c.addInstruction({instructions:[Da(n,this.scope.ownerPubKey,new U(p.authority),new U(p.id),new U(p.config.id),new U(p.vault.A),new U(p.vault.B),f,y,P,w,b,g)],instructionTypes:[]})}return o===0?c.sizeCheckBuildV0({computeBudgetConfig:i,lookupTableAddress:l.map(d=>d.lookupTableAccount).filter(Boolean),insCountLimit:6}):c.sizeCheckBuild({computeBudgetConfig:i})}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?Fi.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):Fi.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 O(c.outputAmount.toString()).div(c.inputAmount.toString()),l=c.outputAmount.mul(new je((1-o)*1e4)).div(new je(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),swapResult:c}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var T,h,k,B,x,S,I,C,N;let c=1-Number(i.toSignificant())/100,u=new je(new O(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Fe(u,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),m=u.sub((T=l.fee)!=null?T:new je(0)),d=new je(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(h=l.fee)==null?void 0:h.toString())!=null?k: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:Ft,fee:void 0,expirationTime:void 0};if(!m.isZero()){let L=Ff(f,t,n,d);this.logDebug("lpAmountData:",{amountA:L.amountA.toString(),amountB:L.amountB.toString()}),y=Fe(L[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new lt(new je(1)).add(i),g=new lt(new je(1)).sub(i),P=Fe(b.mul(y.amount.sub((B=y.fee)!=null?B:new je(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),w=Fe(g.mul(y.amount.sub((x=y.fee)!=null?x:new je(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(I=(S=y.fee)==null?void 0:S.toString())!=null?I:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(N=(C=P.fee)==null?void 0:C.toString())!=null?N:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:P,minAnotherAmount:w,liquidity:f}}};function Ff(s,e,t,n){let o=s.mul(e).div(n);!o.isZero()&&!s.mul(e).mod(n).isZero()&&(o=o.add(new je(1)));let i=s.mul(t).div(n);return!i.isZero()&&!s.mul(t).mod(n).isZero()&&(i=i.add(new je(1))),{amountA:o,amountB:i}}import{PublicKey as me,SystemProgram as Yl}from"@solana/web3.js";import{createTransferInstruction as Hl,TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as eo,createAssociatedTokenAccountIdempotentInstruction as Xo,createSyncNativeInstruction as Ql,createTransferCheckedInstruction as ty}from"@solana/spl-token";import Ce from"bn.js";var Ll={[Ns.toBase58()]:3},Nl={3:Ns};var qa=_([Le(5),Le(8),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Le(7)]),Ol={3:qa};import{PublicKey as vl}from"@solana/web3.js";var $r=he("Serum"),Jr=class{static getProgramId(e){let t=Nl[e];return t||$r.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ll[t];return n||$r.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ol[e];return t||$r.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=vl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return $r.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:vl.default,nonce:o}}};import{PublicKey as ye,SystemProgram as Vf,TransactionInstruction as _f}from"@solana/web3.js";import jn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ef,TOKEN_2022_PROGRAM_ID as Wf,TOKEN_PROGRAM_ID as Df}from"@solana/spl-token";function qf(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var k;let y=[],b=[K({pubkey:Df,isWritable:!1}),K({pubkey:Wf,isWritable:!1}),K({pubkey:Ef,isWritable:!1}),K({pubkey:Vf.programId,isWritable:!1}),K({pubkey:e,isSigner:!0})];b.push(K({pubkey:t})),b.push(K({pubkey:o}));let g=[c,u],P=[l,m],w=[i,r,a];for(let B=0;B<g.length;B++){let x=g[B],S=w[B]===x.mintA.address;if(b.push(K({pubkey:new ye(x.programId),isWritable:!1})),B===g.length-1?b.push(K({pubkey:o})):b.push(K({pubkey:n})),b.push(K({pubkey:new ye(w[B])})),b.push(K({pubkey:new ye(w[B+1])})),x.version===6){let I=P[B];b.push(K({pubkey:new ye(I.config.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(S?I.vault.A:I.vault.B)})),b.push(K({pubkey:new ye(S?I.vault.B:I.vault.A)})),b.push(K({pubkey:new ye(x.observationId)})),b.push(K({pubkey:En})),b.push(K({pubkey:et(new ye(x.programId),new ye(x.id)).publicKey})),y.push(Uf(x.sqrtPriceX64.toString(),S));for(let C of(k=f[B])!=null?k:[])b.push(K({pubkey:new ye(C)}))}else if(x.version===5){let I=P[B];b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.authority),isWritable:!1})),b.push(K({pubkey:new ye(I.marketProgramId)})),b.push(K({pubkey:new ye(I.marketAuthority)})),b.push(K({pubkey:Zu,isWritable:!1})),b.push(K({pubkey:new ye(I.openOrders)})),b.push(K({pubkey:new ye(I.vault.A)})),b.push(K({pubkey:new ye(I.vault.B)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.marketId)})),b.push(K({pubkey:new ye(I.marketBids)})),b.push(K({pubkey:new ye(I.marketAsks)})),b.push(K({pubkey:new ye(I.marketEventQueue)})),b.push(K({pubkey:new ye(I.marketBaseVault)})),b.push(K({pubkey:new ye(I.marketQuoteVault)}))}else if(x.version===4){let I=P[B],C=x.status!==1;b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.authority),isWritable:!1})),b.push(K({pubkey:new ye(C?I.id:I.marketProgramId)})),b.push(K({pubkey:new ye(C?I.id:I.marketAuthority)})),b.push(K({pubkey:new ye(C?I.id:I.openOrders)})),b.push(K({pubkey:new ye(I.vault.A)})),b.push(K({pubkey:new ye(I.vault.B)})),b.push(K({pubkey:new ye(C?I.id:I.marketId)})),b.push(K({pubkey:new ye(C?I.id:I.marketBids)})),b.push(K({pubkey:new ye(C?I.id:I.marketAsks)})),b.push(K({pubkey:new ye(C?I.id:I.marketEventQueue)})),b.push(K({pubkey:new ye(C?I.id:I.marketBaseVault)})),b.push(K({pubkey:new ye(C?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=P[B];b.push(K({pubkey:new ye(I.authority)})),b.push(K({pubkey:new ye(I.config.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(S?I.vault.A:I.vault.B)})),b.push(K({pubkey:new ye(S?I.vault.B:I.vault.A)})),b.push(K({pubkey:new ye(x.observationId)}))}else throw Error("pool type error")}let T=_([E("insId"),A("amountIn"),A("amountOut"),Q(le(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new _f({keys:b,programId:s,data:h})}function Uf(s,e){if(s)if(e){let t=new jn(s).div(new jn(25));return t.gt(Or)?t:Or}else{let t=new jn(s).mul(new jn(25));return t.lt(vr)?t:vr}else return e?Or:vr}function Ml({routeProgram:s,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,l,m,d;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],f=yt(p),y=t.equals(f.mintA.address)?St.add(zt):Kt.sub(zt);return Se.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:f.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:f.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 jn(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],f=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Wo(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,f?p.vaultA:p.vaultB,f?p.vaultB:p.vaultA,f?p.mintProgramA:p.mintProgramB,f?p.mintProgramB:p.mintProgramA,new ye(p[f?"mintA":"mintB"].address),new ye(p[f?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[f?z.CpmmSwapBaseIn:z.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?Ur({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new jn(0)),fixedSide:"in"}):qr({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new jn(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?z.AmmV5SwapBaseIn:z.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=n.poolInfo[0],f=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[qf(s,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,f,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((d=(m=n.minAmountOut.fee)==null?void 0:m.raw)!=null?d:new jn(0)),n.remainingAccounts)],instructionTypes:[z.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(g=>g!==void 0),address:{}}}else throw Error("route type error")}import{ASSOCIATED_TOKEN_PROGRAM_ID as es,TOKEN_2022_PROGRAM_ID as $f,TOKEN_PROGRAM_ID as Ya}from"@solana/spl-token";import{SystemProgram as Qt,TransactionInstruction as Wt}from"@solana/web3.js";import Go from"bn.js";var Zn=_([A(),A("epoch"),E("curveType"),Gt("index"),A("migrateFee"),A("tradeFeeRate"),A("maxShareFeeRate"),A("minSupplyA"),A("maxLockRate"),A("minSellRateA"),A("minMigrateRateA"),A("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),Q(A(),16)]),Gf=_([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),A("startTime"),A("totalAllocatedShare")]),mn=_([A(),A("epoch"),E("bump"),E("status"),E("mintDecimalsA"),E("mintDecimalsB"),E("migrateType"),A("supply"),A("totalSellA"),A("virtualA"),A("virtualB"),A("realA"),A("realB"),A("totalFundRaisingB"),A("protocolFee"),A("platformFee"),A("migrateFee"),Gf.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),A("platformVestingShare"),Q(E(),54)]),cC=_([A(),A("epoch"),F("poolId"),F("beneficiary"),A("claimedAmount"),A("tokenShareAmount"),Q(A(),8)]),Fl=_([E("migrateType"),E("migrateCpmmFeeOn"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod")]),Xf=_([A("epoch"),E("index"),F("configId"),Fl.replicate("bondingCurveParam"),Q(A(),50)]),dn=_([A(),A("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),Q(E(),64,"name"),Q(E(),256,"web"),Q(E(),256,"img"),F("cpConfigId"),A("creatorFeeRate"),F("transferFeeExtensionAuth"),F("platformVestingWallet"),A("platformVestingScale"),F("platformCpCreator"),Q(E(),108),gc(Xf,"platformCurve")]);var zf=Buffer.from("vault_auth_seed","utf8"),fC=Buffer.from("global_config","utf8"),Yf=Buffer.from("pool_vesting","utf8"),Hf=Buffer.from("platform_config","utf8"),Qf=Buffer.from("platform_fee_vault_auth_seed","utf8"),jf=Buffer.from("creator_fee_vault_auth_seed","utf8"),Zf=Buffer.from("platform_global_access","utf8");function Nt(s){return be([zf],s)}function qo(s,e,t){return be([fa,e.toBuffer(),t.toBuffer()],s)}function Ua(s,e,t){return be([ya,e.toBuffer(),t.toBuffer()],s)}function ho(s){return be([Buffer.from("__event_authority","utf8")],s)}function Ga(s,e){return be([Hf,e.toBuffer()],s)}function Uo(s,e,t){return be([Yf,e.toBuffer(),t.toBuffer()],s)}function pn(s,e,t){return be([e.toBuffer(),t.toBuffer()],s)}function Xa(s){return be([Qf],s)}function fn(s,e,t){return be([e.toBuffer(),t.toBuffer()],s)}function za(s){return be([jf],s)}function Vl(s,e,t){return be([Zf,e.toBuffer(),t.toBuffer()],s)}var Dt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106])};function _l(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h){let k=_([E("decimals"),_t("name"),_t("symbol"),_t("uri")]),B=_([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),E("cpmmCreatorFeeOn")]),x=_([E("index"),A("supply"),A("totalFundRaisingB"),E("migrateType")]),S=_([E("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),E("migrateType")]),I=[{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:Ya,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),N=Buffer.alloc(B.span),L=Buffer.alloc(b.type==="ConstantCurve"?S.span:x.span);return k.encode({decimals:d,name:p,symbol:f,uri:y},C),b.type==="ConstantCurve"?S.encode(q(V({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?x.encode(q(V({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&x.encode(q(V({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),B.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:w,cpmmCreatorFeeOn:T},N),new Wt({keys:I,programId:s,data:Buffer.from([...Dt.initializeV2,...C,...L,...N])})}function El(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h){let k=_([E("decimals"),_t("name"),_t("symbol"),_t("uri")]),B=_([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),_([Gt("transferFeeBasePoints"),A("maxinumFee")]).replicate("transferFeeExtensionParams")]),x=_([E("index"),A("supply"),A("totalFundRaisingB"),E("migrateType")]),S=_([E("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),E("migrateType")]),I=[{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:$f,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),N=Buffer.alloc(B.span),L=Buffer.alloc(y.type==="ConstantCurve"?S.span:x.span);return k.encode({decimals:m,name:d,symbol:p,uri:f},C),y.type==="ConstantCurve"?S.encode(q(V({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?x.encode(q(V({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&x.encode(q(V({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),B.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:P,cpmmCreatorFeeOn:w,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new Go(0)}},N),new Wt({keys:I,programId:s,data:Buffer.from([...Dt.initializeWithToken2022,...C,...L,...N])})}function Wi(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountB"),A("minAmountA"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.buyExactIn,...k])})}function Wl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountA"),A("maxAmountB"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.buyExactOut,...k])})}function ts(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountA"),A("minAmountB"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.sellExactIn,...k])})}function Dl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountB"),A("maxAmountA"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.sellExactOut,...k])})}function Ha(s,e,t,n,o,i,r,a,c){let u=_([]),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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:es,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Wt({keys:l,programId:s,data:Buffer.from([...Dt.claimVestedToken,...m])})}function Qa(s,e,t,n,o,i){let r=_([A("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:Qt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Wt({keys:a,programId:s,data:Buffer.from([...Dt.createVestingAccount,...c])})}function ja(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:Qt.programId,isSigner:!1,isWritable:!0},{pubkey:es,isSigner:!1,isWritable:!0}];return new Wt({keys:u,programId:s,data:Dt.claimPlatformFee})}function ql(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),_t("name"),_t("web"),_t("img"),A("creatorFeeRate"),A("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+4*3);return y.encode({platformScale:c.platformScale,creatorScale:c.creatorScale,burnScale:c.burnScale,feeRate:u,name:m,web:d,img:p,creatorFeeRate:l,platformVestingScale:f},g),new Wt({keys:b,programId:s,data:Buffer.from([...Dt.createPlatformConfig,...g])})}function Ul(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("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=_([E("index"),A("platformScale"),A("creatorScale"),A("burnScale")]);i=Buffer.alloc(r.span),r.encode(V({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=_([E("index"),A("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("index"),_t("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("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("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),_t("name"),_t("web"),_t("img"),F("transferFeeExtensionAuth"),A("creatorFeeRate"),A("platformVestingScale"),F("platformVestingWallet")]);i=Buffer.alloc(1+32+32+32+8*5+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,platformVestingWallet:n.value.platformVestingWallet,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,platformVestingScale:n.value.platformVestingScale},i)}else if(n.type==="updateVestingWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:9,value:n.value},i)}else if(n.type==="updatePlatformVestingScale"){let r=_([E("index"),A("value")]);i=Buffer.alloc(r.span),r.encode({index:10,value:n.value},i)}else if(n.type==="updatePlatformCpCreator"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:11,value:n.value},i)}else throw Error("updateInfo params type error");return new Wt({keys:o,programId:s,data:Buffer.from([...Dt.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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:es,isSigner:!1,isWritable:!1}];return new Wt({keys:c,programId:s,data:Dt.claimPlatformFeeFromVault})}function $a(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:es,isSigner:!1,isWritable:!1}];return new Wt({keys:a,programId:s,data:Dt.claimCreatorFee})}var BC=new Go("18446744073709551615");function Gl(s,e,t,n,o,i){let r=[{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:i,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1}];return new Wt({keys:r,programId:s,data:Dt.createPlatformVestingAccount})}import ns from"bn.js";var $n=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 os=class extends $n{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new O(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 ns(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new ns(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 ns(0))||m.lt(new ns(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 ro(o,i)}};import tn from"bn.js";import is from"bn.js";var rs=class extends $n{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new O(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 is(0)))throw Error("invalid input 1");let a=new is(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new is(0))||t.lt(new is(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 ro(o,n)}};import qt from"bn.js";import Xl from"bn.js";var Di=class{static _multipler(e){return new O(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new O(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 Xl(o.mul(this._Q64).toFixed(0))}};Di._Q64=new O(new Xl(1).shln(64).toString());var ss=class extends $n{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new O(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualA.mul(e.realA).toString()).div(Di._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new O(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 O(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 qt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new qt(3)).sub(i),u=t.mul(new qt(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new qt(2)).mul(at).div(l);if(!m.gt(new qt(0)))throw Error("a need gt 0");if(!Pi.gt(m))throw Error("a need lt u64 max");if(m.lt(new qt(0))||u.lt(new qt(0)))throw Error("invalid input 0");return{a:m,b:new qt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new qt(2).mul(n).mul(at).div(e.virtualA);return new qt(new O(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 ro(e.virtualA.mul(o),new qt(2).mul(at)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=ro(e.virtualA.mul(o),new qt(2).mul(at));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new qt(2).mul(n).mul(at).div(e.virtualA),i=new qt(new O(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var gt=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(V({},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,P=f,w=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(w),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:w,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});P=P.add(k.amountA.amount),w=w.add(k.amountB);let B=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:w},decimalA:c,decimalB:u,curveType:e});y.push({price:B,totalSellSupply:new O(P.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(Vt).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(Vt);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(Vt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new tn(new O(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,P;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),P=g.sub(T)}else b=f,g=t,P=m;let w=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Os(b,c,u),amountB:g,splitFee:w}}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=vs(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),P=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:P}}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=Os(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=gt.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:vs(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,Vt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Vt),o=Vt.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 os;case 1:return rs;case 2:return ss}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as To,TOKEN_PROGRAM_ID as We,createAssociatedTokenAccountIdempotentInstruction as Ut,createSyncNativeInstruction as Jf,getTransferFeeConfig as as,unpackMint as us}from"@solana/spl-token";import ue from"bn.js";import{PublicKey as zl,SystemProgram as ey}from"@solana/web3.js";var cs={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 zl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ue(0),cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)}},Jn=new ue(1e4);var qi=class extends qe{constructor(e){super(e)}async createLaunchpad(N){var L=N,{programId:e=st,authProgramId:t,platformId:n=cs.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:P,slippage:w,associatedOnly:T=!0,checkCreateATAOwner:h=!1,extraSigners:k,token2022:B,transferFeeExtensionParams:x,creatorFeeOn:S=0,platformConfigAccess:I}=L,C=Xe(L,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","platformConfigAccess"]);var ou,iu,ru,su,au,uu,cu,lu,mu,du,pu;let v=this.createTxBuilder(b);t=t!=null?t:Nt(e).publicKey,B=!!x,B&&(l="cpmm");let R=d;if(!R&&m){let wn=await this.scope.connection.getAccountInfo(m);wn&&(R=Zn.decode(wn.data))}R||this.logAndCreateError("config not found");let M=R.mintB,G=R.curveType,{publicKey:Y}=qo(e,o,M),{publicKey:J}=Ua(e,Y,o),{publicKey:ee}=Ua(e,Y,M),{publicKey:ie}=xn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${M.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 ne=(await this.scope.api.fetchLaunchConfigs()).find(wn=>wn.key.pubKey===m.toBase58()),$=(ou=C==null?void 0:C.supply)!=null?ou:new ue(ne.defaultParams.supplyInit),te=(iu=C==null?void 0:C.totalSellA)!=null?iu:new ue(ne.defaultParams.totalSellA),ke=(ru=C==null?void 0:C.totalFundRaisingB)!=null?ru:new ue(ne.defaultParams.totalFundRaisingB),Re=(su=C==null?void 0:C.totalLockedAmount)!=null?su:new ue(0),Te=await this.scope.connection.getAccountInfo(n);Te||this.logAndCreateError("platform id not found:",n.toString());let ot=dn.decode(Te.data),Ot=ot.platformVestingScale,it=ot.feeRate,Hi=gt.getCurve(R.curveType).getInitParam({supply:$,totalFundRaising:ke,totalSell:te,totalLockedAmount:Re,migrateFee:R.migrateFee}),Io;try{Io=await this.scope.token.getTokenInfo(M)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let jt={epoch:new ue(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(au=Io==null?void 0:Io.decimals)!=null?au:r,supply:$,totalSellA:te,mintA:new zl(o),mintB:M,virtualA:Hi.a,virtualB:Hi.b,realA:cs.realA,realB:cs.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:cs.protocolFee,platformFee:it,platformId:n,configId:m,vaultA:J,vaultB:ee,creator:this.scope.ownerPubKey,totalFundRaisingB:ke,vestingSchedule:{totalLockedAmount:Re,cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)},mintProgramFlag:B?1:0,cpmmCreatorFeeOn:S,platformVestingShare:Ot!=null?Ot:new ue(0)},Qi=gt.getCurve(R.curveType),{c:ji}=Qi.getInitParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalLockedAmount:Re,totalSell:R.curveType===0?jt.totalSellA:new ue(0),migrateFee:R.migrateFee});try{gt.checkParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalSell:ji,totalLockedAmount:Re,decimals:jt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(wn){this.logAndCreateError(`check create mint params failed, ${wn.message}`)}v.addInstruction({instructions:[B?El(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Y,o,M,J,ee,i,a,c,u||"https://",{type:G===0?"ConstantCurve":G===1?"FixedCurve":G===2?"LinearCurve":"ConstantCurve",totalSellA:te,migrateType:l,supply:$,totalFundRaisingB:ke},Re,(uu=C==null?void 0:C.cliffPeriod)!=null?uu:new ue(0),(cu=C==null?void 0:C.unlockPeriod)!=null?cu:new ue(0),S,x):_l(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Y,o,M,J,ee,ie,i,a,c,u||"https://",{type:G===0?"ConstantCurve":G===1?"FixedCurve":G===2?"LinearCurve":"ConstantCurve",totalSellA:te,migrateType:l,supply:$,totalFundRaisingB:ke},Re,(lu=C==null?void 0:C.cliffPeriod)!=null?lu:new ue(0),(mu=C==null?void 0:C.unlockPeriod)!=null?mu:new ue(0),S,I?Vl(e,n,m).publicKey:void 0)]});let Bo=B?await this.scope.connection.getEpochInfo():void 0,Bt=x?{epoch:BigInt((Bo==null?void 0:Bo.epoch)||0),maximumFee:BigInt((du=x==null?void 0:x.maxinumFee.toString())!=null?du:0),transferFeeBasisPoints:(pu=x==null?void 0:x.transferFeeBasePoints)!=null?pu:0}:void 0,Yo={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)}},ds;if(k!=null&&k.length&&v.addInstruction({signers:k}),!C.createOnly){let{builder:wn,extInfo:em}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:B?To:void 0,mintA:o,mintB:M,poolInfo:jt,buyAmount:g,minMintAAmount:P,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:it,slippage:w,associatedOnly:T,checkCreateATAOwner:h,skipCheckMintA:!Bt,transferFeeConfigA:Bt?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:Bt,newerTransferFee:Bt}:void 0,fromCreate:!0});v.addInstruction(V({},wn.AllTxData)),Yo=V({},em),ds=(this.scope.cluster==="devnet"||p===1)&&C.shareFeeReceiver?[wn.allInstructions[0]]:void 0}return v.addTipInstruction(y),p===0?v.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:Yo,splitIns:ds,address:q(V({},jt),{poolId:Y})}):v.sizeCheckBuild({computeBudgetConfig:f,swapInfo:Yo,splitIns:ds,address:q(V({},jt),{poolId:Y})})}async buyToken({programId:e=st,authProgramId:t,mintA:n,mintAProgram:o=We,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:P=!0,checkCreateATAOwner:w=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:k=!1}){var te,ke,Re;p.lte(new ue(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let B=this.createTxBuilder(d),{publicKey:x}=qo(e,n,i);t=t!=null?t:Nt(e).publicKey;let S=h;if(!k)if(S)o=To;else{let Te=await this.scope.connection.getAccountInfo(n);if(Te&&Te.owner.equals(To)){o=Te.owner;let ot=us(n,Te,o);S=as(ot)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),N=T&&C,L=N?this.scope.account.getAssociatedTokenAccount(i,We):null,v=C;if(B.addInstruction({instructions:[Ut(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...N?[Ut(this.scope.ownerPubKey,L,this.scope.ownerPubKey,i,We),ey.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L,lamports:BigInt(p.toString())}),Jf(L)]:[]]}),!N){let{account:Te,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:v?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!v,notUseTokenAccount:v,associatedOnly:v?!1:P,checkCreateATAOwner:w});Te&&(L=Te),B.addInstruction(ot||{})}L||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let Te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});Te||this.logAndCreateError("cannot found pool:",x.toBase58()),R=mn.decode(Te.data)}let M=a,G=await Ee(this.scope.connection,[M?void 0:R.configId,R.platformId].filter(Boolean).map(Te=>({pubkey:Te})));if(!M){let Te=G.find(ot=>ot.pubkey.equals(R.configId));(!Te||!Te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),M=Zn.decode(Te.accountInfo.data)}let Y=G.find(Te=>Te.pubkey.equals(R.platformId));(!Y||!Y.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let J=dn.decode(Y.accountInfo.data);c=c||J.feeRate;let ee=gt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:M.tradeFeeRate,platformFeeRate:c,curveType:M.curveType,shareFeeRate:b,creatorFeeRate:J.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),ie=new O(ee.amountA.amount.toString()).sub((ke=(te=ee.amountA.fee)==null?void 0:te.toString())!=null?ke:0),de=y?new O(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new O(1),ne=f!=null?f:y?new ue(ie.mul(de).toFixed(0)):ee.amountA.amount.sub((Re=ee.amountA.fee)!=null?Re:new ue(0));ee.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ee.amountA.toString()}, input ${i.toBase58()} amount: ${ee.amountB.toString()}`);let $=g?re(g,i,We).publicKey:void 0;return $&&B.addInstruction({instructions:[Ut(this.scope.ownerPubKey,$,g,i)]}),B.addInstruction({instructions:[Wi(e,this.scope.ownerPubKey,t,R.configId,R.platformId,x,I,L,R.vaultA,R.vaultB,n,i,o,We,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,ee.amountB.lt(p)?ee.amountB:p,ne,b,$)]}),B.addCustomComputeBudget(l),B.addTipInstruction(m),B.versionBuild({txVersion:u,extInfo:q(V({},ee),{decimalOutAmount:ie,minDecimalOutAmount:new O(ne.toString())})})}async buyTokenExactOut({programId:e=st,authProgramId:t,mintA:n,mintAProgram:o=We,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:P,associatedOnly:w=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ue(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let k=this.createTxBuilder(p),{publicKey:B}=qo(e,n,i);t=t!=null?t:Nt(e).publicKey;let x=r;if(!x){let $=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});$||this.logAndCreateError("cannot found pool:",B.toBase58()),x=mn.decode($.data)}let S=a,I=await Ee(this.scope.connection,[S?void 0:x.configId,x.platformId].filter(Boolean).map($=>({pubkey:$})));if(!S){let $=I.find(te=>te.pubkey.equals(x.configId));(!$||!$.accountInfo)&&this.logAndCreateError("config not found: ",x.configId.toBase58()),S=Zn.decode($.accountInfo.data)}let C=I.find($=>$.pubkey.equals(x.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",x.configId.toBase58());let N=dn.decode(C.accountInfo.data);u=u||N.feeRate;let L=c;if(!h)if(L)o=To;else{let $=await this.scope.connection.getAccountInfo(n);if($&&$.owner.equals(To)){o=$.owner;let te=us(n,$,o);L=as(te)||void 0}}let v=gt.buyExactOut({poolInfo:x,amountA:y,protocolFeeRate:S.tradeFeeRate,platformFeeRate:u,curveType:S.curveType,shareFeeRate:g,creatorFeeRate:N.creatorFeeRate,transferFeeConfigA:L,slot:await this.scope.connection.getSlot()}),R=new O(v.amountB.toString()),M=b?new O(Jn.add(b).toNumber()/Jn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new O(1),G=(f!=null?f:b)?new ue(R.mul(M).toFixed(0)):v.amountB,Y=this.scope.account.getAssociatedTokenAccount(n,o),J=null,ee=i.equals(Nn);k.addInstruction({instructions:[Ut(this.scope.ownerPubKey,Y,this.scope.ownerPubKey,n,o)]});let{account:ie,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:ee?{payer:this.scope.ownerPubKey,amount:v.amountB}:void 0,skipCloseAccount:!ee,notUseTokenAccount:ee,associatedOnly:ee?!1:w,checkCreateATAOwner:T});ie&&(J=ie),k.addInstruction(de||{}),J===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let ne=P?re(P,i,We).publicKey:void 0;return ne&&k.addInstruction({instructions:[Ut(this.scope.ownerPubKey,ne,P,i)]}),k.addInstruction({instructions:[Wl(e,this.scope.ownerPubKey,t,x.configId,x.platformId,B,Y,J,x.vaultA,x.vaultB,n,i,o,We,pn(e,x.platformId,i).publicKey,fn(e,x.creator,i).publicKey,y,G,g,ne)]}),k.addCustomComputeBudget(m),k.addTipInstruction(d),k.versionBuild({txVersion:l,extInfo:{maxSpentAmount:G,outAmount:y}})}async sellToken({programId:e=st,authProgramId:t,mintAProgram:n=We,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:P=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Nt(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ue(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:k}=qo(e,o,i),B;if(!T){let te=await this.scope.connection.getAccountInfo(o);if(te&&te.owner.equals(To)){n=te.owner;let ke=us(o,te,n);B=as(ke)||void 0}}let x=null,S=null,I=i.equals(Nn),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:w});C&&(x=C),h.addInstruction(N||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:v}=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:P,checkCreateATAOwner:w});L&&(S=L),h.addInstruction(v||{}),S===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let te=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(te.data)}let M=a,G=await Ee(this.scope.connection,[M?void 0:R.configId,R.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!M){let te=G.find(ke=>ke.pubkey.equals(R.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),M=Zn.decode(te.accountInfo.data)}let Y=G.find(te=>te.pubkey.equals(R.platformId));(!Y||!Y.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let J=dn.decode(Y.accountInfo.data);c=c||J.feeRate;let ee=gt.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:M.tradeFeeRate,platformFeeRate:c,curveType:M.curveType,shareFeeRate:b,creatorFeeRate:J.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),ie=new O(ee.amountB.toString()),de=y?new O(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new O(1),ne=f!=null?f:y?new ue(ie.mul(de).toFixed(0)):ee.amountB;ne.lte(new ue(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let $=g?re(g,i,We).publicKey:void 0;return $&&h.addInstruction({instructions:[Ut(this.scope.ownerPubKey,$,g,i)]}),h.addInstruction({instructions:[ts(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,S,R.vaultA,R.vaultB,o,i,n,We,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,ee.amountA.amount.lt(p)?ee.amountA.amount:p,ne,b,$)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:ne}})}async sellTokenExactOut({programId:e=st,authProgramId:t,mintAProgram:n=We,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:P=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Nt(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:k}=qo(e,o,i),B;if(!T){let te=await this.scope.connection.getAccountInfo(o);if(te&&te.owner.equals(To)){n=te.owner;let ke=us(o,te,n);B=as(ke)||void 0}}let x=null,S=null,I=i.equals(Nn),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:w});C&&(x=C),h.addInstruction(N||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:v}=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:P,checkCreateATAOwner:w});L&&(S=L),h.addInstruction(v||{}),S===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let te=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(te.data)}let M=a,G=await Ee(this.scope.connection,[M?void 0:R.configId,R.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!M){let te=G.find(ke=>ke.pubkey.equals(R.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),M=Zn.decode(te.accountInfo.data)}let Y=G.find(te=>te.pubkey.equals(R.platformId));(!Y||!Y.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let J=dn.decode(Y.accountInfo.data);c=c||J.feeRate;let ee=gt.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:M.tradeFeeRate,platformFeeRate:c,curveType:M.curveType,shareFeeRate:b,creatorFeeRate:J.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),ie=new O(ee.amountA.amount.toString()),de=y?new O(Jn.add(y).toNumber()/Jn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new O(1),ne=(f!=null?f:y)?new ue(ie.mul(de).toFixed(0)):ee.amountA.amount,$=g?re(g,i,We).publicKey:void 0;return $&&h.addInstruction({instructions:[Ut(this.scope.ownerPubKey,$,g,i)]}),h.addInstruction({instructions:[Dl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,S,R.vaultA,R.vaultB,o,i,n,We,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,p,ne,b,$)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:ne}})}async createPlatformConfig({programId:e=st,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:i,cpConfigId:r,migrateCpLockNftScale:a,transferFeeExtensionAuth:c,creatorFeeRate:u,feeRate:l,name:m,web:d,img:p,platformVestingScale:f=new ue(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:P}){let w=this.createTxBuilder(P),{publicKey:T}=Ga(e,t);return w.addInstruction({instructions:[ql(e,t,n,o,i,T,r,c,a,l,u,m,d,p,f)]}),w.addCustomComputeBudget(b),w.addTipInstruction(g),w.versionBuild({txVersion:y,extInfo:{platformId:T}})}async updatePlatformConfig({programId:e=st,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Ga(e,t).publicKey;return u.addInstruction({instructions:[Ul(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createPlatformVestingAccount({programId:e=st,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:i,vestingRecord:r,txVersion:a,computeBudgetConfig:c,txTipConfig:u,feePayer:l}){let m=this.createTxBuilder(l),d=r!=null?r:Uo(e,i,n).publicKey;return m.addInstruction({instructions:[Gl(e,t,n,o,i,d)]}),m.addCustomComputeBudget(c),m.addTipInstruction(u),m.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=st,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:c=We,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:Nt(e).publicKey;let f=r,y=a;if(!f){let P=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});P||this.logAndCreateError("cannot found pool:",o.toBase58());let w=mn.decode(P.data),T=await this.scope.connection.getAccountInfo(w.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",w.configId.toBase58()),f=Zn.decode(T.data).mintB,y=y!=null?y:w.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=re(this.scope.ownerPubKey,f,We).publicKey;return p.addInstruction({instructions:[Ut(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[ja(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=st,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:Nt(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:mn.span},{memcmp:{offset:mn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=mn.decode(m.account.data);if(d.platformFee.lte(new ue(0)))return;let p=re(this.scope.ownerPubKey,d.mintB,We).publicKey;u.addInstruction({instructions:[Ut(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[ja(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,We)]})}),u.addTipInstruction(a),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=st,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=Uo(e,t,n).publicKey;return u.addInstruction({instructions:[Qa(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=st,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=Uo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Qa(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=st,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=Nt(e).publicKey,m=o||Uo(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=mn.decode(f.data)}let p=re(this.scope.ownerPubKey,d.mintA,We).publicKey;return u.addInstruction({instructions:[Ut(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,We)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=st,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=V({},n),l=Nt(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=V(V({},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]||Uo(e,d,this.scope.ownerPubKey).publicKey,b=re(this.scope.ownerPubKey,f.mintA,We).publicKey;c.addInstruction({instructions:[Ut(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,We)]})}),i===0?c.sizeCheckBuildV0({computeBudgetConfig:r}):c.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=st,platformId:t,mintB:n,mintBProgram:o=We,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=pn(e,t,n).publicKey,d=Xa(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[Ut(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=st,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=Xa(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:P,instructionParams:w}=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});P&&(y=P),u.addInstruction(w||{}),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:We)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:i}):u.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=st,mintB:t,mintBProgram:n=We,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=fn(e,this.scope.ownerPubKey,t).publicKey,l=za(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Ut(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),$a(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=st,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:We,l=fn(e,this.scope.ownerPubKey,c).publicKey,m=za(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[Ut(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),$a(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=mn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(V({},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=Zn.decode(u.accountInfo.data);a[i[c].toBase58()]=q(V({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(V({},c),{[u]:q(V({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new Ce(0),Ui=class extends qe{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=se(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[Tn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[Tn({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?eo:Ke,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?eo:Ke);else{let{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?eo:Ke,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,k&&c.addInstruction(k)}d&&c.addInstruction({endInstructions:[Tn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Ke})],endInstructionTypes:[z.CloseAccount]});let P;if(e.routeType==="route"){let h=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?eo:Ke)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Ml({routeProgram:i,inputMint:p,swapInfo:q(V({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder(),k=u.amount.token.isToken2022?ty(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],eo):Hl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());h.addInstruction({instructions:[k],instructionTypes:[z.TransferAmount]}),h.addInstruction(T);let{transactions:B}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();B.length<2&&c.addInstruction({instructions:[Hl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[z.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 Ce(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let P=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,w=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:k,remainingAccounts:B},launchPoolInfo:x,launchAuthProgramId:S,launchSwapInfo:I,outAmount:C,minOutAmount:N}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:w,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),L=e.toString()===T.poolInfo.mintA.address,v=f.useSOLBalance&&T.poolInfo.mintA.address===Z.toBase58(),R=f.useSOLBalance&&T.poolInfo.mintB.address===Z.toBase58(),M={},G;!r||r.equals(new O(0))?G=L?St.add(new Ce(1)):Kt.sub(new Ce(1)):G=pe.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let Y=this.createTxBuilder(P),[J,ee]=[new me(T.poolInfo.mintA.address),new me(T.poolInfo.mintB.address)],[ie,de]=[new me(T.poolInfo.mintA.programId),new me(T.poolInfo.mintB.programId)],ne=this.scope.account.getAssociatedTokenAccount(J,ie),$=this.scope.account.getAssociatedTokenAccount(ee,de);Y.addInstruction({instructions:[Xo(this.scope.ownerPubKey,ne,this.scope.ownerPubKey,J,ie),Xo(this.scope.ownerPubKey,$,this.scope.ownerPubKey,ee,de)]}),(L&&v||!L&&R)&&Y.addInstruction({instructions:[Yl.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L?ne:$,lamports:BigInt(h.toString())}),Ql(L?ne:$)]}),M[T.poolInfo.mintA.address]=ne,M[T.poolInfo.mintB.address]=$,(!ne||!$)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ne,ownerTokenAccountB:$}),Y.addInstruction(n?Se.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ne,tokenAccountB:$},outputMint:L?ee:J,amountOut:k,amountInMax:h,sqrtPriceLimitX64:G,remainingAccounts:B}):Se.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ne,tokenAccountB:$},inputMint:new me(e),amountIn:t,amountOutMin:k,sqrtPriceLimitX64:G,remainingAccounts:B}));let te=x.mintProgramFlag===0?Ke:eo,ke=this.scope.account.getAssociatedTokenAccount(x.mintA,te),Re=M[x.mintB.toBase58()];if(Y.addInstruction({instructions:[Xo(this.scope.ownerPubKey,ke,this.scope.ownerPubKey,x.mintA,te)]}),!Re){let Te=x.mintB.equals(Z),{account:ot,instructionParams:Ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ke,mint:x.mintB,notUseTokenAccount:Te,owner:this.scope.ownerPubKey,skipCloseAccount:!Te,createInfo:Te?{payer:this.scope.ownerPubKey,amount:k}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Re=ot,Ot&&Y.addInstruction(Ot)}return Y.addInstruction({instructions:[Wi(x.programId,this.scope.ownerPubKey,S,x.configId,x.platformId,new me(i),ke,Re,x.vaultA,x.vaultB,x.mintA,x.mintB,te,Ke,pn(x.programId,x.platformId,x.mintB).publicKey,fn(x.programId,x.creator,x.mintB).publicKey,I.amountB.lt(k)?I.amountB:k,N,c,u)]}),Y.addCustomComputeBudget(b),Y.versionBuild({txVersion:g,extInfo:{routes:[{mint:new me(e),amount:n?h:t,decimal:T.poolInfo[L?"mintA":"mintB"].decimals},{mint:L?ee:J,amount:k,decimal:T.poolInfo[L?"mintB":"mintA"].decimals},{mint:x.mintA,amount:C,decimal:x.mintDecimalsA}],outAmount:C,minOutAmount:N}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new Ce(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var v,R,M,G,Y,J;let f=r>0?new O(r).div(2).toDecimalPlaces(4,O.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"],P=n?await ve.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new me(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await ve.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),w=l;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(i)})),g.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${w.mintB.toBase58()})`);let T=m;if(!T){let ee=await this.scope.connection.getAccountInfo(w.platformId);T=dn.decode(ee.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(w.mintA),k=Nt(w.programId).publicKey,B=h.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(v=h.extensions.feeConfig.olderTransferFee.epoch)!=null?v: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((G=(M=h.extensions.feeConfig.newerTransferFee.epoch)!=null?M:a==null?void 0:a.epoch)!=null?G:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,x=n?t:P.minAmountOut.amount.raw,S=gt.buyExactIn({poolInfo:w,amountB:x,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:w.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:B,slot:d!=null?d:await this.scope.connection.getSlot()}),I=S.amountA.amount.sub((Y=S.amountA.fee)!=null?Y:new Ce(0)),C=new O(I.toString()),N=new Ce(1e4),L=f?new O(N.sub(new Ce(f*1e4)).toNumber()/N.toNumber()).clampedTo(0,1):new O(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?P.maxAmountIn.amount:t,clmmAmountOut:x,remainingAccounts:P.remainingAccounts},clmmComputeInfo:P,launchPoolInfo:w,launchAuthProgramId:k,launchMintTransferFeeConfig:B,launchSwapInfo:S,outAmount:S.amountA.amount.sub((J=S.amountA.fee)!=null?J:new Ce(0)),minOutAmount:new Ce(C.mul(L).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new Ce(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:P,minLaunchOutAmount:w,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),k=this.createTxBuilder(d),B={},x=b.mintProgramFlag===0?Ke:eo,{account:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!S)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let I=b.mintB.equals(Z),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ke,mint:b.mintB,notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(N&&k.addInstruction(N),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);B[b.mintB.toBase58()]=C,k.addInstruction({instructions:[ts(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new me(n),S,C,b.vaultA,b.vaultB,b.mintA,b.mintB,x,Ke,pn(b.programId,b.platformId,b.mintB).publicKey,fn(b.programId,b.creator,b.mintB).publicKey,P.amountA.amount.lt(e)?P.amountA.amount:e,w,r,a)]});let L=b.mintB.toString()===f.poolInfo.mintA.address,v=c.useSOLBalance&&f.poolInfo.mintA.address===Z.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===Z.toBase58(),M;!o||o.equals(new O(0))?M=L?St.add(new Ce(1)):Kt.sub(new Ce(1)):M=pe.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[G,Y]=[new me(f.poolInfo.mintA.address),new me(f.poolInfo.mintB.address)],[J,ee]=[new me(f.poolInfo.mintA.programId),new me(f.poolInfo.mintB.programId)],ie=v?void 0:this.scope.account.getAssociatedTokenAccount(G,J),de=R?void 0:this.scope.account.getAssociatedTokenAccount(Y,ee);if(!ie){let{account:ne,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:J,mint:G,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:L?e:0},associatedOnly:!1,checkCreateATAOwner:u});ie=ne,$&&k.addInstruction($)}if(!de){let{account:ne,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ee,mint:Y,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:L?0:e},associatedOnly:!1,checkCreateATAOwner:u});de=ne,$&&k.addInstruction($)}return B[f.poolInfo.mintA.address]=ie,B[f.poolInfo.mintB.address]=de,(!ie||!de)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ie,ownerTokenAccountB:de}),k.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ie,tokenAccountB:de},inputMint:new me(f.poolKeys[L?"mintA":"mintB"].address),amountIn:w,amountOutMin:h,sqrtPriceLimitX64:M,remainingAccounts:y})),k.addCustomComputeBudget(l),k.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:w,decimal:b.mintDecimalsB},{mint:new me(f.poolKeys[L?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[L?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new Ce(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,N,L,v;let l=o>0?new O(o).div(2).toDecimalPlaces(4,O.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(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=dn.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),P=Nt(m.programId).publicKey,w=g.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((N=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?N:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((v=(L=g.extensions.feeConfig.newerTransferFee.epoch)!=null?L:i==null?void 0:i.epoch)!=null?v:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=gt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:w,slot:await this.scope.connection.getSlot()}),h=T.amountB,k=new O(h.toString()),B=new Ce(1e4),x=l?new O(B.sub(new Ce(l*1e4)).toNumber()/B.toNumber()).clampedTo(0,1):new O(1),S=new Ce(k.mul(x).toFixed(0)),I=await ve.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:S,tokenOut:y,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo()});return{clmmPoolData:p,clmmComputeAmount:I,launchPoolInfo:m,launchAuthProgramId:P,launchMintTransferFeeConfig:w,launchSwapInfo:T,minLaunchOutAmount:S,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:i,slippage:r=.01,shareFeeRate:a=new Ce(0),shareFeeReceiver:c,launchPlatformInfo:u,slot:l,mintInfo:m,epochInfo:d,ownerInfo:p={useSOLBalance:!0},checkCreateATAOwner:f=!1,computeBudgetConfig:y,txVersion:b}){let g=(p==null?void 0:p.feePayer)||this.scope.ownerPubKey,P=d!=null?d:await this.scope.fetchEpochInfo(),{computePoolInfo:w,poolKeys:T}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:h,cpmmPoolData:k,launchPoolInfo:B,launchAuthProgramId:x,launchSwapInfo:S,outAmount:I,minOutAmount:C}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:w,launchPoolId:o,slippage:r,epochInfo:P,shareFeeRate:a,launchPlatformInfo:u,slot:l,mintInfo:m}),N=e.toString()===k.mintA.address,L=p.useSOLBalance&&k.mintA.address===Z.toBase58(),v=p.useSOLBalance&&k.mintB.address===Z.toBase58(),R={},M=this.createTxBuilder(g),[G,Y]=[new me(k.mintA.address),new me(k.mintB.address)],[J,ee]=[new me(k.mintA.programId),new me(k.mintB.programId)],ie=this.scope.account.getAssociatedTokenAccount(G,J),de=this.scope.account.getAssociatedTokenAccount(Y,ee);M.addInstruction({instructions:[Xo(this.scope.ownerPubKey,ie,this.scope.ownerPubKey,G,J),Xo(this.scope.ownerPubKey,de,this.scope.ownerPubKey,Y,ee)]}),(N&&L||!N&&v)&&M.addInstruction({instructions:[Yl.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?ie:de,lamports:BigInt(h.amountIn.toString())}),Ql(N?ie:de)]}),R[k.mintA.address]=ie,R[k.mintB.address]=de,(!ie||!de)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ie,ownerTokenAccountB:de});let ne=i!=null?i:T;M.addInstruction({instructions:[Wo(k.programId,this.scope.ownerPubKey,new me(ne.authority),new me(ne.config.id),k.id,N?ie:de,N?de:ie,new me(ne.vault[N?"A":"B"]),new me(ne.vault[N?"B":"A"]),new me(N?J:ee!=null?ee:Ke),new me(N?ee:J!=null?J:Ke),N?G:Y,N?Y:G,ko(k.programId,k.id).publicKey,t,h.swapResult.outputAmount)]});let $=B.mintProgramFlag===0?Ke:eo,te=this.scope.account.getAssociatedTokenAccount(B.mintA,$),ke=R[B.mintB.toBase58()];if(M.addInstruction({instructions:[Xo(this.scope.ownerPubKey,te,this.scope.ownerPubKey,B.mintA,$)]}),!ke){let Re=B.mintB.equals(Z),{account:Te,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ke,mint:B.mintB,notUseTokenAccount:Re,owner:this.scope.ownerPubKey,skipCloseAccount:!Re,createInfo:Re?{payer:this.scope.ownerPubKey,amount:h.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:f});ke=Te,ot&&M.addInstruction(ot)}return M.addInstruction({instructions:[Wi(B.programId,this.scope.ownerPubKey,x,B.configId,B.platformId,new me(o),te,ke,B.vaultA,B.vaultB,B.mintA,B.mintB,$,Ke,pn(B.programId,B.platformId,B.mintB).publicKey,fn(B.programId,B.creator,B.mintB).publicKey,S.amountB.lt(h.minAmountOut)?S.amountB:h.minAmountOut,C,a,c)]}),M.addCustomComputeBudget(y),M.versionBuild({txVersion:b,extInfo:{routes:[{mint:new me(e),amount:t,decimal:k[N?"mintDecimalA":"mintDecimalB"]},{mint:N?Y:G,amount:h.minAmountOut,decimal:k[N?"mintB":"mintA"].decimals},{mint:B.mintA,amount:I,decimal:B.mintDecimalsA}],outAmount:I,minOutAmount:C}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:i,epochInfo:r,shareFeeRate:a=new Ce(0),cpmmPoolData:c,launchPoolInfo:u,launchPlatformInfo:l,slot:m,mintInfo:d}){var L,v,R,M,G,Y;let p=i>0?new O(i).div(2).toDecimalPlaces(4,O.ROUND_DOWN).toNumber():i,f=c!=null?c:(await this.scope.cpmm.getPoolInfoFromRpc(n.toString())).computePoolInfo;if(e.toString()!==f.mintA.address&&e.toString()!==f.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=e.toString()===f.mintA.address,b=f[y?"mintB":"mintA"],g=u;if(g||(g=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(o)})),b.address!==g.mintB.toBase58())throw new Error(`clmm swap mint(${b.address}) != launch pool mintB(${g.mintB.toBase58()})`);let P=l;if(!P){let J=await this.scope.connection.getAccountInfo(g.platformId);P=dn.decode(J.data)}let w=d!=null?d:await this.scope.token.getTokenInfo(g.mintA),T=Nt(g.programId).publicKey,h=w.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((v=(L=w.extensions.feeConfig.olderTransferFee.epoch)!=null?L:r==null?void 0:r.epoch)!=null?v:0),maximumFee:BigInt(w.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:w.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((M=(R=w.extensions.feeConfig.newerTransferFee.epoch)!=null?R:r==null?void 0:r.epoch)!=null?M:0),maximumFee:BigInt(w.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:w.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,k=await this.scope.cpmm.computeSwapAmount({pool:f,amountIn:t,outputMint:new me(b.address),slippage:p}),B=k.minAmountOut,x=gt.buyExactIn({poolInfo:g,amountB:B,protocolFeeRate:g.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:g.configInfo.curveType,shareFeeRate:a,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:h,slot:m!=null?m:await this.scope.connection.getSlot()}),S=x.amountA.amount.sub((G=x.amountA.fee)!=null?G:new Ce(0)),I=new O(S.toString()),C=new Ce(1e4),N=p?new O(C.sub(new Ce(p*1e4)).toNumber()/C.toNumber()).clampedTo(0,1):new O(1);return{cpmmPoolData:f,cpmmComputInfo:k,launchPoolInfo:g,launchAuthProgramId:T,launchMintTransferFeeConfig:h,launchSwapInfo:x,outAmount:x.amountA.amount.sub((Y=x.amountA.fee)!=null?Y:new Ce(0)),minOutAmount:new Ce(I.mul(N).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new Ce(0),cpmmPoolData:u,clmmPoolData:l,launchPoolInfo:m,launchPlatformInfo:d,slot:p,mintInfo:f}){var ee,ie,de,ne,$,te;let y=r>0?new O(r).div(2).toDecimalPlaces(4,O.ROUND_DOWN).toNumber():r,b=l!=null?l:await this.scope.clmm.getPoolInfoFromRpc(n.toString());if(e.toString()!==b.poolInfo.mintA.address&&e.toString()!==b.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let g=e.toString()===b.poolInfo.mintA.address,P=b.poolInfo[g?"mintB":"mintA"],w=m;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(i)})),P.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${P.address}) != launch pool mintB(${w.mintB.toBase58()})`);let T=d;if(!T){let ke=await this.scope.connection.getAccountInfo(w.platformId);T=dn.decode(ke.data)}let h=f!=null?f:await this.scope.token.getTokenInfo(w.mintA),k=Nt(w.programId).publicKey,B=h.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((ie=(ee=h.extensions.feeConfig.olderTransferFee.epoch)!=null?ee:a==null?void 0:a.epoch)!=null?ie:0),maximumFee:BigInt(h.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((ne=(de=h.extensions.feeConfig.newerTransferFee.epoch)!=null?de:a==null?void 0:a.epoch)!=null?ne:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,x=await ve.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickArrayCache:b.tickData[n.toString()],amountIn:t,tokenOut:P,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),S=u!=null?u:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,I=await this.scope.cpmm.computeSwapAmount({pool:S,amountIn:t,outputMint:new me(P.address),slippage:y}),[C,N]=[x.minAmountOut.amount.raw,I.minAmountOut],L=C.gte(N)?"clmm":"cpmm",v=C.gte(N)?C:N,R=gt.buyExactIn({poolInfo:w,amountB:v,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:w.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:B,slot:p!=null?p:await this.scope.connection.getSlot()}),M=R.amountA.amount.sub(($=R.amountA.fee)!=null?$:new Ce(0)),G=new O(M.toString()),Y=new Ce(1e4),J=y?new O(Y.sub(new Ce(y*1e4)).toNumber()/Y.toNumber()).clampedTo(0,1):new O(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:v,remainingAccounts:x.remainingAccounts},clmmComputeInfo:x,cpmmComputInfo:I,swapPoolType:L,launchPoolInfo:w,launchAuthProgramId:k,launchMintTransferFeeConfig:B,launchSwapInfo:R,outAmount:R.amountA.amount.sub((te=R.amountA.fee)!=null?te:new Ce(0)),minOutAmount:new Ce(G.mul(J).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=yr,clmm:n=no,cpmm:o=io}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Si.offsetOf("baseMint"),length:64}}),r=_([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=_([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:po.span}],dataSlice:{offset:po.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:jr.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()===me.default.toString()?Z:e,t=t.toString()===me.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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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=Xr(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new me(y.mintA.address),programId:Ke,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 me(y.mintB.address),programId:Ke,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(Ke)?(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(Ke)?(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 xo({connection:this.scope.connection,mints:Array.from(o).map(y=>new me(y))});a=V(V({},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(V({},y),{[b]:q(V({},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,P,w,T,h,k,B,x,S;let m=l===void 0?new Ce(0):e.raw.mul(new Ce(l.feeBps.toNumber())).div(new Ce(1e4)),d=e.raw.sub(m),p=new Me(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(V({},t),{address:Pt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(V({},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 N={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},L=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:N,amountIn:p})}}catch(M){this.logDebug("route in error",R.version,R.id.toString(),M.message);return}}).sort((R,M)=>{var J,ee,ie,de;let G=R===void 0?On:R.data.amountOut.amount.raw.sub((ee=(J=R.data.amountOut.fee)==null?void 0:J.raw)!=null?ee:On),Y=M===void 0?On:M.data.amountOut.amount.raw.sub((de=(ie=M.data.amountOut.fee)==null?void 0:ie.raw)!=null?de:On);return G.lt(Y)?1:-1})[0];if(L===void 0)continue;let v=new Me(_r(N),L.data.amountOut.amount.raw.sub((P=(g=L.data.amountOut.fee)==null?void 0:g.raw)!=null?P:On));for(let R of C.out)try{let M=this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:v});b.push(q(V({},M),{allTrade:!!(L.data.allTrade&&M.allTrade),amountIn:L.data.amountIn,amountOut:M.amountOut,minAmountOut:M.minAmountOut,currentPrice:void 0,executionPrice:new O(new Mt({baseToken:L.data.amountIn.amount.token,denominator:L.data.amountIn.amount.raw,quoteToken:M.amountOut.amount.token,numerator:M.amountOut.amount.raw.sub((T=(w=M.amountOut.fee)==null?void 0:w.raw)!=null?T:On)}).toFixed()),priceImpact:new O(L.data.priceImpact.add(M.priceImpact).toFixed()),fee:[L.data.fee[0],M.fee[0]],routeType:"route",poolInfoList:[L.pool,R],remainingAccounts:[L.data.remainingAccounts[0],M.remainingAccounts[0]],minMiddleAmountFee:(h=M.amountOut.fee)!=null&&h.raw?new Me(L.data.amountOut.amount.token,((B=(k=L.data.amountOut.fee)==null?void 0:k.raw)!=null?B:On).add((S=(x=M.amountOut.fee)==null?void 0:x.raw)!=null?S:On)):void 0,middleToken:L.data.amountOut.amount.token,poolReady:L.data.poolReady&&M.poolReady,poolType:[L.data.poolType,M.poolType],feeConfig:f,expirationTime:un(L.data.expirationTime,M.expirationTime)}))}catch(M){this.logDebug("route out error",R.version,R.id.toString(),M.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:P,executionPriceX64:w}=ve.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 O(f.toFixed()),executionPrice:new O(y.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[w],expirationTime:un(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:xi(q(V({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xi(q(V({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Me(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:xi(q(V({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xi(q(V({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Me(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 me(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=qa.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Jr.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(V({},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=V({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:Na({programId:new me(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]||{marketProgramId:l.marketProgramId.toBase58(),marketId:l.marketId.toBase58(),marketAuthority:me.default.toBase58(),marketBaseVault:me.default.toBase58(),marketQuoteVault:me.default.toBase58(),marketBids:me.default.toBase58(),marketAsks:me.default.toBase58(),marketEventQueue:me.default.toBase58()});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:wo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:Tt({address:u.mintLp.toBase58(),programId:Ke.toBase58(),decimals:u.lpDecimals}),config:q(V({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 ny,Transaction as Ja,TransactionInstruction as oy}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as iy}from"@solana/spl-token";import jl from"bn.js";var It=class extends qe{static getPdaPoolId(e,t){return be([It.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return be([It.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new jl(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=>It.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<It.VERSION_PROJECT.length;l++)a.push(...r.map(m=>It.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!==It.POOL_LAYOUT.span||b.data.length!==It.OWNER_LAYOUT.span)continue;let g=It.POOL_LAYOUT.decode(y.data),P=It.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),T=g.endTime.toNumber(),h=P.tokenInfo.map(x=>x.debtAmount.gt(new jl(0))).filter(x=>!x).length!==3,k=i>w&&i<T&&g.status===1,B=h&&k;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:It.VERSION_PROJECT[m],openTime:w,endTime:T,canClaim:B,canClaimErrorType:h?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,S)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[S].debtAmount.add(P.tokenInfo[S].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Ye.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(Ye.WSOL.mint),associatedOnly:u.mintAddress.equals(Ye.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),r.push(l)}o.addInstruction({instructions:[It.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(Ye.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(Ye.WSOL.mint),associatedOnly:d.mintAddress.equals(Ye.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[It.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 Ls(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ja().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Ja().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ja().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:iy,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 oy({keys:i,programId:e,data:a})}},nn=It;nn.CLAIMED_NUM=3,nn.POOL_LAYOUT=_([Le(8),E("bump"),E("status"),A("openTime"),A("endTime"),F("ammId"),Q(_([E("mintDecimals"),F("mintAddress"),F("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),It.CLAIMED_NUM,"tokenInfo"),Q(A(),10,"padding")]),nn.OWNER_LAYOUT=_([Le(8),E("bump"),E("version"),F("poolId"),F("owner"),A("lpAmount"),Q(_([F("mintAddress"),A("debtAmount"),A("claimedAmount")]),It.CLAIMED_NUM,"tokenInfo"),Q(A(),4,"padding")]),nn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ny(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 Xi}from"@solana/web3.js";import Jl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as sy,TransactionInstruction as Zl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as $l}from"@solana/spl-token";var ry=_([E("instruction"),mc("amount")]),Gi=_([E("instruction")]);function ls({programId:s},e){let t=[{pubkey:$l,isSigner:!1,isWritable:!1},{pubkey:_u,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Gi.span);return Gi.encode({instruction:2},n),new Zl({keys:t,programId:s,data:n})}function eu(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(Gi.span);Gi.encode({instruction:2},r);let a=[{pubkey:$l,isWritable:!1,isSigner:!1},{pubkey:sy,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 Zl({programId:e.programId,keys:a,data:r})}var ay={[ii.IDO_PROGRAM_ID_V1.toString()]:1,[ii.IDO_PROGRAM_ID_V2.toString()]:2,[ii.IDO_PROGRAM_ID_V3.toString()]:3,[ii.IDO_PROGRAM_ID_V4.toString()]:4},zo=class extends qe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i,feePayer:r}){let a=this.createTxBuilder(r),c=ay[t.programId];c||this.logAndCreateError("invalid version",c);let u=yt(t),[l,m]=[!new Jl(e.coin).isZero(),!new Jl(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?[ls({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Xi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[ls({programId:new Xi(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Xi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[ls({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Xi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let P={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 Xi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[eu(q(V({},P),{side:"base"}))]:[],...m?[eu(q(V({},P),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as uy}from"@solana/web3.js";import{MintLayout as cy,TOKEN_2022_PROGRAM_ID as tu,TOKEN_PROGRAM_ID as nu}from"@solana/spl-token";var zi=class extends qe{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(_n.address,_n),this._mintGroup.official.add(_n.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(V({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?tu.toBase58():nu.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 _n;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(V({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new uy(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=cy.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 ms=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 an(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=he("Raydium"),this.farm=new gi({scope:this,moduleName:"Raydium_Farm"}),this.account=new ci({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Li({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new zi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ui({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Oi({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 Eo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new zo({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new qi({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=ly({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new Tr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new ms(q(V({},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(Ir);return this._owner.publicKey}setOwner(e){return this._owner=e?new an(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(oc);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(Ir),new Error(Ir)}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(V({},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{ms as Raydium};
1
+ var tm=Object.defineProperty,nm=Object.defineProperties;var om=Object.getOwnPropertyDescriptors;var $i=Object.getOwnPropertySymbols;var yu=Object.prototype.hasOwnProperty,bu=Object.prototype.propertyIsEnumerable;var fu=(s,e,t)=>e in s?tm(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,V=(s,e)=>{for(var t in e||(e={}))yu.call(e,t)&&fu(s,t,e[t]);if($i)for(var t of $i(e))bu.call(e,t)&&fu(s,t,e[t]);return s},q=(s,e)=>nm(s,om(e));var Xe=(s,e)=>{var t={};for(var n in s)yu.call(s,n)&&e.indexOf(n)<0&&(t[n]=s[n]);if(s!=null&&$i)for(var n of $i(s))e.indexOf(n)<0&&bu.call(s,n)&&(t[n]=s[n]);return t};import{merge as ly}from"lodash";import nc from"axios";import{PublicKey as Au}from"@solana/web3.js";import{get as gu,set as im}from"lodash";var ps=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}},Pu={},rm={};function he(s){let e=gu(Pu,s);if(!e){let t=gu(rm,s);e=new ps({name:s,logLevel:t}),im(Pu,s,e)}return e}import{MINT_SIZE as sm,TOKEN_PROGRAM_ID as am,getTransferFeeConfig as um,unpackMint as cm}from"@solana/spl-token";var fs=he("Raydium_accountInfo_util");async function on(s,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=V({batchRequest:!1},t),r=ys(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=ys(c,10);a=(await(await Promise.all(u.map(async m=>await s._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&fs.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"&&fs.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:y,owner:new Au(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(r.map(c=>s.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&fs.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(V({},o),{accountInfo:n[i]}))}async function xo({connection:s,mints:e,config:t}){var i,r,a;if(e.length===0)return{};let n=await Ee(s,e.map(c=>({pubkey:Pt(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<sm){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=cm(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=q(V({},u),{programId:((r=c.accountInfo)==null?void 0:r.owner)||am,feeConfig:(a=um(u))!=null?a:void 0})}return o[Au.default.toBase58()]=o[$.toBase58()],o}import gn from"bn.js";var So=9e15,Vn=1e9,bs="0123456789abcdef",er="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",tr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",gs={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-So,maxE:So,crypto:!1},Tu,kn,Pe=!0,or="[DecimalError] ",Fn=or+"Invalid argument: ",Iu=or+"Precision limit exceeded",Bu=or+"crypto unavailable",xu="[object Decimal]",At=Math.floor,rt=Math.pow,lm=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,mm=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,dm=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Su=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,rn=1e7,fe=7,pm=9007199254740991,fm=er.length-1,Ps=tr.length-1,X={toStringTag:xu};X.absoluteValue=X.abs=function(){var s=new this.constructor(this);return s.s<0&&(s.s=1),ae(s)};X.ceil=function(){return ae(new this.constructor(this),this.e+1,2)};X.clampedTo=X.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)};X.comparedTo=X.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};X.cosine=X.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())+fe,n.rounding=1,t=ym(n,Nu(n,t)),n.precision=s,n.rounding=e,ae(kn==2||kn==3?t.neg():t,s,e,!0)):new n(1):new n(NaN)};X.cubeRoot=X.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(Pe=!1,i=l.s*rt(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=pt(l.d),s=l.e,(i=(s-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=rt(t,1/3),s=At((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),pt(a.d).slice(0,r)===(t=pt(n.d)).slice(0,r))if(t=t.slice(r-3,r+1),t=="9999"||!o&&t=="4999"){if(!o&&(ae(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")&&(ae(n,s+1,1),e=!n.times(n).times(n).eq(l));break}return Pe=!0,ae(n,s,m.rounding,e)};X.decimalPlaces=X.dp=function(){var s,e=this.d,t=NaN;if(e){if(s=e.length-1,t=(s-At(this.e/fe))*fe,s=e[s],s)for(;s%10==0;s/=10)t--;t<0&&(t=0)}return t};X.dividedBy=X.div=function(s){return _e(this,new this.constructor(s))};X.dividedToIntegerBy=X.divToInt=function(s){var e=this,t=e.constructor;return ae(_e(e,new t(s),0,1,1),t.precision,t.rounding)};X.equals=X.eq=function(s){return this.cmp(s)===0};X.floor=function(){return ae(new this.constructor(this),this.e+1,3)};X.greaterThan=X.gt=function(s){return this.cmp(s)>0};X.greaterThanOrEqualTo=X.gte=function(s){var e=this.cmp(s);return e==1||e===0};X.hyperbolicCosine=X.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/rr(4,s)).toString()):(s=16,e="2.3283064365386962890625e-10"),i=Ko(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 ae(i,r.precision=t,r.rounding=n,!0)};X.hyperbolicSine=X.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=Ko(i,2,o,o,!0);else{s=1.4*Math.sqrt(n),s=s>16?16:s|0,o=o.times(1/rr(5,s)),o=Ko(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,ae(o,e,t,!0)};X.hyperbolicTangent=X.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)};X.inverseCosine=X.acos=function(){var s=this,e=s.constructor,t=s.abs().cmp(1),n=e.precision,o=e.rounding;return t!==-1?t===0?s.isNeg()?yn(e,n,o):new e(0):new e(NaN):s.isZero()?yn(e,n+4,o).times(.5):(e.precision=n+6,e.rounding=1,s=new e(1).minus(s).div(s.plus(1)).sqrt().atan(),e.precision=n,e.rounding=o,s.times(2))};X.inverseHyperbolicCosine=X.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,Pe=!1,t=t.times(t).minus(1).sqrt().plus(t),Pe=!0,n.precision=s,n.rounding=e,t.ln()):new n(t)};X.inverseHyperbolicSine=X.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,Pe=!1,t=t.times(t).plus(1).sqrt().plus(t),Pe=!0,n.precision=s,n.rounding=e,t.ln())};X.inverseHyperbolicTangent=X.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?ae(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)};X.inverseSine=X.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=yn(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)))};X.inverseTangent=X.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<=Ps)return r=yn(l,m+4,d).times(.25),r.s=u.s,r}else{if(!u.s)return new l(NaN);if(m+4<=Ps)return r=yn(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/fe+2|0),s=t;s;--s)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(Pe=!1,e=Math.ceil(a/fe),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)),Pe=!0,ae(r,l.precision=m,l.rounding=d,!0)};X.isFinite=function(){return!!this.d};X.isInteger=X.isInt=function(){return!!this.d&&At(this.e/fe)>this.d.length-2};X.isNaN=function(){return!this.s};X.isNegative=X.isNeg=function(){return this.s<0};X.isPositive=X.isPos=function(){return this.s>0};X.isZero=function(){return!!this.d&&this.d[0]===0};X.lessThan=X.lt=function(s){return this.cmp(s)<0};X.lessThanOrEqualTo=X.lte=function(s){return this.cmp(s)<1};X.logarithm=X.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(Pe=!1,a=m+p,r=Mn(u,a),n=e?nr(l,a+10):Mn(s,a),c=_e(r,n,a,1),Ho(c.d,o=m,d))do if(a+=10,r=Mn(u,a),n=e?nr(l,a+10):Mn(s,a),c=_e(r,n,a,1),!i){+pt(c.d).slice(o+1,o+15)+1==1e14&&(c=ae(c,m+1,0));break}while(Ho(c.d,o+=10,d));return Pe=!0,ae(c,m,d)};X.minus=X.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 Pe?ae(s,a,c):s}if(t=At(s.e/fe),l=At(p.e/fe),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/fe),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]=rn-1;--u[o],u[n]+=rn}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=ir(u,t),Pe?ae(s,a,c):s):new f(c===3?-0:0)};X.modulo=X.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]?ae(new n(t),n.precision,n.rounding):(Pe=!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),Pe=!0,t.minus(e))};X.naturalExponential=X.exp=function(){return As(this)};X.naturalLogarithm=X.ln=function(){return Mn(this)};X.negated=X.neg=function(){var s=new this.constructor(this);return s.s=-s.s,ae(s)};X.plus=X.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)),Pe?ae(s,a,c):s;if(i=At(m.e/fe),n=At(s.e/fe),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/fe),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)/rn|0,u[o]%=rn;for(e&&(u.unshift(e),++n),r=u.length;u[--r]==0;)u.pop();return s.d=u,s.e=ir(u,n),Pe?ae(s,a,c):s};X.precision=X.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=Ku(t.d),s&&t.e+1>e&&(e=t.e+1)):e=NaN,e};X.round=function(){var s=this,e=s.constructor;return ae(new e(s),s.e+1,e.rounding)};X.sine=X.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())+fe,n.rounding=1,t=gm(n,Nu(n,t)),n.precision=s,n.rounding=e,ae(kn>2?t.neg():t,s,e,!0)):new n(NaN)};X.squareRoot=X.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(Pe=!1,u=Math.sqrt(+r),u==0||u==1/0?(e=pt(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=At((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),pt(i.d).slice(0,t)===(e=pt(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(ae(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")&&(ae(n,c+1,1),s=!n.times(n).eq(r));break}return Pe=!0,ae(n,c,l.rounding,s)};X.tangent=X.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,ae(kn==2||kn==4?t.neg():t,s,e,!0)):new n(NaN)};X.times=X.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=At(l.e/fe)+At(s.e/fe),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%rn|0,e=a/rn|0;i[o]=(i[o]+e)%rn|0}for(;!i[--r];)i.pop();return e?++t:i.shift(),s.d=i,s.e=ir(i,t),Pe?ae(s,m.precision,m.rounding):s};X.toBinary=function(s,e){return ws(this,2,s,e)};X.toDecimalPlaces=X.toDP=function(s,e){var t=this,n=t.constructor;return t=new n(t),s===void 0?t:(vt(s,0,Vn),e===void 0?e=n.rounding:vt(e,0,8),ae(t,s+t.e+1,e))};X.toExponential=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=bn(n,!0):(vt(s,0,Vn),e===void 0?e=o.rounding:vt(e,0,8),n=ae(new o(n),s+1,e),t=bn(n,!0,s+1)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toFixed=function(s,e){var t,n,o=this,i=o.constructor;return s===void 0?t=bn(o):(vt(s,0,Vn),e===void 0?e=i.rounding:vt(e,0,8),n=ae(new i(o),s+o.e+1,e),t=bn(n,!1,s+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};X.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=Ku(f)-p.e-1,r=i%fe,e.d[0]=rt(10,r<0?fe+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(Pe=!1,a=new y(pt(f)),l=y.precision,y.precision=i=f.length*fe*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,Pe=!0,d};X.toHexadecimal=X.toHex=function(s,e){return ws(this,16,s,e)};X.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:vt(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]?(Pe=!1,t=_e(t,s,0,e,1).times(s),Pe=!0,ae(t)):(s.s=t.s,t=s),t};X.toNumber=function(){return+this};X.toOctal=function(s,e){return ws(this,8,s,e)};X.toPower=X.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(rt(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,s.eq(1))return ae(a,n,i);if(e=At(s.e/fe),e>=s.d.length-1&&(t=u<0?-u:u)<=pm)return o=Cu(c,a,t,n),s.s<0?new c(1).div(o):ae(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=rt(+a,u),e=t==0||!isFinite(t)?At(u*(Math.log("0."+pt(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):(Pe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=As(s.times(Mn(a,n+t)),n),o.d&&(o=ae(o,n+5,1),Ho(o.d,n,i)&&(e=n+10,o=ae(As(s.times(Mn(a,e+t)),e),e+5,1),+pt(o.d).slice(n+1,n+15)+1==1e14&&(o=ae(o,n+1,0)))),o.s=r,Pe=!0,c.rounding=i,ae(o,n,i))};X.toPrecision=function(s,e){var t,n=this,o=n.constructor;return s===void 0?t=bn(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(vt(s,1,Vn),e===void 0?e=o.rounding:vt(e,0,8),n=ae(new o(n),s,e),t=bn(n,s<=n.e||n.e<=o.toExpNeg,s)),n.isNeg()&&!n.isZero()?"-"+t:t};X.toSignificantDigits=X.toSD=function(s,e){var t=this,n=t.constructor;return s===void 0?(s=n.precision,e=n.rounding):(vt(s,1,Vn),e===void 0?e=n.rounding:vt(e,0,8)),ae(new n(t),s,e)};X.toString=function(){var s=this,e=s.constructor,t=bn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()&&!s.isZero()?"-"+t:t};X.truncated=X.trunc=function(){return ae(new this.constructor(this),this.e+1,1)};X.valueOf=X.toJSON=function(){var s=this,e=s.constructor,t=bn(s,s.e<=e.toExpNeg||s.e>=e.toExpPos);return s.isNeg()?"-"+t:t};function pt(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=fe-n.length,t&&(i+=vn(t)),i+=n;r=s[e],n=r+"",t=fe-n.length,t&&(i+=vn(t))}else if(r===0)return"0";for(;r%10===0;)r/=10;return i+r}function vt(s,e,t){if(s!==~~s||s<e||s>t)throw Error(Fn+s)}function Ho(s,e,t,n){var o,i,r,a;for(i=s[0];i>=10;i/=10)--e;return--e<0?(e+=fe,o=0):(o=Math.ceil((e+1)/fe),e%=fe),i=rt(10,fe-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)==rt(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)==rt(10,e-3)-1,r}function Zi(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]+=bs.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 ym(s,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/rr(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),s.precision+=t,e=Ko(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,P,w,T,h,k,B,x,S,I,C,N,L=n.constructor,v=n.s==o.s?1:-1,R=n.d,M=o.d;if(!R||!R[0]||!M||!M[0])return new L(!n.s||!o.s||(R?M&&R[0]==M[0]:!M)?NaN:R&&R[0]==0||!M?v*0:v/0);for(c?(p=1,l=n.e-o.e):(c=rn,p=fe,l=At(n.e/p)-At(o.e/p)),C=M.length,S=R.length,g=new L(v),P=g.d=[],m=0;M[m]==(R[m]||0);m++);if(M[m]>(R[m]||0)&&l--,i==null?(k=i=L.precision,r=L.rounding):a?k=i+(n.e-o.e)+1:k=i,k<0)P.push(1),f=!0;else{if(k=k/p+2|0,m=0,C==1){for(d=0,M=M[0],k++;(m<S||d)&&k--;m++)B=d*c+(R[m]||0),P[m]=B/M|0,d=B%M|0;f=d||m<S}else{for(d=c/(M[0]+1)|0,d>1&&(M=s(M,d,c),R=s(R,d,c),C=M.length,S=R.length),x=C,w=R.slice(0,C),T=w.length;T<C;)w[T++]=0;N=M.slice(),N.unshift(0),I=M[0],M[1]>=c/2&&++I;do d=0,u=e(M,w,C,T),u<0?(h=w[0],C!=T&&(h=h*c+(w[1]||0)),d=h/I|0,d>1?(d>=c&&(d=c-1),y=s(M,d,c),b=y.length,T=w.length,u=e(y,w,b,T),u==1&&(d--,t(y,C<b?N:M,b,c))):(d==0&&(u=d=1),y=M.slice()),b=y.length,b<T&&y.unshift(0),t(w,y,T,c),u==-1&&(T=w.length,u=e(M,w,C,T),u<1&&(d++,t(w,C<T?N:M,T,c))),T=w.length):u===0&&(d++,w=[0]),P[m++]=d,u&&w[0]?w[T++]=R[x]||0:(w=[R[x]],T=1);while((x++<S||w[0]!==void 0)&&k--);f=w[0]!==void 0}P[0]||P.shift()}if(p==1)g.e=l,Tu=f;else{for(m=1,d=P[0];d>=10;d/=10)m++;g.e=m+l*p-1,ae(g,a?i+g.e+1:i,r,f)}return g}}();function ae(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+=fe,r=e,l=m[d=0],c=l/rt(10,o-r-1)%10|0;else if(d=Math.ceil((i+1)/fe),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=fe,r=i-fe+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=fe,r=i-fe+o,c=r<0?0:l/rt(10,o-r-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(r<0?l:l%rt(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/rt(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]=rt(10,(fe-e%fe)%fe),s.e=-e||0):m[0]=s.e=0,s;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=rt(10,fe-i),m[d]=r>0?(l/rt(10,o-r)%rt(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]==rn&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=rn)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return Pe&&(s.e>p.maxE?(s.d=null,s.e=NaN):s.e<p.minE&&(s.e=0,s.d=[0])),s}function bn(s,e,t){if(!s.isFinite())return Lu(s);var n,o=s.e,i=pt(s.d),r=i.length;return e?(t&&(n=t-r)>0?i=i.charAt(0)+"."+i.slice(1)+vn(n):r>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(s.e<0?"e":"e+")+s.e):o<0?(i="0."+vn(-o-1)+i,t&&(n=t-r)>0&&(i+=vn(n))):o>=r?(i+=vn(o+1-r),t&&(n=t-o-1)>0&&(i=i+"."+vn(n))):((n=o+1)<r&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-r)>0&&(o+1===r&&(i+="."),i+=vn(n))),i}function ir(s,e){var t=s[0];for(e*=fe;t>=10;t/=10)e++;return e}function nr(s,e,t){if(e>fm)throw Pe=!0,t&&(s.precision=t),Error(Iu);return ae(new s(er),e,1,!0)}function yn(s,e,t){if(e>Ps)throw Error(Iu);return ae(new s(tr),e,t,!0)}function Ku(s){var e=s.length-1,t=e*fe+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 vn(s){for(var e="";s--;)e+="0";return e}function Cu(s,e,t,n){var o,i=new s(1),r=Math.ceil(n/fe+4);for(Pe=!1;;){if(t%2&&(i=i.times(e),ku(i.d,r)&&(o=!0)),t=At(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),ku(e.d,r)}return Pe=!0,i}function wu(s){return s.d[s.d.length-1]&1}function Ru(s,e,t){for(var n,o,i=new s(e[0]),r=0;++r<e.length;){if(o=new s(e[r]),!o.s){i=o;break}n=i.cmp(o),(n===t||n===0&&i.s===t)&&(i=o)}return i}function As(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?(Pe=!1,c=f):c=e,a=new d(.03125);s.e>-2;)s=s.times(a),m+=5;for(n=Math.log(rt(2,m))/Math.LN10*2+5|0,c+=n,t=i=r=new d(1),d.precision=c;;){if(i=ae(i.times(s),c,1),t=t.times(++l),a=r.plus(_e(i,t,c,1)),pt(a.d).slice(0,c)===pt(r.d).slice(0,c)){for(o=m;o--;)r=ae(r.times(r),c,1);if(e==null)if(u<3&&Ho(r.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return ae(r,d.precision=f,p,Pe=!0);else return d.precision=f,r}r=a}}function Mn(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,P=g.rounding,w=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?(Pe=!1,l=w):l=e,g.precision=l+=f,t=pt(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=pt(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=nr(g,l+2,w).times(i+""),y=Mn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=w,e==null?ae(y,w,P,Pe=!0):y;for(m=y,c=r=y=_e(y.minus(1),y.plus(1),l,1),d=ae(y.times(y),l,1),o=3;;){if(r=ae(r.times(d),l,1),u=c.plus(_e(r,new g(o),l,1)),pt(u.d).slice(0,l)===pt(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(nr(g,l+2,w).times(i+""))),c=_e(c,new g(p),l,1),e==null)if(Ho(c.d,l-f,P,a))g.precision=l+=f,u=r=y=_e(m.minus(1),m.plus(1),l,1),d=ae(y.times(y),l,1),o=a=1;else return ae(c,g.precision=w,P,Pe=!0);else return g.precision=w,c;c=u,o+=2}}function Lu(s){return String(s.s*s.s/0)}function Ji(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)%fe,t<0&&(n+=fe),n<o){for(n&&s.d.push(+e.slice(0,n)),o-=fe;n<o;)s.d.push(+e.slice(n,n+=fe));e=e.slice(n),n=fe-e.length}else n-=o;for(;n--;)e+="0";s.d.push(+e),Pe&&(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 bm(s,e){var t,n,o,i,r,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Su.test(e))return Ji(s,e)}else if(e==="Infinity"||e==="NaN")return+e||(s.s=NaN),s.e=NaN,s.d=null,s;if(mm.test(e))t=16,e=e.toLowerCase();else if(lm.test(e))t=2;else if(dm.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=Cu(n,new n(t),i,i*2)),u=Zi(e,t,rn),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(s.s*0):(s.e=ir(u,l),s.d=u,Pe=!1,r&&(s=_e(s,o,a*4)),c&&(s=s.times(Math.abs(c)<54?rt(2,c):Qo.pow(2,c))),Pe=!0,s)}function gm(s,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Ko(s,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/rr(5,t)),e=Ko(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 Ko(s,e,t,n,o){var i,r,a,c,u=1,l=s.precision,m=Math.ceil(l/fe);for(Pe=!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 Pe=!0,r.d.length=m+1,r}function rr(s,e){for(var t=s;--e;)t*=s;return t}function Nu(s,e){var t,n=e.s<0,o=yn(s,s.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return kn=n?4:1,e;if(t=e.divToInt(o),t.isZero())kn=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return kn=wu(t)?n?2:3:n?4:1,e;kn=wu(t)?n?1:4:n?3:2}return e.minus(o).abs()}function ws(s,e,t,n){var o,i,r,a,c,u,l,m,d,p=s.constructor,f=t!==void 0;if(f?(vt(t,1,Vn),n===void 0?n=p.rounding:vt(n,0,8)):(t=p.precision,n=p.rounding),!s.isFinite())l=Lu(s);else{for(l=bn(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=Zi(bn(d),10,o),d.e=d.d.length),m=Zi(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=Tu),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+=bs.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=Zi(l,o,e),c=m.length;!m[c-1];--c);for(r=1,l="1.";r<c;r++)l+=bs.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 ku(s,e){if(s.length>e)return s.length=e,!0}function Pm(s){return new this(s).abs()}function Am(s){return new this(s).acos()}function wm(s){return new this(s).acosh()}function km(s,e){return new this(s).plus(e)}function hm(s){return new this(s).asin()}function Tm(s){return new this(s).asinh()}function Im(s){return new this(s).atan()}function Bm(s){return new this(s).atanh()}function xm(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=yn(this,i,1).times(e.s>0?.25:.75),t.s=s.s):!e.d||s.isZero()?(t=e.s<0?yn(this,n,o):new this(0),t.s=s.s):!s.d||e.isZero()?(t=yn(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=yn(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 Sm(s){return new this(s).cbrt()}function Km(s){return ae(s=new this(s),s.e+1,2)}function Cm(s,e,t){return new this(s).clamp(e,t)}function Rm(s){if(!s||typeof s!="object")throw Error(or+"Object expected");var e,t,n,o=s.defaults===!0,i=["precision",1,Vn,"rounding",0,8,"toExpNeg",-So,0,"toExpPos",0,So,"maxE",0,So,"minE",-So,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=gs[t]),(n=s[t])!==void 0)if(At(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]=gs[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(Bu);else this[t]=!1;else throw Error(Fn+t+": "+n);return this}function Lm(s){return new this(s).cos()}function Nm(s){return new this(s).cosh()}function Ou(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,hu(i)){u.s=i.s,Pe?!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++;Pe?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}if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Ji(u,i.toString())}if(c==="string")return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Su.test(i)?Ji(u,i):bm(u,i);if(c==="bigint")return i<0?(i=-i,u.s=-1):u.s=1,Ji(u,i.toString());throw Error(Fn+i)}if(o.prototype=X,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=Rm,o.clone=Ou,o.isDecimal=hu,o.abs=Pm,o.acos=Am,o.acosh=wm,o.add=km,o.asin=hm,o.asinh=Tm,o.atan=Im,o.atanh=Bm,o.atan2=xm,o.cbrt=Sm,o.ceil=Km,o.clamp=Cm,o.cos=Lm,o.cosh=Nm,o.div=Om,o.exp=vm,o.floor=Mm,o.hypot=Fm,o.ln=Vm,o.log=_m,o.log10=Wm,o.log2=Em,o.max=Dm,o.min=qm,o.mod=Um,o.mul=Gm,o.pow=Xm,o.random=zm,o.round=Ym,o.sign=Hm,o.sin=Qm,o.sinh=jm,o.sqrt=$m,o.sub=Zm,o.sum=Jm,o.tan=ed,o.tanh=td,o.trunc=nd,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 Om(s,e){return new this(s).div(e)}function vm(s){return new this(s).exp()}function Mm(s){return ae(s=new this(s),s.e+1,3)}function Fm(){var s,e,t=new this(0);for(Pe=!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 Pe=!0,new this(1/0);t=e}return Pe=!0,t.sqrt()}function hu(s){return s instanceof Qo||s&&s.toStringTag===xu||!1}function Vm(s){return new this(s).ln()}function _m(s,e){return new this(s).log(e)}function Em(s){return new this(s).log(2)}function Wm(s){return new this(s).log(10)}function Dm(){return Ru(this,arguments,-1)}function qm(){return Ru(this,arguments,1)}function Um(s,e){return new this(s).mod(e)}function Gm(s,e){return new this(s).mul(e)}function Xm(s,e){return new this(s).pow(e)}function zm(s){var e,t,n,o,i=0,r=new this(1),a=[];if(s===void 0?s=this.precision:vt(s,1,Vn),n=Math.ceil(s/fe),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(Bu);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],s%=fe,n&&s&&(o=rt(10,fe-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-=fe)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<fe&&(t-=fe-n)}return r.e=t,r.d=a,r}function Ym(s){return ae(s=new this(s),s.e+1,this.rounding)}function Hm(s){return s=new this(s),s.d?s.d[0]?s.s:0*s.s:s.s||NaN}function Qm(s){return new this(s).sin()}function jm(s){return new this(s).sinh()}function $m(s){return new this(s).sqrt()}function Zm(s,e){return new this(s).sub(e)}function Jm(){var s=0,e=arguments,t=new this(e[s]);for(Pe=!1;t.s&&++s<e.length;)t=t.plus(e[s]);return Pe=!0,ae(t,this.precision,this.rounding)}function ed(s){return new this(s).tan()}function td(s){return new this(s).tanh()}function nd(s){return ae(s=new this(s),s.e+1,1)}X[Symbol.for("nodejs.util.inspect.custom")]=X.toString;X[Symbol.toStringTag]="Decimal";var Qo=X.constructor=Ou(gs);er=new Qo(er);tr=new Qo(tr);var O=Qo;import ld from"big.js";import ur from"bn.js";import od from"toformat";var id=od,jo=id;import ar from"big.js";import sd from"bn.js";import ad from"decimal.js-light";import $o from"bn.js";var vu=9007199254740991;function se(s){let e=he("Raydium_parseBigNumberish");if(s instanceof $o)return s;if(typeof s=="string"){if(s.match(/^-?[0-9]+$/))return new $o(s);e.logWithError(`invalid BigNumberish string: ${s}`)}return typeof s=="number"?(s%1&&e.logWithError(`BigNumberish number underflow: ${s}`),(s>=vu||s<=-vu)&&e.logWithError(`BigNumberish number overflow: ${s}`),new $o(String(s))):typeof s=="bigint"?new $o(s.toString()):(e.error(`invalid BigNumberish value: ${s}`),new $o(0))}var sr=he("module/fraction"),ks=jo(ar),Zo=jo(ad),ud={[0]:Zo.ROUND_DOWN,[1]:Zo.ROUND_HALF_UP,[2]:Zo.ROUND_UP},cd={[0]:ar.roundDown,[1]:ar.roundHalfUp,[2]:ar.roundUp},Ne=class{constructor(e,t=new sd(1)){this.numerator=se(e),this.denominator=se(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new Ne(this.denominator,this.numerator)}add(e){let t=e instanceof Ne?e:new Ne(se(e));return this.denominator.eq(t.denominator)?new Ne(this.numerator.add(t.numerator),this.denominator):new Ne(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof Ne?e:new Ne(se(e));return this.denominator.eq(t.denominator)?new Ne(this.numerator.sub(t.numerator),this.denominator):new Ne(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof Ne?e:new Ne(se(e));return new Ne(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof Ne?e:new Ne(se(e));return new Ne(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||sr.logWithError(`${e} is not an integer.`),e<=0&&sr.logWithError(`${e} is not positive.`),Zo.set({precision:e+1,rounding:ud[n]});let o=new Zo(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)||sr.logWithError(`${e} is not an integer.`),e<0&&sr.logWithError(`${e} is negative.`),ks.DP=e,ks.RM=cd[n]||1,new ks(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var md=he("Raydium_amount"),Mu=jo(ld);function dd(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")):md.logWithError(`invalid number string, num: ${s}`)}else t=s;return[t,n.slice(0,e)||n]}var Me=class extends Ne{constructor(t,n,o=!0,i){let r=new ur(0),a=hs.pow(new ur(t.decimals));if(o)r=se(n);else{let c=new ur(0),u=new ur(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=dd(n.toString(),t.decimals);c=se(l),u=se(m)}c=c.mul(a),r=c.add(u)}super(r,a);this.logger=he(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 Me(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new Me(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 Mu.DP=this.token.decimals,new Mu(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as pd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Fu}from"@solana/spl-token";var _n={chainId:101,address:pd.default.toBase58(),programId:Fu.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},wt={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Fu.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 Ss}from"@solana/web3.js";import{PublicKey as ze,SystemProgram as Vu,SYSVAR_RENT_PUBKEY as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as yd}from"@solana/spl-token";function K({pubkey:s,isSigner:e=!1,isWritable:t=!0}){return{pubkey:s,isWritable:t,isSigner:e}}var Ts=[K({pubkey:yd,isWritable:!1}),K({pubkey:Vu.programId,isWritable:!1}),K({pubkey:fd,isWritable:!1})];function Is({publicKey:s,transformSol:e}){let t=Bs(s.toString());if(t instanceof ze)return e&&t.equals(ct)?$:t;if(e&&t.toString()===ct.toBase58())return $;if(typeof t=="string"){if(t===ze.default.toBase58())return ze.default;try{return new ze(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Bs(s){try{return new ze(s)}catch{return s}}var cr=new ze("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),En=new ze("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ft=new ze("SysvarRent111111111111111111111111111111111"),_u=new ze("SysvarC1ock11111111111111111111111111111111"),sn=new ze("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),bd=new ze("Sysvar1nstructions1111111111111111111111111"),xs=Vu.programId,Jy=new ze("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),eb=new ze("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),tb=new ze("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),nb=new ze("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),ob=new ze("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),ib=new ze("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),rb=new ze("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),sb=new ze("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ab=new ze("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),ub=new ze("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),cb=new ze("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),$=new ze("So11111111111111111111111111111111111111112"),ct=ze.default;function Pt(s){return Is({publicKey:s,transformSol:!0})}var Ks=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:r=!1}){if(e===ct.toBase58()||e instanceof Ss&&ct.equals(e)){this.decimals=wt.decimals,this.symbol=wt.symbol,this.name=wt.name,this.mint=new Ss(wt.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?Ss.default:Is({publicKey:e}),this.isToken2022=r}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ye=Ks;Ye.WSOL=new Ks(q(V({},wt),{mint:wt.address}));var Cs=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},lr=Cs;lr.SOL=new Cs(_n);import gd from"bn.js";var Eu=new Ne(new gd(100)),lt=class extends Ne{toSignificant(e=5,t,n){return this.mul(Eu).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eu).toFixed(e,t,n)}};var Pd=he("Raydium_price"),Mt=class extends Ne{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:r}=t;super(i,r);this.baseToken=n,this.quoteToken=o,this.scalar=new Ne(Rs(n.decimals),Rs(o.decimals))}get raw(){return new Ne(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Pd.logWithError("mul token not equals");let n=super.mul(t);return new Mt({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 Ft=new gn(0),Wu=new gn(1),Zb=new gn(2),Jb=new gn(3),eg=new gn(5),hs=new gn(10),tg=new gn(100),ng=new gn(1e3),og=new gn(1e4);function Rs(s){return hs.pow(se(s))}function mr(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 gn(1)).div(t)}function dr(s,e,t){return s.mul(e).div(t)}function ys(s,e=1,t=[]){let n=[...s];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var an=class{constructor(e){this._owner=e}get publicKey(){return an.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return an.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return an.isKeyPair(this._owner)}get isPublicKey(){return an.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!an.isKeyPair(e)}};import{PublicKey as Id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bd}from"@solana/spl-token";import{ComputeBudgetProgram as Du,Keypair as Uu,PublicKey as Ad,Transaction as Gu,TransactionMessage as wd,VersionedTransaction as Xu}from"@solana/web3.js";var z={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 kd}from"@solana/spl-token";var qu=he("Raydium_txUtil"),zu=1644;function pr(s){let e=[],t=[];return s.microLamports&&(e.push(Du.setComputeUnitPrice({microLamports:s.microLamports})),t.push(z.SetComputeUnitPrice)),s.units&&(e.push(Du.setComputeUnitLimit({units:s.units})),t.push(z.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Co(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 fr(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 Ls(s,e){s.length<1&&qu.logWithError(`no instructions provided: ${s.toString()}`),e.length<1&&qu.logWithError(`no signers provided:, ${e.toString()}`);let t=new Gu;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...s);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<zu}catch{return!1}}function be(s,e){let[t,n]=Ad.findProgramAddressSync(s,e);return{publicKey:t,nonce:n}}function ei({instructions:s,payer:e,signers:t}){return Ls(s,[e,...t])}function ti({instructions:s,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Uu.generate().publicKey.toString()}){let i=new wd({payerKey:e,recentBlockhash:n,instructions:s}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xu(i).serialize()).toString("base64").length<zu}catch{return!1}}var hd=s=>Buffer.isBuffer(s)?s:s instanceof Uint8Array?Buffer.from(s.buffer,s.byteOffset,s.byteLength):Buffer.from(s),Td=s=>{let e=s.serialize({requireAllSignatures:!1,verifySignatures:!1});s instanceof Xu&&(e=hd(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function to(s){let e=[];return s.forEach(t=>{t instanceof Gu&&(t.recentBlockhash||(t.recentBlockhash=kd.toBase58()),t.feePayer||(t.feePayer=Uu.generate().publicKey)),e.push(Td(t))}),console.log("simulate tx string:",e),e}function re(s,e,t){return be([s.toBuffer(),(t!=null?t:Bd).toBuffer(),e.toBuffer()],new Id("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as ce}from"@solana/web3.js";var Yu=new ce("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Hu=new ce("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),Qu=new ce("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ni=new ce("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ig=new ce("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),ju=new ce("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ns=new ce("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),yr=new ce("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bg=new ce("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),$u=new ce("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),no=new ce("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),oi=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),br=new ce("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),oo=new ce("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xg=new ce("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Zu=new ce("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),xd=new ce("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Sd=new ce("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Kd=new ce("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Cd=new ce("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),io=new ce("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Ju=new ce("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sg=new ce("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),gr=new ce("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Pr=new ce("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),st=new ce("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"),Kg=new ce("WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh"),Cg=new ce("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),Rg=new ce("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),Lg=new ce("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),Ng=new ce("6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX"),ii={IDO_PROGRAM_ID_V1:xd,IDO_PROGRAM_ID_V2:Sd,IDO_PROGRAM_ID_V3:Kd,IDO_PROGRAM_ID_V4:Cd};var hn={OPEN_BOOK_PROGRAM:new ce("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),SERUM_PROGRAM_ID_V3:new ce("Ray1111111111111111111111111111111111111111"),AMM_V4:new ce("DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav"),AMM_STABLE:new ce("DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m"),CLMM_PROGRAM_ID:new ce("DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH"),CLMM_LOCK_PROGRAM_ID:new ce("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),CLMM_LOCK_AUTH_ID:new ce("6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN"),CREATE_CPMM_POOL_PROGRAM:new ce("DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb"),CREATE_CPMM_POOL_AUTH:new ce("CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq"),CREATE_CPMM_POOL_FEE_ACC:new ce("3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy"),LOCK_CPMM_PROGRAM:new ce("DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX"),LOCK_CPMM_AUTH:new ce("7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3"),UTIL1216:ce.default,Router:new ce("DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd"),FARM_PROGRAM_ID_V3:new ce("DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ"),FARM_PROGRAM_ID_V4:new ce("Ray1111111111111111111111111111111111111111"),FARM_PROGRAM_ID_V5:new ce("DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC"),FARM_PROGRAM_ID_V6:new ce("DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ"),LAUNCHPAD_PROGRAM:new ce("DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6"),LAUNCHPAD_AUTH:new ce("5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq"),LAUNCHPAD_PLATFORM:new ce("2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a"),LAUNCHPAD_CONFIG:new ce("7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt"),FEE_DESTINATION_ID:new ce("9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy"),MODEL_DATA_PUBKEY:new ce("Ray1111111111111111111111111111111111111111")};import De from"bn.js";var Pn=1e4;function Fe(s,e,t,n){if(e===void 0)return{amount:s,fee:void 0,expirationTime:void 0};let o=q(V({},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 De(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===Pn){let c=new De(i.maximumFee.toString());return{amount:s.add(c),fee:c,expirationTime:a}}else{let c=Wn(s.mul(new De(Pn)),new De(Pn-i.transferFeeBasisPoints)),u=new De(i.maximumFee.toString()),l=c.sub(s).gt(u)?s.add(u):c,m=Wn(l.mul(new De(i.transferFeeBasisPoints)),new De(Pn)),d=m.gt(r)?r:m;return{amount:l,fee:d,expirationTime:a}}else{let c=Wn(s.mul(new De(i.transferFeeBasisPoints)),new De(Pn)),u=c.gt(r)?r:c;return{amount:s,fee:u,expirationTime:a}}}function un(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 De(0))?t.add(new De(1)):t}function ro(s,e){if(s.isZero())return new De(0);let t=s.div(e);return t.isZero()?new De(1):s.mod(e).gt(new De(0))?t.add(new De(1)):t}function Os(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 De(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0,a=Wn(s.mul(new De(o.transferFeeBasisPoints)),new De(Pn)),c=a.gt(i)?i:a;return{amount:s,fee:c,expirationTime:r}}function vs(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 De(o.maximumFee.toString()),r=n<e.newerTransferFee.epoch?(Number(e.newerTransferFee.epoch)*432e3-t)*400/1e3:void 0;if(o.transferFeeBasisPoints===Pn){let a=new De(o.maximumFee.toString());return{amount:s.add(a),fee:a,expirationTime:r}}else{let a=Wn(s.mul(new De(Pn)),new De(Pn-o.transferFeeBasisPoints)),c=new De(o.maximumFee.toString()),u=a.sub(s).gt(c)?s.add(c):a,l=Wn(u.mul(new De(o.transferFeeBasisPoints)),new De(Pn)),m=l.gt(i)?i:l;return{amount:u,fee:m,expirationTime:r}}}import{PublicKey as Ms,AddressLookupTableAccount as No}from"@solana/web3.js";async function Fs({connection:s,address:e,cluster:t="mainnet"}){let n=await on(s,[...new Set(e.map(i=>i.toString()))].map(i=>new Ms(i))),o={};for(let i=0;i<e.length;i++){let r=n[i],a=e[i];if(!r)continue;let c=new No({key:a,state:No.deserialize(r.data)});o[a.toString()]=c,t==="devnet"?Lo[a.toString()]=c:Ro[a.toString()]=c}return o}var Ro={},Vs=async s=>{let e="AcL1Vo8oy1ULiavEcjSUcwfBSForXMudcZvDZy5nzJkU";if(Ro[e])return Ro;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Ro[e]=new No({key:t,state:No.deserialize(n.data)})),Ro},Lo={},_s=async s=>{let e="EFhMuDw1PKEuckuFRW9PavNfTH4LKP5uKHgyXDmWpFCq";if(Lo[e])return Lo;let t=new Ms(e),n=await s.getAccountInfo(t);return n&&(Lo[e]=new No({key:t,state:No.deserialize(n.data)})),Lo};import{PublicKey as Oo,sendAndConfirmTransaction as Es,SystemProgram as Rd,Transaction as ri,TransactionMessage as si,VersionedTransaction as ai}from"@solana/web3.js";import Ld from"axios";var Ar=2e3,wr=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 Ld.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}=pr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}addTipInstruction(e){var t;return e?(this.endInstructions.push(Rd.transfer({fromPubkey:(t=e.feePayer)!=null?t:this.feePayer,toPubkey:new Oo(e.address),lamports:BigInt(e.amount.toString())})),this.endInstructionTypes.push(z.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!==Oo.default.toString())),this}async versionBuild({txVersion:e,extInfo:t,lookupTableAddress:n}){return e===0?await this.buildV0(q(V({},t||{}),{lookupTableAddress:n})):this.build(t)}build(e){var n;let t=new ri;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 Co(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),to([t]),(l=this.owner)!=null&&l.isKeyPair)return{txId:a?await Es(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 Co(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let P=[],w=0;for(let T of r){if(++w,w<=p)continue;let h=await Es(this.connection,T,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});P.push(h)}return{txIds:P,signedTxs:r}}return{txIds:await await Promise.all(r.map(async P=>(P.recentBlockhash=b,await this.connection.sendRawTransaction(P.serialize(),{skipPreflight:y})))),signedTxs:r}}if(this.signAllTransactions){let P=r.map((T,h)=>(T.recentBlockhash=b,a[h].length&&T.sign(...a[h]),T));to(P);let w=await this.signAllTransactions(P);if(m){let T=0,h=[],k=async()=>{if(!w[T])return;let B=await this.connection.sendRawTransaction(w[T].serialize(),{skipPreflight:y});h.push({txId:B,status:"sent",signedTx:w[T]}),d==null||d([...h]),T++;let x=!1,S=null,I=null,C=N=>{S!==null&&clearInterval(S),I!==null&&this.connection.removeSignatureListener(I);let L=h.findIndex(v=>v.txId===B);if(L>-1){if(h[L].status==="error"||h[L].status==="success")return;h[L].status=N.err?"error":"success"}d==null||d([...h]),N.err||k()};this.loopMultiTxStatus&&(S=setInterval(async()=>{var N;if(x){clearInterval(S);return}try{let L=await this.connection.getTransaction(B,{commitment:"confirmed",maxSupportedTransactionVersion:0});L&&(x=!0,clearInterval(S),C({err:((N=L.meta)==null?void 0:N.err)||null}),console.log("tx status from getTransaction:",B))}catch(L){x=!0,clearInterval(S),console.error("getTransaction timeout:",L,B)}},Ar)),I=this.connection.onSignature(B,N=>{if(x){this.connection.removeSignatureListener(I);return}x=!0,C(N)},"confirmed"),this.connection.getSignatureStatus(B)};return await k(),{txIds:h.map(B=>B.txId),signedTxs:w}}else{let T=[];for(let h=0;h<w.length;h+=1){let k=await this.connection.sendRawTransaction(w[h].serialize(),{skipPreflight:y});T.push(k)}return{txIds:T,signedTxs:w}}}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=Xe(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=V(V({},this.cluster==="devnet"?await _s(this.connection):await Vs(this.connection)),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let b of c)a[b]===void 0&&u.push(new Oo(b));let l=await Fs({connection:this.connection,address:u});for(let[b,g]of Object.entries(l))a[b]=g;let m=o?Oo.default.toBase58():i!=null?i:await Co(this.connection,this.blockhashCommitment),d=new si({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 ai(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:P,notSendToRpc:w}=b||{};if(to([p]),(T=this.owner)!=null&&T.isKeyPair){let h=await this.connection.sendTransaction(p,{skipPreflight:g});return P&&await fr(this.connection,h),{txId:h,signedTx:p}}if(this.signAllTransactions){let h=await this.signAllTransactions([p]);if(this.signers.length)for(let k of h)try{k.sign(this.signers)}catch{}return{txId:w?"":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),to(r),(y=this.owner)!=null&&y.isKeyPair){if(m){let b=[];for(let g of r){let P=await this.connection.sendTransaction(g,{skipPreflight:f});await fr(this.connection,P),b.push(P)}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,P=[],w=async()=>{if(!b[g])return;let T=await this.connection.sendTransaction(b[g],{skipPreflight:f});P.push({txId:T,status:"sent",signedTx:b[g]}),d==null||d([...P]),g++;let h=!1,k=null,B=null,x=S=>{k!==null&&clearInterval(k),B!==null&&this.connection.removeSignatureListener(B);let I=P.findIndex(C=>C.txId===T);if(I>-1){if(P[I].status==="error"||P[I].status==="success")return;P[I].status=S.err?"error":"success"}d==null||d([...P]),S.err||w()};this.loopMultiTxStatus&&(k=setInterval(async()=>{var S;if(h){clearInterval(k);return}try{let I=await this.connection.getTransaction(T,{commitment:"confirmed",maxSupportedTransactionVersion:0});I&&(h=!0,clearInterval(k),x({err:((S=I.meta)==null?void 0:S.err)||null}),console.log("tx status from getTransaction:",T))}catch(I){h=!0,clearInterval(k),console.error("getTransaction timeout:",I,T)}},Ar)),B=this.connection.onSignature(T,S=>{if(h){this.connection.removeSignatureListener(B);return}h=!0,x(S)},"confirmed"),this.connection.getSignatureStatus(T)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let P=0;P<b.length;P+=1){let w=await this.connection.sendTransaction(b[P],{skipPreflight:f});g.push(w)}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=Xe(m,["splitIns","computeBudgetConfig"]),i=n?pr(n):{instructions:[],instructionTypes:[]},r=this.signers.reduce((p,f)=>q(V({},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(P=>P.keys.filter(w=>w.isSigner).map(w=>w.pubkey.toString())).flat()).values()].map(P=>new Oo(P));if(p!==t[l]&&u.length<12&&(ei({instructions:y,payer:this.feePayer,signers:g})||ei({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,ei({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ri().add(...i.instructions,...u)):a.push(new ri().add(...u)),c.push(Array.from(new Set(u.map(P=>P.keys.filter(w=>w.isSigner).map(w=>w.pubkey.toString())).flat())).map(P=>r[P]).filter(P=>P!==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);ei({instructions:n?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(y=>y.publicKey)})?a.push(new ri().add(...i.instructions,...u)):a.push(new ri().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:P=!0}=p||{},w=g!=null?g:await Co(this.connection,this.blockhashCommitment);if(a.forEach(async(h,k)=>{h.recentBlockhash=w,c[k].length&&h.sign(...c[k])}),to(a),(T=this.owner)!=null&&T.isKeyPair){if(f){let h=0,k=[];for(let B of a){if(++h,h<=b){k.push("tx skipped");continue}let x=await Es(this.connection,B,this.signers.find(S=>S.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:P});k.push(x)}return{txIds:k,signedTxs:a}}return{txIds:await Promise.all(a.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:P}))),signedTxs:a}}if(this.signAllTransactions){let h=await this.signAllTransactions(a.slice(b,a.length)),k=[...a.slice(0,b),...h];if(f){let B=0,x=[],S=async()=>{if(!k[B])return;B<b&&(x.push({txId:"",status:"success",signedTx:k[B]}),y==null||y([...x]),B++,S());let I=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:P});x.push({txId:I,status:"sent",signedTx:k[B]}),y==null||y([...x]),B++;let C=!1,N=null,L=null,v=R=>{N!==null&&clearInterval(N),L!==null&&this.connection.removeSignatureListener(L);let M=x.findIndex(G=>G.txId===I);if(M>-1){if(x[M].status==="error"||x[M].status==="success")return;x[M].status=R.err?"error":"success"}y==null||y([...x]),R.err||S()};this.loopMultiTxStatus&&(N=setInterval(async()=>{var R;if(C){clearInterval(N);return}try{let M=await this.connection.getTransaction(I,{commitment:"confirmed",maxSupportedTransactionVersion:0});M&&(C=!0,clearInterval(N),v({err:((R=M.meta)==null?void 0:R.err)||null}),console.log("tx status from getTransaction:",I))}catch(M){C=!0,clearInterval(N),console.error("getTransaction timeout:",M,I)}},Ar)),L=this.connection.onSignature(I,R=>{if(C){this.connection.removeSignatureListener(L);return}C=!0,v(R)},"confirmed"),this.connection.getSignatureStatus(I)};return await S(),{txIds:x.map(I=>I.txId),signedTxs:k}}else{let B=[];for(let x=0;x<k.length;x+=1){let S=await this.connection.sendRawTransaction(k[x].serialize(),{skipPreflight:P});B.push(S)}return{txIds:B,signedTxs:k}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}async sizeCheckBuildV0(e){var T;let w=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:o={},lookupTableAddress:i=[],insCountLimit:r=12}=w,a=Xe(w,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress","insCountLimit"]),c=V(V({},this.cluster==="devnet"?await _s(this.connection):await Vs(this.connection)),o),u=Array.from(new Set([...this.lookupTableAddress,...i])),l=[];for(let h of u)c[h]===void 0&&l.push(new Oo(h));let m=await Fs({connection:this.connection,address:l});for(let[h,k]of Object.entries(m))c[h]=k;let d=t?pr(t):{instructions:[],instructionTypes:[]},p=await Co(this.connection,this.blockhashCommitment),f=this.signers.reduce((h,k)=>q(V({},h),{[k.publicKey.toBase58()]:k}),{}),y=[],b=[],g=[],P=0;if(this.allInstructions.forEach(h=>{let k=[...g,h],B=t?[...d.instructions,...k]:k;if(h!==n[P]&&g.length<r&&(ti({instructions:B,payer:this.feePayer,lookupTableAddressAccount:c})||ti({instructions:k,payer:this.feePayer,lookupTableAddressAccount:c})))g.push(h);else{if(g.length===0)throw Error("item ins too big");P+=h===n[P]?1:0;let x={};for(let S of[...new Set(u)])c[S]!==void 0&&(x[S]=c[S]);if(t&&ti({instructions:[...d.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let S=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...d.instructions,...g]}).compileToV0Message(Object.values(c));y.push(new ai(S))}else{let S=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(c));y.push(new ai(S))}b.push(Array.from(new Set(g.map(S=>S.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(S=>f[S]).filter(S=>S!==void 0)),g=[h]}}),g.length>0){let k=[...new Set(g.map(B=>B.keys.filter(x=>x.isSigner).map(x=>x.pubkey.toString())).flat()).values()].map(B=>f[B]).filter(B=>B!==void 0);if(t&&ti({instructions:[...d.instructions,...g],payer:this.feePayer,lookupTableAddressAccount:c,recentBlockhash:p})){let B=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...d.instructions,...g]}).compileToV0Message(Object.values(c));y.push(new ai(B))}else{let B=new si({payerKey:this.feePayer,recentBlockhash:p,instructions:[...g]}).compileToV0Message(Object.values(c));y.push(new ai(B))}b.push(k)}return(T=this.owner)!=null&&T.signer&&b.forEach(h=>{h.some(k=>k.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),y.forEach((h,k)=>{h.sign(b[k])}),{builder:this,transactions:y,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async h=>{var C;let{sequentially:k,onTxUpdate:B,skipTxCount:x=0,recentBlockHash:S,skipPreflight:I=!0}=h||{};if(y.map(async(N,L)=>{b[L].length&&N.sign(b[L]),S&&(N.message.recentBlockhash=S)}),to(y),(C=this.owner)!=null&&C.isKeyPair){if(k){let N=0,L=[];for(let v of y){if(++N,N<=x){console.log("skip tx: ",N),L.push("tx skipped");continue}let R=await this.connection.sendTransaction(v,{skipPreflight:I});await fr(this.connection,R),L.push(R)}return{txIds:L,signedTxs:y}}return{txIds:await Promise.all(y.map(async N=>await this.connection.sendTransaction(N,{skipPreflight:I}))),signedTxs:y}}if(this.signAllTransactions){let N=await this.signAllTransactions(y.slice(x,y.length)),L=[...y.slice(0,x),...N];if(k){let v=0,R=[],M=async()=>{if(!L[v])return;if(v<x){R.push({txId:"",status:"success",signedTx:L[v]}),B==null||B([...R]),v++,M();return}let G=await this.connection.sendTransaction(L[v],{skipPreflight:I});R.push({txId:G,status:"sent",signedTx:L[v]}),B==null||B([...R]),v++;let Y=!1,J=null,ee=null,ie=de=>{J!==null&&clearInterval(J),ee!==null&&this.connection.removeSignatureListener(ee);let ne=R.findIndex(Z=>Z.txId===G);if(ne>-1){if(R[ne].status==="error"||R[ne].status==="success")return;R[ne].status=de.err?"error":"success"}B==null||B([...R]),de.err||M()};this.loopMultiTxStatus&&(J=setInterval(async()=>{var de;if(Y){clearInterval(J);return}try{let ne=await this.connection.getTransaction(G,{commitment:"confirmed",maxSupportedTransactionVersion:0});ne&&(Y=!0,clearInterval(J),ie({err:((de=ne.meta)==null?void 0:de.err)||null}),console.log("tx status from getTransaction:",G))}catch(ne){Y=!0,clearInterval(J),console.error("getTransaction timeout:",ne,G)}},Ar)),ee=this.connection.onSignature(G,de=>{if(Y){this.connection.removeSignatureListener(ee);return}Y=!0,ie(de)},"confirmed"),this.connection.getSignatureStatus(G)};return M(),{txIds:[],signedTxs:L}}else{let v=[];for(let R=0;R<L.length;R+=1){let M=await this.connection.sendTransaction(L[R],{skipPreflight:I});v.push(M)}return{txIds:v,signedTxs:L}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:a||{}}}};import{PublicKey as Nd}from"@solana/web3.js";import Od from"bn.js";function vd(s){return typeof s=="object"&&s!==null&&![Ye,Me,Nd,Ne,Od,Mt,lt].some(e=>typeof e=="object"&&s instanceof e)}function yt(s){return typeof s=="string"?Bs(s):Array.isArray(s)?s.map(e=>yt(e)):vd(s)?Object.fromEntries(Object.entries(s).map(([e,t])=>[e,yt(t)])):s}import Md from"bn.js";var Vt=new Md(1e6);var mt={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/v2/tag?query=verified",POOL_LIST:"/pools/info/list-v2",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/list-v2",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_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"},ec=q(V({},mt),{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 tc="ray_tab_hash",Ws="ray_req_hash",Fd=()=>{if(typeof window===void 0)return"";let s=sessionStorage.getItem(tc);return s||(s=`ray-${Date.now()}`,sessionStorage.setItem(tc,s)),s},kr=async n=>{var o=n,{logCount:s=1e3,removeLastLog:e}=o,t=Xe(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(r=>r());let i=JSON.parse(localStorage.getItem(Ws)||"[]").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(V({},t),{time:Date.now(),session:Fd()}));try{localStorage.setItem(Ws,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(Ws,JSON.stringify(i)),r=!0}catch{r=!1}}return new Promise(c=>c())}return kr(q(V({},t),{logCount:s,removeLastLog:!0}))}};var hr=he("Raydium_Api"),Ds=new Map,qs=new Map;var Tr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=nc.create({baseURL:this.urlConfigs.BASE_HOST||(this.cluster==="devnet"?ec.BASE_HOST:mt.BASE_HOST),timeout:t}),this.api.interceptors.request.use(r=>{let{method:a,baseURL:c,url:u}=r;return hr.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),r},r=>(hr.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&&kr({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),hr.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&&kr({status:u,url:`${m}${d}`,params:a.params,data:r.message,logCount:this.logCount}),hr.error(`${l.toUpperCase()} ${m}${d} ${u||r.message}`),Promise.reject(r)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||mt.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||mt.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_POSITION_LINE||mt.POOL_POSITION_LINE}?id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await nc.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||mt.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||mt.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||mt.TOKEN_LIST)).data}async getJupTokenList(){return(await this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||mt.JUP_TOKEN_LIST})).map(t=>q(V({},t),{chainId:101,programId:t.tokenProgram,address:t.id,logoURI:t.icon,extensions:{},freeze_authority:null,permanent_delegate:null,mint_authority:t.mintAuthority||null,minted_at:Date.now().toString()}))}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||mt.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",showFarms:i=!1,nextPageId:r,pageSize:a=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||mt.POOL_LIST)+`?size=${a}&hasReward=${i}${t&&t!=="all"?`&poolType=${t}`:""}${n?`&sortField=${n}`:""}${o?`&sortType=${o}`:""}${r?`&nextPageId=${r}`:""}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||mt.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(r=>Ds.has(r)?(n.push(Ds.get(r)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||mt.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{Ds.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:r="desc",nextPageId:a}=e,[c,u]=[t&&Pt(t).toBase58(),n&&n!=="undefined"?Pt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];if(!c&&!u)throw new Error("not search mints provided");return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||mt.POOL_SEARCH_MINT)+`?size=100&mint1=${l}${m?`&mint2=${m}`:""}${o&&o!=="all"?`&poolType=${o}`:""}${i?`&sortField=${i}`:""}${r?`&sortType=${r}`:""}${a?`&nextPageId=${a}`:""}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||mt.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||mt.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||mt.CHECK_AVAILABILITY)).data}async fetchLaunchConfigs(){var t;if((t=qs.get(this.cluster))!=null&&t.length)return qs.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 qs.set(this.cluster,e.data.data),e.data.data}};var Ir="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",oc="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as Rr,SystemProgram as pp}from"@solana/web3.js";import{AccountLayout as Fo,createAssociatedTokenAccountIdempotentInstruction as Js,TOKEN_PROGRAM_ID as Gn,TOKEN_2022_PROGRAM_ID as fp}from"@solana/spl-token";var Us=(...s)=>s.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),qe=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=he(t)}createTxBuilder(e){return this.scope.checkOwner(),new wr({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(Us(e))}logInfo(...e){this.logger.info(Us(e))}logAndCreateError(...e){let t=Us(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as ap,SystemProgram as up}from"@solana/web3.js";import cp from"bn.js";import{createCloseAccountInstruction as lp,createInitializeAccountInstruction as mp,createTransferInstruction as dp,TOKEN_PROGRAM_ID as Mo}from"@solana/spl-token";import{Keypair as op,PublicKey as Pc}from"@solana/web3.js";import ip from"bn.js";import{TOKEN_PROGRAM_ID as rp}from"@solana/spl-token";function Vd(s){return s instanceof Uint8Array||s!=null&&typeof s=="object"&&s.constructor.name==="Uint8Array"}function Gs(s,...e){if(!Vd(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 Xs(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 ic(s,e){Gs(s);let t=e.outputLen;if(s.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var xr=s=>new DataView(s.buffer,s.byteOffset,s.byteLength),cn=(s,e)=>s<<32-e|s>>>e;var uA=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function _d(s){if(typeof s!="string")throw new Error(`utf8ToBytes expected string, got ${typeof s}`);return new Uint8Array(new TextEncoder().encode(s))}function zs(s){return typeof s=="string"&&(s=_d(s)),Gs(s),s}var Br=class{clone(){return this._cloneInto()}},cA={}.toString;function rc(s){let e=n=>s().update(zs(n)).digest(),t=s();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>s(),e}function Ed(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 sc=(s,e,t)=>s&e^~s&t,ac=(s,e,t)=>s&e^s&t^e&t,Sr=class extends Br{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=xr(this.buffer)}update(e){Xs(this);let{view:t,buffer:n,blockLen:o}=this;e=zs(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=xr(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){Xs(this),ic(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;Ed(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=xr(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 Wd=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),Ys=class extends Sr{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=cn(d,7)^cn(d,18)^d>>>3,y=cn(p,17)^cn(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=cn(a,6)^cn(a,11)^cn(a,25),p=l+d+sc(a,c,u)+Wd[m]+qn[m]|0,y=(cn(n,2)^cn(n,13)^cn(n,22))+ac(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 uc=rc(()=>new Ys);import{PublicKey as Jd}from"@solana/web3.js";import pc,{isBN as fc}from"bn.js";import{bits as Dd,BitStructure as PA,blob as qd,Blob as AA,cstr as wA,f32 as kA,f32be as hA,f64 as TA,f64be as IA,greedy as BA,Layout as Ud,ns64 as xA,ns64be as SA,nu64 as Gd,nu64be as KA,offset as Xd,s16 as CA,s16be as RA,s24 as LA,s24be as NA,s32 as zd,s32be as OA,s40 as vA,s40be as MA,s48 as FA,s48be as VA,s8 as _A,seq as Yd,struct as EA,Structure as Hd,u16 as Qd,u16be as WA,u24 as DA,u24be as qA,u32 as jd,u32be as UA,u40 as GA,u40be as XA,u48 as zA,u48be as YA,u8 as $d,UInt as Zd,union as HA,Union as QA,unionLayoutDiscriminator as jA,utf8 as $A}from"@solana/buffer-layout";var Kr=Ud,cc=Hd;var Hs=Zd;var lc=$d,Gt=Qd;var ui=jd;var mc=Gd;var Ue=zd;var dc=Yd;var Le=qd;var Qs=Dd,js=Xd;var ao=class extends Kr{constructor(t,n,o){super(t,o);this.blob=Le(t),this.signed=n}decode(t,n=0){let o=new pc(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 pc(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},Cr=class extends Kr{constructor(t){super(8,t);this._lower=Qs(ui(),!1),this._upper=Qs(ui(),!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 V(V({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(s){return new Hs(1,s)}function kt(s){return new Hs(4,s)}function A(s){return new ao(8,!1,s)}function le(s){return new ao(16,!1,s)}function yc(s){return new ao(1,!0,s)}function vo(s){return new ao(8,!0,s)}function bc(s){return new ao(16,!0,s)}var uo=class extends Kr{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 uo(Le(32),e=>new Jd(e),e=>e.toBuffer(),s)}function He(s){return new uo(lc(),ep,tp,s)}function ep(s){if(s===0)return!1;if(s===1)return!0;throw new Error("Invalid bool: "+s)}function tp(s){return s?1:0}function gc(s,e){let t=ui("length"),n=_([t,Q(s,js(t,-t.span),"values")]);return new uo(n,({values:o})=>o,o=>({values:o}),e)}function np(s){let e=ui("length"),t=_([e,Le(js(e,-e.span),"data")]);return new uo(t,({data:n})=>n,n=>({data:n}),s)}function _t(s){return new uo(np(),e=>e.toString("utf-8"),e=>Buffer.from(e,"utf-8"),s)}var $s=class extends cc{decode(e,t){return super.decode(e,t)}};function _(s,e,t){return new $s(s,e,t)}function Q(s,e,t){let n,o=typeof e=="number"?e:fc(e)?e.toNumber():new Proxy(e,{get(i,r){if(!n){let a=Reflect.get(i,"count");n=fc(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 dc(s,o,t)}var co=_([F("mint"),F("owner"),A("amount"),kt("delegateOption"),F("delegate"),E("state"),kt("isNativeOption"),A("isNative"),A("delegatedAmount"),kt("closeAuthorityOption"),F("closeAuthority")]);var Pw=he("Raydium_Util");function Ac({owner:s,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:r}of t.value){let a=co.decode(r.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:re(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:Pc.default,amount:new ip(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function Je({fromPublicKey:s,programId:e=rp,assignSeed:t}){let n=t?btoa(t).slice(0,32):op.generate().publicKey.toBase58().slice(0,32);return{publicKey:sp(s,n,e),seed:n}}function sp(s,e,t){let n=Buffer.concat([s.toBuffer(),Buffer.from(e),t.toBuffer()]),o=uc(n);return new Pc(o)}function Zs(s){let{mint:e,tokenAccount:t,owner:n,programId:o=Mo}=s;return mp(t,e,n,o)}function Tn(s){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Mo}=s;return lp(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(co.span,n),c=se(t).add(new cp(a)),u=Je({fromPublicKey:o,programId:Mo});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[up.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:co.span,programId:Mo}),Zs({mint:new ap(wt.address),tokenAccount:u.publicKey,owner:i,programId:Mo})],instructionTypes:[z.CreateAccount,z.InitAccount],endInstructionTypes:r?[]:[z.CloseAccount],endInstructions:r?[]:[Tn({tokenAccount:u.publicKey,payer:o,owner:i})]}}function wc({source:s,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Mo}){return dp(s,e,t,BigInt(String(n)),o,i)}var ci=class extends qe{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 re(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=V(V({},{}),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:fp},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Ac({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,P;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 Rr(t.tokenProgram||Gn),d=this.getAssociatedTokenAccount(n,new Rr(m)),p=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!i||w.pubkey.equals(d))).sort((w,T)=>w.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 w=Js(o.payer||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(w),f.instructionTypes.push(z.CreateATA);else if(!(h.owner.equals(m)&&Fo.decode(h.data).mint.equals(n)&&Fo.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(w),f.instructionTypes.push(z.CreateATA));if(n.equals($)&&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(wc({source:h.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:Gn})),f.instructionTypes.push(z.TransferAmount))}return!c&&T===void 0&&(f.endInstructions.push(Tn({owner:r,payer:o.payer||r,tokenAccount:d,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:d,instructionParams:f}}else{let w=Je({fromPublicKey:r,programId:m,assignSeed:l}),T=await this.scope.connection.getMinimumBalanceForRentExemption(Fo.span),h=pp.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:w.seed,newAccountPubkey:w.publicKey,lamports:T+Number((P=(g=o.amount)==null?void 0:g.toString())!=null?P:0),space:Fo.span,programId:m});return f.instructions.push(h,Zs({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(z.CreateAccount),f.instructionTypes.push(z.InitAccount),c||(f.endInstructions.push(Tn({owner:r,payer:o.payer||r,tokenAccount:w.publicKey,programId:m})),f.endInstructionTypes.push(z.CloseAccount)),{account:w.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 Js(r,u,r,t,n);a.instructions=[l],a.instructionTypes=[z.CreateATA],i=u}return o&&$.toBase58()===t.toBase58()&&(a.endInstructions=[Tn({owner:r,payer:r,tokenAccount:i,programId:n})],a.endInstructionTypes=[z.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 Rr($).equals(i)){let p=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return V({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Js(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)&&Fo.decode(y.data).mint.equals(i)&&Fo.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:[z.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 Rr($))&&r){let m=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:p}=m,f=Xe(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=Xe(d,["tokenAccount"]);u=p,l.addInstruction(f)}return V({tokenAccount:u},l.AllTxData)}};import{PublicKey as Oe,SystemProgram as Lp}from"@solana/web3.js";import{createAssociatedTokenAccountIdempotentInstruction as Fc}from"@solana/spl-token";import{PublicKey as sa}from"@solana/web3.js";var ea=_([E("instruction")]),ta=_([E("instruction")]),yp=_([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),le("accRewardPerShare"),F("rewardVault"),F("rewardMint"),F("rewardSender"),A("rewardType"),Q(A(),15,"padding")]),bp=_([A("state"),A("nonce"),F("lpVault"),F("rewardVault"),F(),F(),A(),A(),A("totalReward"),le("perShareReward"),A("lastSlot"),A("perSlotReward")]),gp=_([A("state"),A("nonce"),F("lpVault"),F("rewardVaultA"),A("totalRewardA"),le("perShareRewardA"),A("perSlotRewardA"),E("option"),F("rewardVaultB"),Le(7),A("totalRewardB"),le("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),F()]),Pp=_([A(),A("state"),A("nonce"),A("validRewardTokenNum"),le("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),F("lpMint"),F("lpVault"),Q(yp,5,"rewardInfos"),F("creator"),F(),Q(A(),32,"padding")]),Ap=new Proxy(bp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(s,e,t)}}),wp=new Proxy(gp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},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)}}),Lr=new Proxy(Pp,{get(s,e,t){return e==="decode"?(...n)=>{let o=s.decode(...n);return q(V({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var r;return q(V({},i),{rewardType:((r=Object.entries(Xn).find(a=>String(a[1])===i.rewardType.toString()))!=null?r:["Standard SPL"])[0]})})})}:Reflect.get(s,e,t)}}),kp=_([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),na=_([E("instruction"),A("nonce"),Q(kp,5,"rewardTimeInfo")]),oa=_([E("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),ia=_([E("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),jw=_([A("state"),F("id"),F("owner"),A("deposited"),Q(A(),1,"rewardDebts")]),ra=_([A("state"),F("id"),F("owner"),A("deposited"),Q(le(),1,"rewardDebts"),A(""),A("voteLockedBalance"),Q(A(),15)]),$w=_([A("state"),F("id"),F("owner"),A("deposited"),Q(A(),2,"rewardDebts")]),kc=_([A("state"),F("id"),F("owner"),A("deposited"),Q(le(),2,"rewardDebts"),Q(A(),17)]),hc=_([A(),A("state"),F("id"),F("owner"),A("deposited"),Q(le(),5,"rewardDebts"),Q(A(),16)]),Xt=_([E("instruction"),A("amount")]),hp=_([F("mint"),F("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),yc("digitShift"),Q(E(),7,"reserved1"),Q(A(),7,"reserved2")]),Tp=_([Le(8),F("governanceProgramId"),F("realm"),F("realmGoverningTokenMint"),F("realmAuthority"),Q(E(),32,"reserved1"),Q(hp,4,"votingMints"),vo("timeOffset"),E("bump"),Q(E(),7,"reserved2"),Q(A(),11,"reserved3")]),Ip=_([vo("startTime"),vo("endTime"),E("kind"),Q(E(),15,"reserved")]),Bp=_([Q(Ip,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),He("isUsed"),He("allowClawback"),E("votingMintConfigIdx"),Q(E(),29,"reserved")]),xp=_([Le(8),F("voterAuthority"),F("registrar"),Q(Bp,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),Q(E(),94,"reserved")]);import{NATIVE_MINT as sk}from"@solana/spl-token";var ak=he("Raydium_farm_config"),Tc=new sa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Ic=new sa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var uk=new sa("3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX");var Bc={3:ra,5:kc,6:hc},aa=s=>[3,4,5,6].indexOf(s)!==-1,ua=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},$t={[Yu.toString()]:3,[Hu.toString()]:4,[Qu.toString()]:5,[ni.toString()]:6,[hn.FARM_PROGRAM_ID_V3.toString()]:3,[hn.FARM_PROGRAM_ID_V4.toString()]:4,[hn.FARM_PROGRAM_ID_V5.toString()]:5,[hn.FARM_PROGRAM_ID_V6.toString()]:6};import{PublicKey as we,SystemProgram as Kc,SYSVAR_CLOCK_PUBKEY as di,SYSVAR_RENT_PUBKEY as Cp,TransactionInstruction as Jt}from"@solana/web3.js";import Cc from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Wk,createAssociatedTokenAccountIdempotentInstruction as Dk,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";import Sp from"bn.js";var Kp=he("Raydium.farm.util");function li({programId:s,poolId:e,mint:t,type:n}){let{publicKey:o}=be([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}=be([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],s);return o}var xc=({programId:s,poolId:e})=>be([e.toBuffer()],s);function Sc(s){return{isSet:new Sp(1),rewardPerSecond:se(s.perSecond),rewardOpenTime:se(s.openTime),rewardEndTime:se(s.endTime),rewardType:se(Xn[s.rewardType])}}function ca(s){return se(s.endTime).sub(se(s.openTime)).mul(se(s.perSecond))}function mi(s){let e=Bc[s];return e||Kp.logWithError("invalid version",s),e}var Rp=he("Raydium_farm_instruction"),Zk={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 pi(s){let{version:e,id:t,ledger:n,programId:o,owner:i}=s,r={3:9,5:10}[e];r||Rp.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(ea.span);ea.encode({instruction:r},a);let c=[K({pubkey:t}),K({pubkey:n}),K({pubkey:i,isWritable:!1}),K({pubkey:Kc.programId,isWritable:!1}),K({pubkey:Cp,isWritable:!1})];return{instruction:new Jt({programId:o,keys:c,data:a}),instructionType:z.FarmV3CreateLedger}}function Rc(s){var n;let e=Buffer.alloc(na.span);na.encode({instruction:0,nonce:new Cc(s.nonce),rewardTimeInfo:s.rewardInfoConfig},e);let t=[...Ts,K({pubkey:s.farmId}),K({pubkey:s.farmAuthority,isWritable:!1}),K({pubkey:s.lpVault}),K({pubkey:s.lpMint,isWritable:!1}),K({pubkey:s.lockVault}),K({pubkey:s.lockMint,isWritable:!1}),K({pubkey:(n=s.lockUserAccount)!=null?n:ct}),K({pubkey:s.owner,isWritable:!1,isSigner:!0})];for(let o of s.rewardInfo)t.push(K({pubkey:o.rewardMint,isWritable:!1}),K({pubkey:o.rewardVault}),K({pubkey:o.userRewardToken}));return{instruction:new Jt({programId:s.programId,keys:t,data:e}),instructionType:z.FarmV6Create}}function Lc(s){let e=Buffer.alloc(ta.span);ta.encode({instruction:5},e);let t=[K({pubkey:In,isWritable:!1}),K({pubkey:s.id}),K({pubkey:s.authority,isWritable:!1}),K({pubkey:s.lpVault,isWritable:!1}),K({pubkey:s.rewardVault}),K({pubkey:s.userRewardToken}),K({pubkey:s.owner,isWritable:!1,isSigner:!0})];return{instruction:new Jt({programId:s.programId,keys:t,data:e}),instructionType:z.FarmV6CreatorWithdraw}}function la({payer:s,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(oa.span);oa.encode({instruction:3,rewardReopenTime:se(o.openTime),rewardEndTime:se(o.endTime),rewardPerSecond:se(o.perSecond)},i);let r=[K({pubkey:In,isWritable:!1}),K({pubkey:n.id}),K({pubkey:n.lpVault,isWritable:!1}),K({pubkey:e}),K({pubkey:t}),K({pubkey:s,isWritable:!1,isSigner:!0})];return new Jt({programId:n.programId,keys:r,data:i})}function ma({payer:s,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(ia.span);ia.encode({instruction:4,isSet:new Cc(1),rewardPerSecond:se(o.perSecond),rewardOpenTime:se(o.openTime),rewardEndTime:se(o.endTime),rewardType:se(Xn[o.rewardType])},i);let r=[...Ts,K({pubkey:t.id}),K({pubkey:t.authority,isWritable:!1}),K({pubkey:o.mint,isWritable:!1}),K({pubkey:n}),K({pubkey:e}),K({pubkey:s,isWritable:!1,isSigner:!0})];return new Jt({programId:t.programId,keys:r,data:i})}function fi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new we(e.programId),new we(e.id)],u=Zt({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Xt.span);Xt.encode({instruction:2,amount:se(r)},l);let m=[K({pubkey:In,isWritable:!1}),K({pubkey:c}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:u}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(K({pubkey:new we(t.rewardInfos[d].vault)})),m.push(K({pubkey:o[d]}));return new Jt({programId:a,keys:m,data:l})}function yi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:12,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(K({pubkey:o[p]})),d.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Nc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=_([E("instruction"),A("amount")]),m=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:a[0]}),K({pubkey:i,isSigner:!0,isWritable:!1}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1}),K({pubkey:o[1]}),K({pubkey:new we(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:r},d),new Jt({keys:m,programId:c,data:d})}function bi(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:11,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Oc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:10,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function vc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r,userAuxiliaryLedgers:a}=s,[c,u]=[new we(e.programId),new we(e.id)],l=Zt({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc(Xt.span);Xt.encode({instruction:11,amount:se(r)},m);let d=[K({pubkey:u}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:l}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n}),K({pubkey:new we(t.lpVault)}),K({pubkey:o[0]}),K({pubkey:new we(t.rewardInfos[0].vault)}),K({pubkey:di,isWritable:!1}),K({pubkey:In,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(K({pubkey:o[p]})),d.push(K({pubkey:new we(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(K({pubkey:p}));return new Jt({programId:c,keys:d,data:m})}function Mc(s){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:r}=s,[a,c]=[new we(e.programId),new we(e.id)],u=Zt({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc(Xt.span);Xt.encode({instruction:1,amount:se(r)},l);let m=[K({pubkey:In,isWritable:!1}),K({pubkey:Kc.programId,isWritable:!1}),K({pubkey:c}),K({pubkey:new we(t.authority),isWritable:!1}),K({pubkey:new we(t.lpVault)}),K({pubkey:u}),K({pubkey:i,isWritable:!1,isSigner:!0}),K({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(K({pubkey:new we(t.rewardInfos[d].vault)})),m.push(K({pubkey:o[d]}));return new Jt({programId:a,keys:m,data:l})}var gi=class extends qe{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(ct)){let n=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ca(q(V({},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=ni,txVersion:i,feePayer:r,lockProgram:a}){var B,x;this.checkDisabled(),this.scope.checkOwner();let u={lpMint:new Oe(e.lpMint.address),lockInfo:{lockMint:(B=a==null?void 0:a.mint)!=null?B:Tc,lockVault:(x=a==null?void 0:a.vault)!=null?x:Ic},version:6,rewardInfos:t,programId:o},l=this.createTxBuilder(r),m=n!=null?n:this.scope.ownerPubKey,d=Je({fromPublicKey:m,programId:u.programId}),p=await this.scope.connection.getMinimumBalanceForRentExemption(Lr.span);l.addInstruction({instructions:[Lp.createAccountWithSeed({fromPubkey:m,basePubkey:m,seed:d.seed,newAccountPubkey:d.publicKey,lamports:p,space:Lr.span,programId:u.programId})]});let{publicKey:f,nonce:y}=xc({programId:new Oe(u.programId),poolId:d.publicKey}),b=li({programId:u.programId,poolId:d.publicKey,mint:u.lpMint,type:"lpVault"}),g=[],P=[];for(let S of u.rewardInfos){S.openTime>=S.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",S.openTime.toString()),isNaN(Xn[S.rewardType])&&this.logAndCreateError("rewardType error",S.rewardType),Number(S.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",S.perSecond),g.push(Sc(S));let{rewardPubKey:I,newInstruction:C}=await this._getUserRewardInfo({rewardInfo:S,payer:m});C&&l.addInstruction(C),I||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let N=S.mint.equals(ct)?new Oe(wt.address):S.mint;P.push({rewardMint:N,rewardVault:li({programId:u.programId,poolId:d.publicKey,mint:N,type:"rewardVault"}),userRewardToken:I})}let{account:w,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new Oe(u.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});T&&l.addInstruction(T),w||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:k}=Rc({farmId:d.publicKey,owner:this.scope.ownerPubKey,farmAuthority:f,lpVault:b,lpMint:u.lpMint,lockVault:u.lockInfo.lockVault,lockMint:u.lockInfo.lockMint,lockUserAccount:w,programId:u.programId,rewardInfo:P,rewardInfoConfig:g,nonce:y});return l.addInstruction({instructions:[h],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:d.publicKey,farmAuthority:f,lpVault:b,lockUserAccount:w,nonce:y}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o,feePayer:i}){var g;let r=$t[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=yt((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(ct)?new Oe(wt.address):n.mint,m=c.rewardInfos.findIndex(P=>new Oe(P.mint.address).equals(l)),d=a.rewardInfos[m];d||this.logAndCreateError("configuration does not exist","rewardMint",l);let p=(g=d.vault)!=null?g:ct,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:[la({payer:this.scope.ownerPubKey,rewardVault:p,userRewardTokenPub:y,farmKeys:c,rewardInfo:n})],instructionTypes:[z.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o,feePayer:i}){var m;let r=$t[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let a=yt((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(ct)?new Oe(wt.address):d.mint,f=c.rewardInfos.findIndex(T=>new Oe(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:ct,{rewardPubKey:g,newInstruction:P}=await this._getUserRewardInfo({rewardInfo:d,payer:u});P&&l.addInstruction(P),g||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=la({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:g,farmKeys:c,rewardInfo:d});l.addInstruction({instructions:[w],instructionTypes:[z.FarmV6Restart]})}return l.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i,feePayer:r}=e,a=$t[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=yt((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,l=this.createTxBuilder(r),m=o.mint.equals(ct)?new Oe(wt.address):o.mint,d=li({programId:new Oe(n.programId),poolId:new Oe(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:[ma({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:c,rewardVault:d,rewardInfo:o})],instructionTypes:[z.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i,feePayer:r}=e,a=$t[n.programId];a!==6&&this.logAndCreateError("invalid farm version ",a);let c=yt((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(ct)?new Oe(wt.address):m.mint,p=li({programId:new Oe(n.programId),poolId:new Oe(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=ma({payer:this.scope.ownerPubKey,userRewardTokenPub:f,farmKeys:c,rewardVault:p,rewardInfo:q(V({},m),{mint:d})});l.addInstruction({instructions:[b],instructionTypes:[z.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=$t[p];f===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),aa(f)||this.logAndCreateError("invalid farm program:",n.programId);let[y,b]=[new Oe(n.programId),new Oe(n.id)],g=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],P=Zt({programId:y,poolId:b,owner:this.scope.ownerPubKey,version:f}),w=this.createTxBuilder(i);w.addCustomComputeBudget(l),w.addTipInstruction(m);let T={};for(let v of this.scope.account.tokenAccounts)if(a){let R=re(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&R.equals(v.publicKey)&&(T[v.mint.toString()]=v.publicKey)}else T[v.mint.toString()]=v.publicKey;let h=g.lpMint,k=T[h.address];k||this.logAndCreateError("you don't have any lp","lp zero",T);let B=[];for(let v of d){let R=r&&v.mint.address===$.toString(),M=T[v.mint.address];if(!M){let{account:G,instructionParams:Y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new Oe(v.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:a,checkCreateATAOwner:c});M=G,Y&&w.addInstruction(Y)}T[v.mint.address]=M,B.push(M)}let x,S=await this.scope.connection.getAccountInfo(P);if(S&&(x=mi(f).decode(S.data)),n.programId!==ni.toString()&&n.programId!==hn.FARM_PROGRAM_ID_V6.toString()&&!x){let{instruction:v,instructionType:R}=pi({id:b,programId:y,version:f,ledger:P,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[v],instructionTypes:[R]})}let I=ua({version:f,rewardInfos:d,rewardTokenAccountsPublicKeys:B});I&&this.logAndCreateError(I);let C={amount:se(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:g,lpAccount:k,rewardAccounts:B,userAuxiliaryLedgers:u==null?void 0:u.map(v=>new Oe(v))},N=f===6?Mc(C):f===5?vc(C):Oc(C),L={3:z.FarmV3Deposit,5:z.FarmV5Deposit,6:z.FarmV6Deposit};return w.addInstruction({instructions:[N],instructionTypes:[L[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=$t[n.programId];aa(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=re(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 Oe(n.programId),poolId:new Oe(n.id),owner:this.scope.ownerPubKey,version:f}),C=await this.scope.connection.getAccountInfo(I);if(C)mi(f).decode(C.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(f!==6){let{instruction:N,instructionType:L}=pi({id:new Oe(y.id),programId:new Oe(y.programId),version:f,ledger:I,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[N],instructionTypes:[L]})}}i&&i.isZero()&&!(l||[]).length&&this.logAndCreateError("no deposited lp",{farmId:n.id});let P=y.lpMint.address,w=r&&P===$.toString(),T=g[P.toString()];if(!T){let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new Oe(P),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:c,checkCreateATAOwner:u});T=I,C&&b.addInstruction(C)}g[P.toString()]=T;let h=[];for(let I of p){let C=r&&I.mint.address===$.toString(),N=g[I.mint.address];if(!N){let{account:L,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:I.mint.programId,mint:new Oe(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});N=L,v&&b.addInstruction(v)}g[I.mint.address]=N,h.push(N)}let k=ua({version:f,rewardInfos:p,rewardTokenAccountsPublicKeys:h});k&&this.logAndCreateError(k);let B={amount:se(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:T,rewardAccounts:h,userAuxiliaryLedgers:l==null?void 0:l.map(I=>new Oe(I))},x=f===6?fi(B):f===5?yi(B):f===4?Nc(B):bi(B),S={3:z.FarmV3Withdraw,4:z.FarmV4Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};return b.addInstruction({instructions:[x],instructionTypes:[S[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=yt((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),c=$t[e.programId];c!==6&&this.logAndCreateError("invalid farm version",c);let u=a.rewardInfos.find(b=>Pt(b.mint.address).equals(Pt(t)));u||this.logAndCreateError("withdraw mint error","rewardInfos",e);let l=(y=u==null?void 0:u.vault)!=null?y:ct,m=this.createTxBuilder(r),d;if(t.equals(ct)||t.equals(Oe.default)){let b=await Un({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ca(q(V({},u),{openTime:u.openTime,endTime:u.endTime,perSecond:new O(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:[Fc(this.scope.ownerPubKey,d,this.scope.ownerPubKey,t)],instructionTypes:[z.CreateATA]}))}let{instruction:p,instructionType:f}=Lc({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=re(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(V({},f),{[y.id]:y}),{});for(let f of Object.values(t)){let{programId:y,lpMint:b,rewardInfos:g,id:P}=f,w=$t[y],T=b.address,h=n&&T===$.toString(),k=m[T];if(!k){let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new Oe(T),notUseTokenAccount:h,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:i,checkCreateATAOwner:r});k=N,L&&l.addInstruction(L)}m[T.toString()]=k;let B=[];for(let N of g){let L=n&&N.mint.address===$.toString(),v=m[N.mint.address];if(!v)if(L){let{account:R,instructionParams:M}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:N.mint.programId,mint:new Oe(N.mint.address),notUseTokenAccount:L,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!L,associatedOnly:L?!1:i,checkCreateATAOwner:r});v=R,M&&l.addInstruction(M)}else{let R=new Oe(N.mint.address);v=this.scope.account.getAssociatedTokenAccount(R),l.addInstruction({instructions:[Fc(this.scope.ownerPubKey,v,this.scope.ownerPubKey,R)]})}m[N.mint.address]=v,B.push(v)}let x=p[P],S={amount:Ft,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:x,lpAccount:k,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(N=>new Oe(N))},I=w===6?fi(S):w===5?yi(S):bi(S),C={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[C[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as tt}from"@solana/web3.js";import{AccountLayout as kf,NATIVE_MINT as Yr,TOKEN_PROGRAM_ID as Hn}from"@solana/spl-token";import{Keypair as Vr,PublicKey as H,SystemProgram as Kn,TransactionInstruction as bt}from"@solana/web3.js";import ha from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Bi,TOKEN_2022_PROGRAM_ID as $e,TOKEN_PROGRAM_ID as Ve}from"@solana/spl-token";import Dp from"bn.js";import en from"bn.js";var Qe=new en(0),zt=new en(1),Bn=new en(-1),at=new en(1).shln(64),Nr=new en(1).shln(128),Pi=at.sub(zt),Ai=64,Vc=Nr.subn(1),ht=-443636,xt=-ht,St=new en("4295048016"),Kt=new en("79226673521066979257578248091"),Or=new en("4295048017"),vr=new en("79226673521066979257578248090"),_c=16,Ec="59543866431248",Wc="184467440737095516",Dc="15793534762490258745",Mr=new en(10).pow(new en(6));var qc={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:[]},Ch=new en("18446744073700000000");import Ae from"bn.js";function Fr(s){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,s,!1),new Uint8Array(e)}function da(s,e){let t=0;for(let n=s-1;n>=0&&!e.testn(n);n--)t++;return t}function pa(s,e){let t=0;for(let n=0;n<s&&!e.testn(n);n++)t++;return t}function wi(s,e){for(let t=0;t<s;t++)if(e.testn(t))return!1;return!0}function Uc(s,e){return wi(s,e)?null:da(s,e)}function Gc(s,e){return wi(s,e)?null:pa(s,e)}var vh=Buffer.from("amm_config","utf8"),fa=Buffer.from("pool","utf8"),ya=Buffer.from("pool_vault","utf8"),Op=Buffer.from("pool_reward_vault","utf8"),Xc=Buffer.from("position","utf8"),vp=Buffer.from("tick_array","utf8"),Mp=Buffer.from("operation","utf8"),Fp=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Vp=Buffer.from("observation","utf8");function zc(s,e,t,n){return be([fa,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function ba(s,e,t){return be([ya,e.toBuffer(),t.toBuffer()],s)}function Yc(s,e,t){return be([Op,e.toBuffer(),t.toBuffer()],s)}function Ie(s,e,t){return be([vp,e.toBuffer(),Fr(t)],s)}function ln(s,e,t,n){return be([Xc,e.toBuffer(),Fr(t),Fr(n)],s)}function Ct(s,e){return be([Xc,e.toBuffer()],s)}function xn(s){return be([Buffer.from("metadata","utf8"),sn.toBuffer(),s.toBuffer()],sn)}function ki(s){return be([Mp],s)}function et(s,e){return be([Fp,e.toBuffer()],s)}function Hc(s,e){return be([Vp,e.toBuffer()],s)}var Qc=Buffer.from("locked_position","utf8");function ga(s,e){return be([Qc,e.toBuffer()],s)}function Vo(s,e){return be([Qc,e.toBuffer()],s)}var _p=Buffer.from("support_mint","utf8");function Pa(s,e){return be([_p,e.toBuffer()],s)}import{PublicKey as Yt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as jc}from"@solana/spl-token";import Ge from"bn.js";import An from"bn.js";var hi=class{static getfeeGrowthInside(e,t,n){let o=new An(0),i=new An(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 An(0),a=new An(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=ge.wrappingSubU128(ge.wrappingSubU128(e.feeGrowthGlobalX64A,o),r),u=ge.wrappingSubU128(ge.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=ge.mulDivFloor(ge.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,at),c=t.tokenFeesOwedA.add(a),u=ge.mulDivFloor(ge.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,at),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=ge.mulDivFloor(ge.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,at),c=t.tokenFeesOwedA.add(a),u=ge.mulDivFloor(ge.wrappingSubU128(r,t.feeGrowthInsideLastX64B),t.liquidity,at),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=ge.wrappingSubU128(c,u.growthInsideLastX64),m=ge.mulDivFloor(l,t.liquidity,at),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=ge.wrappingSubU128(c,u.growthInsideLastX64),m=ge.mulDivFloor(l,t.liquidity,at),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 An(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 An(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ge.wrappingSubU128(ge.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 An(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 An(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[r]:c=o[r].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[r])),i.push(ge.wrappingSubU128(ge.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,P,w;let a=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),c=pe.getSqrtPriceX64FromTick(t.tickLower),u=pe.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=xe.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[Fe(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,r,!0),Fe(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,r,!0)],[f,y]=[Fe(new An(new O(m.amountA.toString()).mul(l).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,r,!0),Fe(new An(new O(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,r,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}};var Ep=15,Be=class{static async getTickArrays(e,t,n,o,i,r,a){let c=[],u=oe.getTickArrayStartIndexByTick(o,i),l=oe.getInitializedTickArrayInRange(r,a,i,u,Math.floor(Ep/2));for(let p=0;p<l.length;p++){let{publicKey:f}=Ie(t,n,l[p]);c.push(f)}let m=(await on(e,c)).map(p=>p!==null?Ti.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=q(V({},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=oe.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/Be.tickCount(t)),a=n?oe.searchLowBitFromStart(o,i,r-1,1,t):oe.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=ut-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<ut;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:r}=Ie(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:r,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,r){let a=oe.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<ut;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=Ie(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(oe.checkIsOutOfBoundary(e)){if(e>xt)return!1;let n=oe.getTickArrayStartIndexByTick(ht,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ut*e}};var Aa=14,Sn=class{static maxTickInTickarrayBitmap(e){return e*ut*lo}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(!Be.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),r=o?t-Be.tickCount(n):t+Be.tickCount(n);if(r<-i||r>=i)return{isInit:!1,tickIndex:t};let a=n*ut,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=Uc(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=Gc(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-Be.tickCount(n)}}}},Ii=class{static getBitmapOffset(e,t){if(!Be.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Sn.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=Sn.maxTickInTickarrayBitmap(e),n=-t;if(xt<=t)throw Error(`extensionTickBoundary check error: ${xt}, ${t}`);if(n<=ht)throw Error(`extensionTickBoundary check error: ${n}, ${ht}`);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:oe.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=Be.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}=Sn.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=oe.mergeTickArrayBitmap(e).shln(lo-1-a),u=wi(512,c)?null:da(512,c);if(u!==null){let l=t-u*Be.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=oe.mergeTickArrayBitmap(e).shrn(a),u=wi(512,c)?null:pa(512,c);if(u!==null){let l=t+u*Be.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r-Be.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Sn.maxTickInTickarrayBitmap(t),o=Math.floor(n/Be.tickCount(t));return e<0&&n!=0&&(o=lo-o),o}};var ve=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}=mo.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(Bn),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}=Ie(e.programId,e.id,y.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=mo.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,r,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(Bn),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=ve.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?Ii.checkTickArrayIsInit(Be.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):oe.checkTickArrayIsInitialized(oe.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=Ie(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:r}=this.nextInitializedTickArrayStartIndex(e,Be.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=Ie(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/Be.tickCount(e.tickSpacing)),o=t?oe.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):oe.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=Be.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Sn.nextInitializedTickArrayStartIndex(oe.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:r,tickIndex:a}=Ii.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(r)return{isExist:!0,nextStartIndex:a};if(t=a,t<ht||t>xt)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(V({},m),{perSecond:ge.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Yt(d)});if(p.tokenMint.equals(Yt.default))continue;if(n<=p.openTime.toNumber()||o.eq(Qe)){r.push(p);continue}let f=new Ge(Math.min(p.endTime.toNumber(),n)),y=f.sub(p.lastUpdateTime),b=ge.mulDivFloor(y,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),P=ge.mulDivFloor(y,p.emissionsPerSecondX64,at),w=p.rewardTotalEmissioned.add(P);r.push(q(V({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:f}))}return r}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let r=oe.getTickArrayStartIndexByTick(i,e);if(r>=n||r<o)return!0}return!1}static tickRange(e){let t=Sn.maxTickInTickarrayBitmap(e),n=-t;return t>xt&&(t=Be.getArrayStartIndex(xt,e)+Be.tickCount(e)),n<ht&&(n=Be.getArrayStartIndex(ht,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!Be.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/Be.tickCount(t)*lo}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=oe.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=oe.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=Ie(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=Ti.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=q(V({},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(Ct(p,d).publicKey);let l=await on(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=_o.decode(d.data),f=p.poolId.toString(),y=e.find(x=>x.state.id.toBase58()===f);if(y===void 0)continue;let b=y.state,g=oe._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),P=oe._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:T}=xe.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,P.tickSqrtPriceX64,p.liquidity,!1),h=1/(1-Math.sqrt(Math.sqrt(g.price.div(P.price).toNumber())));y.positionAccount=[...(a=y.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:P.price,amountA:w,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(x=>q(V({},x),{pendingReward:new Ge(0)})),leverage:h,tokenFeeAmountA:new Ge(0),tokenFeeAmountB:new Ge(0)}];let k=await oe.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickLower,y.state.tickSpacing),B=await oe.getTickArrayAddressByTick(y.state.programId,p.poolId,p.tickUpper,y.state.tickSpacing);m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=k,m[`${y.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}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]=Ti.decode(b.data)}for(let{state:y,positionAccount:b}of e)if(!!b)for(let g of b){let P=`${y.programId.toString()}-${y.id.toString()}-${g.tickLower}`,w=`${y.programId.toString()}-${y.id.toString()}-${g.tickUpper}`,T=f[m[P].toString()],h=f[m[w].toString()],k=T.ticks[oe.getTickOffsetInArray(g.tickLower,y.tickSpacing)],B=h.ticks[oe.getTickOffsetInArray(g.tickUpper,y.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:S}=await hi.GetPositionFees(y,g,k,B),I=await hi.GetPositionRewards(y,g,k,B);g.tokenFeeAmountA=x.gte(new Ge(0))?x:new Ge(0),g.tokenFeeAmountB=S.gte(new Ge(0))?S:new Ge(0);for(let C=0;C<I.length;C++)g.rewardInfos[C].pendingReward=I[C].gte(new Ge(0))?I[C]:new Ge(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:r,priceLimit:a=new O(0),catchLiquidityInsufficient:c=!1}){var N;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 O(0))?u=l?St.add(new Ge(1)):Kt.sub(new Ge(1)):u=pe.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=Fe(i,m,o,!1),{allTrade:f,expectedAmountOut:y,remainingAccounts:b,executionPrice:g,feeAmount:P}=ve.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((N=p.fee)!=null?N:Qe),u,c),w=Fe(y,d,o,!1),T=pe.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),h=l?T:new O(1).div(T),k=y.mul(new Ge(Math.floor((1-r)*1e10))).div(new Ge(1e10)),B=Fe(k,d,o,!1),x=l?e.currentPrice:new O(1).div(e.currentPrice),S=new O(h).sub(x).abs(),I=x,C=new lt(new O(S).mul(10**15).toFixed(0),new O(I).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:w,minAmountOut:B,expirationTime:un(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:h,priceImpact:C,fee:P,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 Ye(q(V({},u),{mint:u.address,isToken2022:u.programId===jc.toBase58()})),new Ye(q(V({},l),{mint:l.address,isToken2022:l.programId===jc.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:y,minAmountOut:b,expirationTime:g,currentPrice:P,executionPrice:w,priceImpact:T,fee:h,remainingAccounts:k,executionPriceX64:B}=ve.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Yt(u.address),amountIn:n,slippage:i,epochInfo:r,catchLiquidityInsufficient:a}),x=q(V({},f),{amount:new Me(m,f.amount),fee:f.fee===void 0?void 0:new Me(m,f.fee)}),S=q(V({},y),{amount:new Me(d,y.amount),fee:y.fee===void 0?void 0:new Me(d,y.fee)}),I=q(V({},b),{amount:new Me(d,b.amount),fee:b.fee===void 0?void 0:new Me(d,b.fee)}),C=new Mt({baseToken:m,denominator:new Ge(10).pow(new Ge(20+m.decimals)),quoteToken:d,numerator:P.mul(new O(10**(20+d.decimals))).toFixed(0)}),N=new Mt({baseToken:m,denominator:new Ge(10).pow(new Ge(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),L=new Me(m,h);return{allTrade:p,realAmountIn:x,amountOut:S,minAmountOut:I,expirationTime:g,currentPrice:C,executionPrice:N,priceImpact:T,fee:L,remainingAccounts:k,executionPriceX64:B}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountOut:i,slippage:r,priceLimit:a=new O(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 O(0))?l=c?Kt.sub(new Ge(1)):St.add(new Ge(1)):l=pe.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=Fe(i,u[n.toString()],o,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:y}=ve.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((I=m.fee)!=null?I:Qe),l),b=c?e.mintB.address:e.mintA.address,g=Fe(d,u[b],o,!1),P=pe.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),w=c?P:new O(1).div(P),T=d.mul(new Ge(Math.floor((1+r)*1e10))).div(new Ge(1e10)),h=Fe(T,u[b],o,!0),k=c?e.currentPrice:new O(1).div(e.currentPrice),B=new O(w).sub(k).abs(),x=k,S=new lt(new O(B).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:h,realAmountOut:m,expirationTime:un(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:S,fee:y,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var f,y,b;let i=e[t],r=oe.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=oe.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[Pt(e.mintA.address).toString()],d=o[Pt(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=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=pe.getSqrtPriceX64FromTick(r),g=pe.getSqrtPriceX64FromTick(a),{amountSlippageA:P,amountSlippageB:w}=xe.getAmountsFromLiquidityWithSlippage(y,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:h}=xe.getAmountsFromLiquidityWithSlippage(y,b,g,i,!1,!1,0),k=new O(P.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(w.toString()).div(new O(10).pow(f)).mul(d.value)),B=new O(T.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(h.toString()).div(new O(10).pow(f)).mul(d.value)),x=new O(1).div(k.add(B)),I=new O(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),C=3600*24*365,N=e.rewardDefaultInfos.map(L=>{var M,G;let v=L.mint.decimals,R=o[L.mint.address];return c<((M=L.startTime)!=null?M:0)||c>((G=L.endTime)!=null?G:0)||!L.perSecond||!R||v===void 0?0:new O(R.value).mul(new O(L.perSecond).mul(C)).div(new O(10).pow(v)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:N,apr:I+N.reduce((L,v)=>L+v,0)}}static async getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:r,add:a,epochInfo:c,amountHasFee:u}){var g,P;let l=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=pe.getSqrtPriceX64FromTick(n),d=pe.getSqrtPriceX64FromTick(o),p=Fe(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ge(new O(p.amount.sub((P=p.fee)!=null?P:Qe).toString()).toFixed(0)),y;if(l.lte(m))y=t?xe.getLiquidityFromTokenAmountA(m,d,f,!a):new Ge(0);else if(l.lte(d)){let w=xe.getLiquidityFromTokenAmountA(l,d,f,!a),T=xe.getLiquidityFromTokenAmountB(m,l,f);y=t?w:T}else y=t?new Ge(0):xe.getLiquidityFromTokenAmountB(m,d,f);let b=await ve.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,P,w;let c=pe.getSqrtPriceX64FromTick(n),u=pe.getSqrtPriceX64FromTick(o),l=a?1+r:1-r,m=xe.getAmountsFromLiquidity(pe.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[Fe(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Fe(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,y]=[Fe(m.amountA.muln(l),(P=t.mintA.extensions)==null?void 0:P.feeConfig,e,!0),Fe(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:y,expirationTime:un(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Yt(c.id));(await on(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=po.decode(c.data))});let r=t.map(c=>et(new Yt(c.programId),new Yt(c.id)).publicKey),a=await ve.fetchExBitmaps({connection:e,exBitmapAddress:r,batchRequest:!1});return t.reduce((c,u)=>q(V({},c),{[u.id]:q(V({},n[u.id]),{id:new Yt(u.id),version:6,programId:new Yt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:q(V({},u.config),{id:new Yt(u.config.id),fundOwner:""}),currentPrice:new O(u.price),exBitmapAccount:et(new Yt(u.programId),new Yt(u.id)).publicKey,exBitmapInfo:a[et(new Yt(u.programId),new Yt(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 wa={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function $c(s){return q(V({},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:wa,week:wa,month:wa,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:q(V({},s.ammConfig),{id:s.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ge=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(Qe)||(i=i.add(zt)),i}static mulDivFloor(e,t,n){if(n.eq(Qe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Qe))throw new Error("division by 0");return e.mul(t).add(n.sub(zt)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new Ae(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Nr).sub(t).mod(Nr)}};function dt(s,e){return ka(s.mul(e),64,256)}function Wp(s,e,t){let n=s.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ka(s,e,t){let n=s.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var pe=class{static sqrtPriceX64ToPrice(e,t,n){return ge.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ge.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(Qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Qe))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(Qe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Qe))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(Qe))return e;let i=t.shln(Ai);if(o){let r=i,a=i.add(n.mul(e));return a.gte(r)?ge.mulDivCeil(r,e,a):ge.mulDivRoundingUp(r,zt,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 ge.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Ai);if(o)return e.add(i.div(t));{let r=ge.mulDivRoundingUp(i,zt,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<ht||e>xt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new Ae("18445821805675395072"):new Ae("18446744073709551616");return(t&2)!=0&&(n=dt(n,new Ae("18444899583751176192"))),(t&4)!=0&&(n=dt(n,new Ae("18443055278223355904"))),(t&8)!=0&&(n=dt(n,new Ae("18439367220385607680"))),(t&16)!=0&&(n=dt(n,new Ae("18431993317065453568"))),(t&32)!=0&&(n=dt(n,new Ae("18417254355718170624"))),(t&64)!=0&&(n=dt(n,new Ae("18387811781193609216"))),(t&128)!=0&&(n=dt(n,new Ae("18329067761203558400"))),(t&256)!=0&&(n=dt(n,new Ae("18212142134806163456"))),(t&512)!=0&&(n=dt(n,new Ae("17980523815641700352"))),(t&1024)!=0&&(n=dt(n,new Ae("17526086738831433728"))),(t&2048)!=0&&(n=dt(n,new Ae("16651378430235570176"))),(t&4096)!=0&&(n=dt(n,new Ae("15030750278694412288"))),(t&8192)!=0&&(n=dt(n,new Ae("12247334978884435968"))),(t&16384)!=0&&(n=dt(n,new Ae("8131365268886854656"))),(t&32768)!=0&&(n=dt(n,new Ae("3584323654725218816"))),(t&65536)!=0&&(n=dt(n,new Ae("696457651848324352"))),(t&131072)!=0&&(n=dt(n,new Ae("26294789957507116"))),(t&262144)!=0&&(n=dt(n,new Ae("37481735321082"))),e>0&&(n=Vc.div(n)),n}static getTickFromPrice(e,t,n){return pe.getTickFromSqrtPriceX64(pe.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Kt)||e.lt(St))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new Ae(t-64),o=Wp(n,32,128),i=new Ae("8000000000000000","hex"),r=0,a=new Ae(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new Ae(0))&&r<_c;){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 Ae(Ec)),d=ka(m.sub(new Ae(Wc)),64,128).toNumber(),p=ka(m.add(new Ae(Dc)),64,128).toNumber();return d==p?d:pe.getSqrtPriceX64FromTick(p).lte(e)?p:d}},fo=class{static getTickWithPriceAndTickspacing(e,t,n,o){let r=pe.getTickFromSqrtPriceX64(pe.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=fo.getTickWithPriceAndTickspacing(e,t,n,o),r=pe.getSqrtPriceX64FromTick(i);return pe.sqrtPriceX64ToPrice(r,n,o)}},xe=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(Qe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Ai),r=t.sub(e);return o?ge.mulDivRoundingUp(ge.mulDivCeil(i,r,t),zt,e):ge.mulDivFloor(i,r,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Qe))throw new Error("sqrtPriceX64A must greater than 0");return o?ge.mulDivCeil(n,t.sub(e),at):ge.mulDivFloor(n,t.sub(e),at)}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?ge.mulDivRoundingUp(a,zt,Pi):a.shrn(Ai)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ge.mulDivFloor(n,Pi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return xe.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let r=xe.getLiquidityFromTokenAmountA(e,n,o,!1),a=xe.getLiquidityFromTokenAmountB(t,e,i);return r.lt(a)?r:a}else return xe.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:xe.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new Ae(0)};if(e.lt(n)){let r=xe.getTokenAmountAFromLiquidity(e,n,o,i),a=xe.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:r,amountB:a}}else return{amountA:new Ae(0),amountB:xe.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,r,a){let{amountA:c,amountB:u}=xe.getAmountsFromLiquidity(e,t,n,o,r),l=i?1+a:1-a,m=new Ae(new O(c.toString()).mul(l).toFixed(0)),d=new Ae(new O(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 P,w,T,h;let u=pe.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=pe.getSqrtPriceX64FromTick(t),m=pe.getSqrtPriceX64FromTick(n),d=r?1+i:1-i,p=xe.getAmountsFromLiquidity(u,l,m,o,r),[f,y]=[Fe(p.amountA,(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),Fe(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[Fe(new Ae(new O(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,c),Fe(new Ae(new O(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:un(f.expirationTime,y.expirationTime)}}},mo=class{static swapCompute(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y=!1){if(d.eq(Qe))throw new Error("amountSpecified must not be 0");if(f||(f=r?St.add(zt):Kt.sub(zt)),r){if(f.lt(St))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(Kt))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(Qe),g={amountSpecifiedRemaining:d,amountCalculated:Qe,sqrtPriceX64:m,tick:u>p?Math.min(p+Be.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new Ae(0)},P=p,w=n[p],T=0,h=!r&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Qe)&&!g.sqrtPriceX64.eq(f);){T>10;let k={};k.sqrtPriceStartX64=g.sqrtPriceX64;let B=oe.nextInitTick(w,g.tick,l,r,h),x=B||null,S=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let C=ve.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},P,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")}P=C.nextStartIndex;let{publicKey:N}=Ie(e,t,P);S=N,w=n[P];try{x=oe.firstInitializedTick(w,r)}catch{throw Error("not found next tick info")}}k.tickNext=x.tick,k.initialized=x.liquidityGross.gtn(0),p!==P&&S&&(g.accounts.push(S),p=P),k.tickNext<ht?k.tickNext=ht:k.tickNext>xt&&(k.tickNext=xt),k.sqrtPriceNextX64=pe.getSqrtPriceX64FromTick(k.tickNext);let I;if(r&&k.sqrtPriceNextX64.lt(f)||!r&&k.sqrtPriceNextX64.gt(f)?I=f:I=k.sqrtPriceNextX64,[g.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=mo.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a,r),g.feeAmount=g.feeAmount.add(k.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),g.amountCalculated=g.amountCalculated.sub(k.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(k.amountOut),g.amountCalculated=g.amountCalculated.add(k.amountIn.add(k.feeAmount))),g.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let C=x.liquidityNet;r&&(C=C.mul(Bn)),g.liquidity=xe.addDelta(g.liquidity,C)}h=k.tickNext!=g.tick&&!r&&w.startTickIndex===k.tickNext,g.tick=r?k.tickNext-1:k.tickNext}else if(g.sqrtPriceX64!=k.sqrtPriceStartX64){let C=pe.getTickFromSqrtPriceX64(g.sqrtPriceX64);h=C!=g.tick&&!r&&w.startTickIndex===C,g.tick=C}++T}try{let{nextStartIndex:k,isExist:B}=Be.nextInitializedTickArray(g.tick,l,r,o,i);B&&p!==k&&(g.accounts.push(Ie(e,t,k).publicKey),p=k)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Qe,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 Ae(0),amountIn:new Ae(0),amountOut:new Ae(0),feeAmount:new Ae(0)},c=o.gte(Qe);if(c){let l=ge.mulDivFloor(o,Mr.sub(new Ae(i.toString())),Mr);a.amountIn=r?xe.getTokenAmountAFromLiquidity(t,e,n,!0):xe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(a.amountIn)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=pe.getNextSqrtPriceX64FromInput(e,n,l,r)}else a.amountOut=r?xe.getTokenAmountBFromLiquidity(t,e,n,!1):xe.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(Bn).gte(a.amountOut)?a.sqrtPriceX64Next=t:a.sqrtPriceX64Next=pe.getNextSqrtPriceX64FromOutput(e,n,o.mul(Bn),r);let u=t.eq(a.sqrtPriceX64Next);return r?(u&&c||(a.amountIn=xe.getTokenAmountAFromLiquidity(a.sqrtPriceX64Next,e,n,!0)),u&&!c||(a.amountOut=xe.getTokenAmountBFromLiquidity(a.sqrtPriceX64Next,e,n,!1))):(a.amountIn=u&&c?a.amountIn:xe.getTokenAmountBFromLiquidity(e,a.sqrtPriceX64Next,n,!0),a.amountOut=u&&!c?a.amountOut:xe.getTokenAmountAFromLiquidity(e,a.sqrtPriceX64Next,n,!1)),!c&&a.amountOut.gt(o.mul(Bn))&&(a.amountOut=o.mul(Bn)),c&&!a.sqrtPriceX64Next.eq(t)?a.feeAmount=o.sub(a.amountIn):a.feeAmount=ge.mulDivCeil(a.amountIn,new Ae(i),Mr.sub(new Ae(i))),[a.sqrtPriceX64Next,a.amountIn,a.amountOut,a.feeAmount]}};var ut=60,lo=512,oe=class{static getTickArrayAddressByTick(e,t,n,o){let i=oe.getTickArrayStartIndexByTick(n,o),{publicKey:r}=Ie(e,t,i);return r}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=oe.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=ut)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=Be.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)*Be.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ut,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*ut,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*ut:e+t*ut}static mergeTickArrayBitmap(e){let t=new Dp(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*ut));return[...oe.searchLowBitFromStart(e,t,r-1,i,n),...oe.searchHightBitFromStart(e,t,r,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return oe.searchHightBitFromStart(e,t,-7680,lo,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let r=[],a=oe.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=Ie(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=>oe.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=Be.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=>oe.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=Be.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<ht||e>xt}static nextInitTick(e,t,n,o,i){if(Be.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<ut;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ut-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ut;){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=pe.getSqrtPriceX64FromTick(t),i=pe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new O(1).div(t),i=fo.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=pe.getSqrtPriceX64FromTick(i),a=pe.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=pe.getSqrtPriceX64FromTick(t),i=pe.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new O(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new O(1).div(t),i=fo.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),r=pe.getSqrtPriceX64FromTick(i),a=pe.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new O(1).div(a)}}};var Jc=_([Le(8),E("bump"),Gt("index"),F(""),kt("protocolFeeRate"),kt("tradeFeeRate"),Gt("tickSpacing"),Q(A(),8,"")]),qp=_([kt("blockTimestamp"),vo("tickCumulative"),Q(A(),4)]),el=_([Le(8),He("initialized"),A("recentEpoch"),Gt("observationIndex"),F("poolId"),Q(qp,100,"observations"),Q(A(),4)]),Up=_([E("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),le("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),F("tokenMint"),F("tokenVault"),F("creator"),le("rewardGrowthGlobalX64")]),po=_([Le(8),E("bump"),F("ammConfig"),F("creator"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Gt("tickSpacing"),le("liquidity"),le("sqrtPriceX64"),Ue("tickCurrent"),kt(),le("feeGrowthGlobalX64A"),le("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),le("swapInAmountTokenA"),le("swapOutAmountTokenB"),le("swapInAmountTokenB"),le("swapOutAmountTokenA"),E("status"),Q(E(),7,""),Q(Up,3,"rewardInfos"),Q(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),Q(A(),15*4-3,"padding")]),Gp=_([le("growthInsideLastX64"),A("rewardAmountOwed")]),_o=_([Le(8),E("bump"),F("nftMint"),F("poolId"),Ue("tickLower"),Ue("tickUpper"),le("liquidity"),le("feeGrowthInsideLastX64A"),le("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),Q(Gp,3,"rewardInfos"),Q(A(),8,"")]),UT=_([Le(8),E("bump"),F("poolId"),Ue("tickLowerIndex"),Ue("tickUpperIndex"),le("liquidity"),le("feeGrowthInsideLastX64A"),le("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),Q(le(),3,"rewardGrowthInside"),Q(A(),8,"")]),Xp=_([Ue("tick"),bc("liquidityNet"),le("liquidityGross"),le("feeGrowthOutsideX64A"),le("feeGrowthOutsideX64B"),Q(le(),3,"rewardGrowthsOutsideX64"),Q(kt(),13,"")]),Ti=_([Le(8),F("poolId"),Ue("startTickIndex"),Q(Xp,ut,"ticks"),E("initializedTickCount"),Q(E(),115,"")]),tl=_([Le(329),Q(F(),100,"whitelistMints")]),Zc=_([Le(8),F("poolId"),Q(Q(A(),8),Aa,"positiveTickArrayBitmap"),Q(Q(A(),8),Aa,"negativeTickArrayBitmap")]),GT=_([A(),E("bump"),F("owner"),F("poolId"),F("positionId"),F("nftAccount"),Q(A(),8)]),nl=_([Le(8),E("bump"),F("lockOwner"),F("poolId"),F("positionId"),F("nftAccount"),F("lockNftMint"),A("recentEpoch"),Q(A(),8)]);el.span;var ol=he("Raydium_Clmm"),Ht={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]},il=[188,37,179,131,82,150,84,73],rl=[16,72,250,198,14,162,212,19],Se=class{static createPoolInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([le("sqrtPriceX64"),A("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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},...(f==null?void 0:f.map(w=>({pubkey:w,isSigner:!1,isWritable:!1})))||[]],g=Buffer.alloc(y.span);y.encode({sqrtPriceX64:p,zero:Qe},g);let P=Buffer.from([...Ht.createPool,...g]);return new bt({keys:b,programId:e,data:P})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:o,mintB:i,ammConfigId:r,initialPriceX64:a,extendMintAccount:c}=e,[u,l]=[new H(o.address),new H(i.address)],{publicKey:m}=zc(t,r,u,l),{publicKey:d}=Hc(t,m),{publicKey:p}=ba(t,m,u),{publicKey:f}=ba(t,m,l),y=et(t,m).publicKey,b=[this.createPoolInstruction(t,m,n,r,d,u,p,new H(o.programId||Ve),l,f,new H(i.programId||Ve),y,a,c)];return{signers:[],instructions:b,instructionTypes:[z.CreateAccount,z.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,P,w,T,h,k,B,x,S,I){let C=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),N=[...I?[{pubkey:I,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...N],v=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:k,amountMaxA:B,amountMaxB:x,withMetadata:S==="create",baseFlag:!1,optionBaseFlag:0},v);let R=Buffer.from([...Ht.openPosition,...v]);return new bt({keys:L,programId:e,data:R})}static openPositionFromLiquidityInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h,k,B,x,S){let I=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),C=[...S?[{pubkey:S,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:h,amountMaxA:k,amountMaxB:B,withMetadata:x==="create",baseFlag:!1,optionBaseFlag:0},L);let v=Buffer.from([...Ht.openPositionWithTokenEx,...L]);return new bt({keys:N,programId:e,data:v})}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 H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let S=Vr.generate();d.push(S),y=S.publicKey}let b=oe.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=oe.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:w}=Ie(p,f,g),{publicKey:T}=m?re(n.wallet,y,$e):re(n.wallet,y,Ve),{publicKey:h}=xn(y),{publicKey:k}=Ct(p,y),{publicKey:B}=ln(p,f,o,i),x=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,y,T,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0);return{signers:d,instructions:[x],instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:P,tickArrayUpper:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:B}}}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 H(e.programId),new H(e.id)],y;if(l)y=new H((await l(1))[0]);else{let S=Vr.generate();d.push(S),y=S.publicKey}let b=oe.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=oe.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:P}=Ie(p,f,b),{publicKey:w}=Ie(p,f,g),{publicKey:T}=m?re(n.wallet,y,$e):re(n.wallet,y,Ve),{publicKey:h}=xn(y),{publicKey:k}=Ct(p,y),{publicKey:B}=ln(p,f,o,i),x=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,y,T,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,u,r,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,y,T,h,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),o,i,b,g,u,r,a,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(p,f).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:P,tickArrayUpper:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:B},instructions:[x],signers:d,instructionTypes:[z.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,P,w,T,h,k,B,x,S,I){let C=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),N=[...I?[{pubkey:I,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...N],v=Buffer.alloc(C.span);C.encode({tickLowerIndex:P,tickUpperIndex:w,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:h,liquidity:new ha(0),amountMaxA:B==="MintA"?x:S,amountMaxB:B==="MintA"?S:x,withMetadata:k==="create",baseFlag:B==="MintA",optionBaseFlag:1},v);let R=Buffer.from([...Ht.openPosition,...v]);return new bt({keys:L,programId:e,data:R})}static openPositionFromBaseInstruction22(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h,k,B,x,S){let I=_([Ue("tickLowerIndex"),Ue("tickUpperIndex"),Ue("tickArrayLowerStartIndex"),Ue("tickArrayUpperStartIndex"),le("liquidity"),A("amountMaxA"),A("amountMaxB"),He("withMetadata"),E("optionBaseFlag"),He("baseFlag")]),C=[...S?[{pubkey:S,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: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:ft,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},...C],L=Buffer.alloc(I.span);I.encode({tickLowerIndex:g,tickUpperIndex:P,tickArrayLowerStartIndex:w,tickArrayUpperStartIndex:T,liquidity:new ha(0),amountMaxA:k==="MintA"?B:x,amountMaxB:k==="MintA"?x:B,withMetadata:h==="create",baseFlag:k==="MintA",optionBaseFlag:1},L);let v=Buffer.from([...Ht.openPositionWithTokenEx,...L]);return new bt({keys:N,programId:e,data:v})}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 H((await l(1))[0]);else{let S=Vr.generate();p.push(S),d=S.publicKey}let[f,y]=[new H(e.programId),new H(e.id)],b=oe.getTickArrayStartIndexByTick(o,e.config.tickSpacing),g=oe.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:P}=Ie(f,y,b),{publicKey:w}=Ie(f,y,g),{publicKey:T}=m?re(n.wallet,d,$e):re(n.wallet,d,Ve),{publicKey:h}=xn(d),{publicKey:k}=Ct(f,d),{publicKey:B}=ln(f,y,o,i),x=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,y,n.wallet,d,T,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(f,y).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,y,n.wallet,d,T,h,B,P,w,k,n.tokenAccountA,n.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(t.mintA.address),new H(t.mintB.address),o,i,b,g,r,a,c,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[b,g])?et(f,y).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:P,tickArrayUpper:w,positionNftAccount:T,metadataAccount:h,personalPosition:k,protocolPosition:B},instructions:[x],signers:p,instructionTypes:[z.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i,r){let a=_([]),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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:r?$e:Ve,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Ht.closePosition,...u]);return new bt({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o,nft2022:i}){let r=new H(e.programId),a=i?re(n.wallet,o.nftMint,$e).publicKey:re(n.wallet,o.nftMint,Ve).publicKey,{publicKey:c}=Ct(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:[z.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,P){let w=_([le("liquidity"),A("amountMaxA"),A("amountMaxB"),E("optionBaseFlag"),He("baseFlag")]),T=[...P?[{pubkey:P,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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],k=Buffer.alloc(w.span);w.encode({liquidity:y,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},k);let B=Buffer.from([...Ht.increaseLiquidity,...k]);return new bt({keys:h,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:r,amountMaxB:a,nft2022:c}){let[u,l]=[new H(e.programId),new H(e.id)],m=oe.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=oe.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?re(o.wallet,n.nftMint,$e):re(o.wallet,n.nftMint,Ve),{publicKey:b}=Ct(u,n.nftMint),{publicKey:g}=ln(u,l,n.tickLower,n.tickUpper),P=this.increasePositionFromLiquidityInstruction(u,o.wallet,y,b,l,g,p,f,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),i,r,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?et(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:y,personalPosition:b,protocolPosition:g},signers:[],instructions:[P],instructionTypes:[z.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 H(e.programId),new H(e.id)],m=oe.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=oe.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=Ie(u,l,m),{publicKey:f}=Ie(u,l,d),{publicKey:y}=c?re(o.wallet,n.nftMint,$e):re(o.wallet,n.nftMint,Ve),{publicKey:b}=Ct(u,n.nftMint),{publicKey:g}=ln(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 H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),i,r,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?et(u,l).publicKey:void 0)],signers:[],instructionTypes:[z.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,P){let w=_([le("liquidity"),A("amountMaxA"),A("amountMaxB"),E("optionBaseFlag"),He("baseFlag")]),T=[...P?[{pubkey:P,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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...T],k=Buffer.alloc(w.span);w.encode({liquidity:new ha(0),amountMaxA:y==="MintA"?b:g,amountMaxB:y==="MintA"?g:b,baseFlag:y==="MintA",optionBaseFlag:1},k);let B=Buffer.from([...Ht.increaseLiquidity,...k]);return new bt({keys:h,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([le("liquidity"),A("amountMinA"),A("amountMinB")]),h=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...y.map(S=>[{pubkey:S.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:S.rewardMint,isSigner:!1,isWritable:!1}]).flat()],k=[{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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...h],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:P},B);let x=Buffer.from([...Ht.decreaseLiquidity,...B]);return new bt({keys:k,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:r,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new H(e.programId),new H(e.id)],d=oe.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=oe.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=Ie(l,m,d),{publicKey:y}=Ie(l,m,p),{publicKey:b}=u?re(o.wallet,n.nftMint,$e):re(o.wallet,n.nftMint,c),{publicKey:g}=Ct(l,n.nftMint),{publicKey:P}=ln(l,m,n.tickLower,n.tickUpper),w=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)w.push({poolRewardVault:new H(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new H(e.rewardDefaultInfos[k].mint.address)});let T=[],h=this.decreaseLiquidityInstruction(l,o.wallet,b,g,m,P,f,y,o.tokenAccountA,o.tokenAccountB,new H(t.vault.A),new H(t.vault.B),new H(e.mintA.address),new H(e.mintB.address),w,i,r,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?et(l,m).publicKey:void 0);return T.push(h),{address:{tickArrayLower:f,tickArrayUpper:y,positionNftAccount:b,personalPosition:g,protocolPosition:P},signers:[],instructions:T,instructionTypes:[z.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 P=_([A("amount"),A("otherAmountThreshold"),le("sqrtPriceLimitX64"),He("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],h=Buffer.alloc(P.span);P.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:y,isBaseInput:b},h);let k=Buffer.from([...Ht.swap,...h]);return new bt({keys:T,programId:e,data:k})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:r,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new H(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,et(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.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 H(e.programId),new H(e.id)],[d,p]=[new H(t.vault.A),new H(t.vault.B)],[f,y]=[new H(e.mintA.address),new H(e.mintB.address)],b=e.mintA.address===i.toBase58(),g=[this.swapInstruction(l,o.wallet,m,new H(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,et(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[z.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=_([A("openTime"),A("endTime"),le("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:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1}],y=Buffer.alloc(p.span);p.encode({openTime:se(l),endTime:se(m),emissionsPerSecondX64:d},y);let b=Buffer.from([...Ht.initReward,...y]);return new bt({keys:f,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(e.id)],a=Yc(i,r,o.mint).publicKey,c=ki(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,r,c,new H(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:[z.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,r,a,c,u,l,m,d){let p=_([E("rewardIndex"),le("emissionsPerSecondX64"),A("openTime"),A("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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,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:se(l),endTime:se(m)},y);let b=Buffer.from([...Ht.setRewardEmissions,...y]);return new bt({keys:f,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,r]=[new H(e.programId),new H(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 H(t.rewardInfos[d].vault),u=new H(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&ol.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ki(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,r,l,new H(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[z.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,r,a){let c=_([E("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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Ht.collectReward,...l]);return new bt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,r]=[new H(e.programId),new H(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new H(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&ol.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:[z.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 H((await c(1))[0]);else{let g=Vr.generate();u.push(g),l=g.publicKey}let m=a?re(i,r,$e).publicKey:re(i,r,Ve).publicKey,{publicKey:d}=Ct(n,r),p=Vo(e,l).publicKey,f=re(i,l,Ve).publicKey,y=xn(l).publicKey,b=Se.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:re(t,r,a?$e:Ve).publicKey,positionNftProgram:a?$e:Ve});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:y},instructions:[b],signers:u,instructionTypes:[z.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:sn,isSigner:!1,isWritable:!1},{pubkey:Bi,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1}],g=_([He("withMetadata")]),P=Buffer.alloc(g.span);g.encode({withMetadata:y},P);let w=Buffer.from([...il,...P]);return new bt({keys:b,programId:e,data:w})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:o,positionNft:i}){let{publicKey:r}=re(o,i,Ve),{publicKey:a}=Ct(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:ga(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Ve,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1}];return new bt({keys:c,programId:e,data:Buffer.from(il)})}static harvestLockPositionInstruction(e){let[t,n]=[new H(e.poolKeys.programId),new H(e.poolKeys.id)],o=oe.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),i=oe.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:r}=Ie(t,n,o),{publicKey:a}=Ie(t,n,i),{publicKey:c}=re(e.owner,e.ownerPosition.nftMint,Ve),{publicKey:u}=Ct(t,e.ownerPosition.nftMint),{publicKey:l}=ln(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new H(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new H(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:ga(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 H(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new H(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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new H(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new bt({keys:p,programId:e.programId,data:Buffer.from(rl)})}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:P,mintB:w,rewardAccounts:T,exTickArrayBitmap:h}){let k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[],...T.map(x=>[{pubkey:x.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:x.rewardMint,isSigner:!1,isWritable:!1}]).flat()],B=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey: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:Ve,isSigner:!1,isWritable:!1},{pubkey:$e,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1},{pubkey:P,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...k];return new bt({keys:B,programId:e,data:Buffer.from(rl)})}};var zp=_([kt("mintAuthorityOption"),F("mintAuthority"),A("supply"),E("decimals"),E("isInitialized"),kt("freezeAuthorityOption"),F("freezeAuthority")]);import{PublicKey as mI}from"@solana/web3.js";import{MintLayout as pI,TOKEN_PROGRAM_ID as yI}from"@solana/spl-token";var _r=s=>new Ye({mint:s.address,decimals:s.decimals,symbol:s.symbol,name:s.name}),xi=o=>{var i=o,{amount:s,isRaw:e,name:t}=i,n=Xe(i,["amount","isRaw","name"]);return new Me(new Ye({mint:Pt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),s,e,t)};var Tt=o=>{var i=o,{address:s,programId:e,decimals:t}=i,n=Xe(i,["address","programId","decimals"]);return V({chainId:101,address:Pt(s).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},zn=s=>s?q(V({},s),{transferFeeConfigAuthority:s.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:s.withdrawWithheldAuthority.toBase58(),withheldAmount:s.withheldAmount.toString(),olderTransferFee:q(V({},s.olderTransferFee),{epoch:s.olderTransferFee.epoch.toString(),maximumFee:s.olderTransferFee.maximumFee.toString()}),newerTransferFee:q(V({},s.newerTransferFee),{epoch:s.newerTransferFee.epoch.toString(),maximumFee:s.newerTransferFee.maximumFee.toString()})}):void 0;import sl from"bn.js";var Ta=new sl(25),Er=new sl(1e4);import{PublicKey as nt,SystemProgram as Hp,SYSVAR_RENT_PUBKEY as vI,TransactionInstruction as Yn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qp,TOKEN_PROGRAM_ID as yo}from"@solana/spl-token";import Wr from"bn.js";var Ia=_([E("instruction"),A("amountIn"),A("minAmountOut")]),Ba=_([E("instruction"),A("maxAmountIn"),A("amountOut")]),RI=_([E("instruction"),E("nonce")]),Yp=_([E("instruction"),E("nonce"),A("startTime")]),Si=_([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),le("swapBaseInAmount"),le("swapQuoteOutAmount"),A("swapBase2QuoteFee"),le("swapQuoteInAmount"),le("swapBaseOutAmount"),A("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"),A("lpReserve"),Q(A(),3,"padding")]),LI=_([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),le("swapBaseInAmount"),le("swapQuoteOutAmount"),le("swapQuoteInAmount"),le("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),F("baseVault"),F("quoteVault"),F("baseMint"),F("quoteMint"),F("lpMint"),F("modelDataAccount"),F("openOrders"),F("marketId"),F("marketProgramId"),F("targetOrders"),F("owner"),Q(A(),64,"padding")]),xa=_([E("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),Sa=_([E("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var al=_([A("fee")]);var Dr=he("Raydium_liquidity_instruction");function ul(s){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:r,otherAmountMin:a,modelDataPubKey:c=oo}=s,u=Buffer.alloc(xa.span);xa.encode({instruction:3,baseAmountIn:se(o),quoteAmountIn:se(i),otherAmountMin:se(a),fixedSide:r==="base"?Ft:Wu},u);let l=[K({pubkey:yo,isWritable:!1}),K({pubkey:new nt(e.id)}),K({pubkey:new nt(t.authority),isWritable:!1}),K({pubkey:new nt(t.openOrders),isWritable:!1}),K({pubkey:new nt(t.targetOrders)}),K({pubkey:new nt(e.lpMint.address)}),K({pubkey:new nt(t.vault.A)}),K({pubkey:new nt(t.vault.B)})];return e.pooltype.includes("StablePool")&&l.push(K({pubkey:c})),l.push(K({pubkey:new nt(e.marketId),isWritable:!1}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:new nt(t.marketEventQueue),isWritable:!1})),new Yn({programId:new nt(e.programId),keys:l,data:u})}function Ka(s){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:o,baseAmountMin:i,quoteAmountMin:r,modelDataPubKey:a=oo}=s,c=yt(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let l=Buffer.alloc(Sa.span);Sa.encode({instruction:4,lpAmount:se(o),baseAmountMin:se(i),quoteAmountMin:se(r)},l);let m=[K({pubkey:yo,isWritable:!1}),K({pubkey:c.id}),K({pubkey:c.authority,isWritable:!1}),K({pubkey:c.openOrders}),K({pubkey:c.targetOrders}),K({pubkey:c.mintLp.address}),K({pubkey:c.vault.A}),K({pubkey:c.vault.B})];return u===5?m.push(K({pubkey:a})):(m.push(K({pubkey:c.id})),m.push(K({pubkey:c.id}))),m.push(K({pubkey:c.marketProgramId,isWritable:!1}),K({pubkey:c.marketId}),K({pubkey:c.marketBaseVault}),K({pubkey:c.marketQuoteVault}),K({pubkey:c.marketAuthority,isWritable:!1}),K({pubkey:n.lpTokenAccount}),K({pubkey:n.baseTokenAccount}),K({pubkey:n.quoteTokenAccount}),K({pubkey:n.owner,isWritable:!1,isSigner:!0}),K({pubkey:c.marketEventQueue}),K({pubkey:c.marketBids}),K({pubkey:c.marketAsks})),new Yn({programId:c.programId,keys:m,data:l})}return new Yn({programId:c.programId,keys:[]})}function Ca({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:P,openTime:w,coinAmount:T,pcAmount:h,ammConfigId:k,feeDestinationId:B}){let x=_([E("instruction"),E("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),S=[{pubkey:yo,isSigner:!1,isWritable:!1},{pubkey:Qp,isSigner:!1,isWritable:!1},{pubkey:Hp.programId,isSigner:!1,isWritable:!1},{pubkey:ft,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:k,isSigner:!1,isWritable:!1},{pubkey:B,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(x.span);return x.encode({instruction:1,nonce:P,openTime:w,coinAmount:T,pcAmount:h},I),{instruction:new Yn({keys:S,programId:s,data:I}),instructionType:z.AmmV4CreatePool}}function jp({poolKeys:s,userKeys:e,amountIn:t,minAmountOut:n,modelDataPubKey:o=oo},i){let r=yt(s),a=Buffer.alloc(Ia.span);Ia.encode({instruction:9,amountIn:se(t),minAmountOut:se(n)},a);let c=[K({pubkey:yo,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders})];return i===4&&c.push(K({pubkey:r.targetOrders})),c.push(K({pubkey:r.vault.A}),K({pubkey:r.vault.B})),i===5&&c.push(K({pubkey:o})),c.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Yn({programId:r.programId,keys:c,data:a})}function $p({poolKeys:s,userKeys:e,maxAmountIn:t,amountOut:n,modelDataPubKey:o=oo},i){let r=yt(s),a=Buffer.alloc(Ba.span);Ba.encode({instruction:11,maxAmountIn:se(t),amountOut:se(n)},a);let c=[K({pubkey:yo,isWritable:!1}),K({pubkey:r.id}),K({pubkey:r.authority,isWritable:!1}),K({pubkey:r.openOrders}),K({pubkey:r.targetOrders}),K({pubkey:r.vault.A}),K({pubkey:r.vault.B})];return i===5&&c.push(K({pubkey:o})),c.push(K({pubkey:r.marketProgramId,isWritable:!1}),K({pubkey:r.marketId}),K({pubkey:r.marketBids}),K({pubkey:r.marketAsks}),K({pubkey:r.marketEventQueue}),K({pubkey:r.marketBaseVault}),K({pubkey:r.marketQuoteVault}),K({pubkey:r.marketAuthority,isWritable:!1}),K({pubkey:e.tokenAccountIn}),K({pubkey:e.tokenAccountOut}),K({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Yn({programId:r.programId,keys:c,data:a})}function Zp(s,e,t,n,o,i,r,a,c,u){let l=_([E("instructionId"),A("amountIn"),A("minAmountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:16,amountIn:c,minAmountOut:u},m);let d=[{pubkey:yo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Yn({programId:s,keys:d,data:m})}function Jp(s,e,t,n,o,i,r,a,c,u){let l=_([E("instructionId"),A("maxAmountIn"),A("amountOut")]),m=Buffer.alloc(l.span);l.encode({instructionId:17,maxAmountIn:c,amountOut:u},m);let d=[{pubkey:yo,isWritable:!1,isSigner:!1},{pubkey:e,isWritable:!0,isSigner:!1},{pubkey:t,isWritable:!1,isSigner:!1},{pubkey:n,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:a,isWritable:!1,isSigner:!0}];return new Yn({programId:s,keys:d,data:m})}function qr(s){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:r}=s;if(t===4){if(r==="in")return Zp(new nt(e.programId),new nt(e.id),new nt(e.authority),new nt(e.vault.A),new nt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Wr(o.toString()),new Wr(i.toString()));if(r==="out")return Jp(new nt(e.programId),new nt(e.id),new nt(e.authority),new nt(e.vault.A),new nt(e.vault.B),n.tokenAccountIn,n.tokenAccountOut,n.owner,new Wr(o.toString()),new Wr(i.toString()));Dr.logWithError("invalid params","params",s)}throw Dr.logWithError("invalid version, only support pool v4","poolKeys.version",t),new Error("invalid version")}function Ur(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 jp(q(V({},a),{amountIn:o,minAmountOut:i}),t);if(r==="out")return $p(q(V({},a),{maxAmountIn:o,amountOut:i}),t);Dr.logWithError("invalid params","params",s)}throw Dr.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}var go=5e4,ef=_([A("x"),A("y"),A("price")]),tf=_([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),Q(ef,go,"DataElement")]);function nf(s,e){return[0,go-2]}function of(s){return[0,go-2]}function rf(s){return[0,go-2]}function sf(s,e,t){let[n,o]=nf(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>=go-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 Ra(s,e,t){let[n,o,i]=sf(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 bo(s,e,t){return e*s.multiplier/t}function cl(s,e,t){return e*t/s.multiplier}function af(s,e){let[t,n]=of(e),o=t,i=n,r=0,a=e;for(;o<i;){if(r=Math.floor((i+o)/2),r<=0||r>go-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 uf(s,e){let[t,n]=rf(e),o=t,i=n,r=0,a=e;for(;o<=i;){if(r=Math.floor((i+o)/2),r<=0||r>=go-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 ll(s,e,t,n){let o=n?e+t:e-t,[i,r,a]=af(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 cf(s,e,t,n){let o=n?e-t:e+t,[i,r,a]=uf(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 lf(s,e){let t=ll(s,e,0,!1);return t[3]?t[0]:0}function ml(s,e,t,n){let o=Ra(s,e,t),i=bo(s,e,o),r=bo(s,t,o),a=bo(s,n,o),c=!0,[u,l,m,d]=ll(s,i,a,c);if(!d)return 0;if(m)return n*s.multiplier/u;{let p=r-l;return cl(s,p,o)}}function dl(s,e,t,n){let o=Ra(s,e,t),i=bo(s,e,o),r=bo(s,t,o),a=bo(s,n,o),c=!1,[u,l,m,d]=cf(s,r,a,c);if(!d)return 0;if(m)return n*u/s.multiplier;{let p=i-l;return cl(s,p,o)}}function mf(s){let e=tf.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 pl(s,e,t,n){let o=lf(s,bo(s,e,Ra(s,e,t)))/s.multiplier;return n?o:1/o}var Ki=class{constructor({connection:e,modelDataPubKey:t=oo}){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=mf(e==null?void 0:e.data))}}};import{PublicKey as ff}from"@solana/web3.js";import dB from"bn.js";import{TOKEN_PROGRAM_ID as yf}from"@solana/spl-token";import{PublicKey as df}from"@solana/web3.js";var pf=he("Raydium_liquidity_serum");function fl({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=df.createProgramAddressSync(i,s)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw pf.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 Gr({programId:s}){let{publicKey:e}=be([Buffer.from("amm_config_account_seed","utf-8")],s);return e}function Po({name:s,programId:e,marketId:t}){let{publicKey:n}=be([e.toBuffer(),t.toBuffer(),Buffer.from(s,"utf-8")],e);return n}function bf({programId:s,marketId:e}){let{publicKey:t}=be([s.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],s);return t}function Na({programId:s}){return be([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],s)}function Oa({version:s,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:r,programId:a,marketProgramId:c}){let u=Po({name:"amm_associated_seed",programId:a,marketId:t}),l=Po({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Na({programId:a}),p=Po({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Po({name:"pc_vault_associated_seed",programId:a,marketId:t}),y=Po({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=bf({programId:a,marketId:t}),g=Po({name:"target_associated_seed",programId:a,marketId:t}),P=Po({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=fl({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:P,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:ff.default,configId:Gr({programId:a})}}var La={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Xr=s=>{let e={},t=yf.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:Tt({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:Tt({address:r,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new O(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new O(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:La,week:La,month:La,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Gr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:new O(o.lpReserve.toString()).div(10**Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())).toNumber(),lpMint:Tt({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 Ci}from"@solana/web3.js";import Ri from"bn.js";import{TOKEN_PROGRAM_ID as Pl}from"@solana/spl-token";import{SystemProgram as Ao,SYSVAR_RENT_PUBKEY as Pf,Transaction as yl,TransactionInstruction as Af}from"@solana/web3.js";import{createInitializeAccountInstruction as bl,TOKEN_PROGRAM_ID as gl}from"@solana/spl-token";function gf(s="accountFlags"){let e=new Cr(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 va=_([Le(5),gf("accountFlags"),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Le(7)]);function wf({programId:s,marketInfo:e}){let t=_([E("version"),kt("instruction"),A("baseLotSize"),A("quoteLotSize"),Gt("feeRateBps"),A("vaultSignerNonce"),A("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:Pf,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 Af({keys:n,programId:s,data:o})}async function zr({connection:s,wallet:e,marketInfo:t}){var r,a,c,u,l,m,d,p;let n=new yl,o=await s.getMinimumBalanceForRentExemption(165);n.add(Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:gl}),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:gl}),bl(t.baseVault.publicKey,t.baseMint,t.vaultOwner),bl(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Ao.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await s.getMinimumBalanceForRentExemption(va.span),space:va.span,programId:t.programId}));let i=new yl;return i.add(Ao.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}),Ao.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}),Ao.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}),Ao.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}),wf({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:[z.CreateAccount,z.CreateAccount,z.InitAccount,z.InitAccount]},{transaction:i,signer:[],instructionTypes:[z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.CreateAccount,z.InitMarket]}]}var Eo=class extends qe{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=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-market`}),P=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-request`}),w=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-event`}),T=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-bids`}),h=Je({fromPublicKey:y,programId:i,assignSeed:b&&`${b}-asks`}),k=Je({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-baseVault`}),B=Je({fromPublicKey:y,programId:Pl,assignSeed:b&&`${b}-quoteVault`}),x=0,S=new Ri(100);function I(){let G=new Ri(0);for(;;)try{return{vaultOwner:Ci.createProgramAddressSync([g.publicKey.toBuffer(),G.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:G}}catch{if(G.iaddn(1),G.gt(new Ri(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:N}=I(),L=new Ri(Math.round(10**e.decimals*n)),v=new Ri(Math.round(n*10**t.decimals*o));if(L.eq(Ft))throw Error("lot size is too small");if(v.eq(Ft))throw Error("tick size or lot size is too small");let R=await zr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:g,baseMint:e.mint,quoteMint:t.mint,baseVault:k,quoteVault:B,vaultOwner:C,requestQueue:P,eventQueue:w,bids:T,asks:h,feeRateBps:x,quoteDustThreshold:S,vaultSignerNonce:N,baseLotSize:L,quoteLotSize:v,requestQueueSpace:r,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),M=this.createTxBuilder(f);M.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let G of R.slice(1,R.length))M.addInstruction({instructions:G.transaction.instructions,signers:G.signer,instructionTypes:G.instructionTypes});return m===0?M.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.publicKey,quoteVault:B.publicKey,baseMint:new Ci(e.mint),quoteMint:new Ci(t.mint)}}):M.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:g.publicKey,requestQueue:P.publicKey,eventQueue:w.publicKey,bids:T.publicKey,asks:h.publicKey,baseVault:k.publicKey,quoteVault:B.publicKey,baseMint:new Ci(e.mint),quoteMint:new Ci(t.mint)}})}};var Li=class extends qe{constructor(t){super(t);this.stableLayout=new Ki({connection:this.scope.connection,modelDataPubKey:this.scope.cluster==="mainnet"?void 0:hn.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 O(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=_r(t[i?"mintB":"mintA"]),[c,u]=[new Ze(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Ze(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Ze(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.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=Ft;r.isZero()||(d=m==="base"?mr(r.mul(u),c):mr(r.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=mr(r.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new lt(new Ze(1)).add(o),y=new lt(new Ze(1)).sub(o),b=f.mul(d).quotient,g=y.mul(d).quotient,P=new Me(a,d),w=new Me(a,b),T=new Me(a,g);return this.logDebug("anotherAmount:",P.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:P,maxAnotherAmount:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[g,P]=[i.token,r.token],w=await f.getCreatedTokenAccount({mint:g.mint,associatedOnly:!1}),T=await f.getCreatedTokenAccount({mint:P.mint,associatedOnly:!1});!w&&!T&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let h=await f.getCreatedTokenAccount({mint:new tt(n.lpMint.address)}),k=[g,P],B=[w,T],x=[i.raw,r.raw],S=i.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(k.reverse(),B.reverse(),x.reverse(),I=c==="a"?"quote":"base"):S==="base"&&(I=c==="a"?"base":"quote");let[C,N]=k,[L,v]=B,[R,M]=x,G=o!=null?o:await this.getAmmPoolKeys(n.id),Y=this.createTxBuilder(p),te=await f.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:L,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:J}=te,ee=Xe(te,["tokenAccount"]);Y.addInstruction(ee);let ke=await f.handleTokenAccount({side:"in",amount:M,mint:N.mint,tokenAccount:v,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ie}=ke,de=Xe(ke,["tokenAccount"]);Y.addInstruction(de);let Re=await f.handleTokenAccount({side:"out",amount:0,mint:new tt(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:y,checkCreateATAOwner:b}),{tokenAccount:ne}=Re,Z=Xe(Re,["tokenAccount"]);return Y.addInstruction(Z),Y.addInstruction({instructions:[ul({poolInfo:n,poolKeys:G,userKeys:{baseTokenAccount:J,quoteTokenAccount:ie,lpTokenAccount:ne,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:M,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5AddLiquidity:z.AmmV4AddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),Y.addCustomComputeBudget(m),Y.addTipInstruction(d),l===0?await Y.buildV0():Y.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,P=await g.getCreatedTokenAccount({mint:b,associatedOnly:!1});P||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",g.tokenAccounts);let w=await g.getCreatedTokenAccount({mint:f}),T=await g.getCreatedTokenAccount({mint:y}),h=this.createTxBuilder(d),{bypassAssociatedCheck:k,checkCreateATAOwner:B}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),N=await g.handleTokenAccount({side:"out",amount:0,mint:f,tokenAccount:w,bypassAssociatedCheck:k,checkCreateATAOwner:B}),{tokenAccount:x}=N,S=Xe(N,["tokenAccount"]);h.addInstruction(S);let L=await g.handleTokenAccount({side:"out",amount:0,mint:y,tokenAccount:T,bypassAssociatedCheck:k,checkCreateATAOwner:B}),{tokenAccount:I}=L,C=Xe(L,["tokenAccount"]);return h.addInstruction(C),h.addInstruction({instructions:[Ka({poolInfo:n,poolKeys:p,userKeys:{lpTokenAccount:P,baseTokenAccount:x,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:i,baseAmountMin:r,quoteAmountMin:a})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.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=Hn,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),P={};for(let G of this.scope.account.tokenAccountRawInfos)(P[G.accountInfo.mint.toString()]===void 0||re(this.scope.ownerPubKey,G.accountInfo.mint,Hn).publicKey.equals(G.pubkey))&&(P[G.accountInfo.mint.toString()]=G.pubkey);let w=P[t.lpMint.address];if(w===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===Ye.WSOL.mint.toString(),k=t.mintB.address===Ye.WSOL.mint.toString(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,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(x||{}),B===void 0)throw new Error("base token account not found");let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(g.addInstruction(I||{}),S===void 0)throw new Error("quote token account not found");if(P[t.mintA.address]=B,P[t.mintB.address]=S,r!==void 0&&!(a!=null&&a.isZero())){let G=$t[r.programId],Y=Zt({programId:new tt(r.programId),poolId:new tt(r.id),owner:this.scope.ownerPubKey,version:G}),J,ee=await this.scope.connection.getAccountInfo(Y);if(ee&&(J=mi(G).decode(ee.data)),G!==6&&!J){let{instruction:Re,instructionType:Te}=pi({id:new tt(r.id),programId:new tt(r.programId),version:G,ledger:Y,owner:this.scope.ownerPubKey});g.addInstruction({instructions:[Re],instructionTypes:[Te]})}let ie=[];for(let Re of r.rewardInfos){let Te=Re.mint.address===Ye.WSOL.mint.toString();if(P[Re.mint.address])ie.push(P[Re.mint.address]);else{let{account:ot,instructionParams:Ot}=await this.scope.account.getOrCreateTokenAccount({mint:new tt(Re.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Te,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});ot||this.logAndCreateError("farm reward account not found:",Re.mint.address),Ot&&g.addInstruction(Ot),ie.push(ot)}}let de=(await this.scope.api.fetchFarmKeysById({ids:r.id}))[0],ne={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:r,farmKeys:de,lpAccount:w,rewardAccounts:ie},Z=$t[r.programId],te=Z===6?fi(ne):Z===5?yi(ne):bi(ne),ke={3:z.FarmV3Withdraw,5:z.FarmV5Withdraw,6:z.FarmV6Withdraw};g.addInstruction({instructions:[te],instructionTypes:[ke[Z]]})}let C=await this.getAmmPoolKeys(t.id),N=Ka({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:w,baseTokenAccount:B,quoteTokenAccount:S,owner:this.scope.ownerPubKey},lpAmount:T,baseAmountMin:0,quoteAmountMin:0});g.addInstruction({instructions:[N],instructionTypes:[t.pooltype.includes("StablePool")?z.AmmV5RemoveLiquidity:z.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[L,v]=t.mintA.address===n.mintA.address?[B,S]:[S,B],R=await this.scope.clmm.getClmmPoolKeys(n.id),M=await Se.openPositionFromBaseInstructions(q(V({poolInfo:n,poolKeys:R,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:L,tokenAccountB:v},withMetadata:"create"},i),{base:c,getEphemeralSigners:f}));return g.addInstruction({instructions:[...M.instructions],signers:M.signers,instructionTypes:[...M.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 v;let P=u.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),w=u.useSOLBalance&&o.mint.equals(Yr),T=u.useSOLBalance&&i.mint.equals(Yr),h=this.createTxBuilder(g),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:P,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});h.addInstruction(B||{});let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:T?{payer:P,amount:a}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:l,checkCreateATAOwner:m});if(h.addInstruction(S||{}),k===void 0||x===void 0)throw Error("you don't has some token account");let I=Oa({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:N,instructionType:L}=Ca(q(V({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:x,userLpVault:re(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:r,pcAmount:a}));return h.addInstruction({instructions:[N],instructionTypes:[L]}),h.addCustomComputeBudget(y),h.addTipInstruction(b),h.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=yr,marketProgram:n=ju,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:P,computeBudgetConfig:w,txTipConfig:T,feePayer:h}){var Qi,ji,Bo;let k=this.scope.ownerPubKey,B=m.feePayer||((Qi=this.scope.owner)==null?void 0:Qi.publicKey),x=m.useSOLBalance&&r.mint.equals(Yr),S=m.useSOLBalance&&a.mint.equals(Yr),I=p?`${r.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-market`}),N=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-request`}),L=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-event`}),v=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-bids`}),R=Je({fromPublicKey:k,programId:n,assignSeed:I&&`${I}-asks`}),M=Je({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-baseVault`}),G=Je({fromPublicKey:k,programId:Hn,assignSeed:I&&`${I}-quoteVault`}),Y=0,J=new Ze(100);function ee(){let Bt=new Ze(0);for(;;)try{return{vaultOwner:tt.createProgramAddressSync([C.publicKey.toBuffer(),Bt.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Bt}}catch{if(Bt.iaddn(1),Bt.gt(new Ze(25555)))throw Error("find vault owner error")}}let{vaultOwner:ie,vaultSignerNonce:de}=ee(),ne=new Ze(Math.round(10**r.decimals*b)),Z=new Ze(Math.round(b*10**a.decimals*g));if(ne.eq(Ft))throw Error("lot size is too small");if(Z.eq(Ft))throw Error("tick size or lot size is too small");let te=await zr({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:ie,baseMint:r.mint,quoteMint:a.mint,id:C,baseVault:M,quoteVault:G,requestQueue:N,eventQueue:L,bids:v,asks:R,feeRateBps:Y,quoteDustThreshold:J,vaultSignerNonce:de,baseLotSize:ne,quoteLotSize:Z,lowestFeeMarket:d}}),ke=this.createTxBuilder(h);ke.addInstruction({instructions:te[0].transaction.instructions,signers:te[0].signer});for await(let Bt of te.slice(1,te.length))ke.addInstruction({instructions:Bt.transaction.instructions,signers:Bt.signer,instructionTypes:Bt.instructionTypes});let{account:Re,instructionParams:Te}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:x?{payer:B,amount:c}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:f,checkCreateATAOwner:y,assignSeed:x&&I?`${I}-wsol`:void 0});ke.addInstruction(Te||{});let{account:ot,instructionParams:Ot}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:B,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:y,assignSeed:S&&I?`${I}-wsol`:void 0});if(ke.addInstruction(Ot||{}),Re===void 0)throw Error("you don't has base token account");if(ot===void 0)throw Error("you don't has quote token account");let it=Oa({version:4,marketVersion:3,marketId:C.publicKey,baseMint:r.mint,quoteMint:a.mint,baseDecimals:r.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),Yi={programId:t,ammId:it.id,ammAuthority:it.authority,ammOpenOrders:it.openOrders,lpMint:it.lpMint,coinMint:it.baseMint,pcMint:it.quoteMint,coinVault:it.baseVault,pcVault:it.quoteVault,withdrawQueue:it.withdrawQueue,ammTargetOrders:it.targetOrders,poolTempLp:it.lpVault,marketProgramId:it.marketProgramId,marketId:it.marketId,ammConfigId:it.configId,feeDestinationId:o},{instruction:Hi,instructionType:Io}=Ca(q(V({},Yi),{userWallet:this.scope.ownerPubKey,userCoinVault:Re,userPcVault:ot,userLpVault:re(this.scope.ownerPubKey,it.lpMint,i).publicKey,nonce:it.nonce,openTime:l,coinAmount:c,pcAmount:u}));ke.addInstruction({instructions:[Hi],instructionTypes:[Io]});let jt=x||S?[((ji=Te==null?void 0:Te.instructions)==null?void 0:ji[0])||((Bo=Ot==null?void 0:Ot.instructions)==null?void 0:Bo[0])].filter(Bt=>!!Bt):void 0;return P===0?ke.sizeCheckBuildV0({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:N.publicKey,eventQueue:L.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:M.publicKey,quoteVault:G.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Yi)}):ke.sizeCheckBuild({computeBudgetConfig:w,splitIns:jt,address:V({requestQueue:N.publicKey,eventQueue:L.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:M.publicKey,quoteVault:G.publicKey,baseMint:new tt(r.mint),quoteMint:new tt(a.mint)},Yi)})}async getCreatePoolFee({programId:t}){let n=Gr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return al.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,P=t.version===4,w;if(P)w=new O(y.toString()).div(10**g).div(new O(f.toString()).div(10**b));else{let L=pl(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?w=new O(1e6).div(L*1e6):w=new O(L*1e6).div(1e6)}let T=n,h=new Ze(0),k=new Ze(0);if(!T.isZero())if(P){k=Wn(T.mul(Ta),Er);let L=T.sub(k),v=f.add(L);h=y.mul(L).div(v)}else{k=T.mul(new Ze(2)).div(new Ze(1e4));let L=T.sub(k);p==="quote"?h=new Ze(ml(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.toNumber())):h=new Ze(dl(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),L.toNumber()))}let B=new Ze(new O(h.toString()).mul(1-r).toFixed(0)),x=h,S=B,I=new O(h.toString()).div(new O(T.sub(k).toString()).toFixed(0));!T.isZero()&&!h.isZero()&&(I=new O(h.toString()).div(10**g).div(new O(T.sub(k).toString()).div(10**b)));let C=w.sub(I).div(w).mul(100);return{amountOut:x,minAmountOut:S,currentPrice:w,executionPrice:I,priceImpact:C,fee:k}}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 O(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 O(y.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new O(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 O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new Ze(0),P=n;if(!P.isZero()){P.gt(y)&&(P=y.sub(new Ze(1)));let S=y.sub(P);g=f.mul(P).div(S).mul(Er).div(Er.sub(Ta))}let w=new Ze(new O(g.toString()).mul(1+r).toFixed(0)),T=g,h=w;this.logDebug("amountIn:",new O(T.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(h.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let k=null;!g.isZero()&&!P.isZero()&&(k=new O(P.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${k.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 O(1).div(k).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let B=b.mul(T.toString()),x=B.sub(n.toString()).abs().div(B);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:T,maxAmountIn:h,currentPrice:b,executionPrice:k,priceImpact:x}}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,P]=r===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],w=y&&g.address===$.toBase58(),T=b&&P.address===$.toBase58(),{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(g.address),owner:this.scope.ownerPubKey,createInfo:w?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:f});p.addInstruction(k||{}),h||this.logAndCreateError("input token account not found",{token:g.symbol||g.address,tokenAccountIn:h,inputTokenUseSolBalance:w,associatedOnly:f});let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Hn,mint:new tt(P.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:T?!1:f});p.addInstruction(x||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:P.symbol||P.address,tokenAccountOut:B,outputTokenUseSolBalance:T,associatedOnly:f});let S=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),p.addInstruction({instructions:[I===4?qr({version:I,poolKeys:S,userKeys:{tokenAccountIn:h,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a}):Ur({version:I,poolKeys:S,userKeys:{tokenAccountIn:h,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[I===4?z.AmmV4SwapBaseIn:z.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=Si.decode(m.accountInfo.data);i[String(t[l])]=q(V({},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(kf.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(V({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Xr({[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 Rt from"bn.js";import{AccountLayout as Al,createAssociatedTokenAccountIdempotentInstruction as wl,TOKEN_2022_PROGRAM_ID as Qn,TOKEN_PROGRAM_ID as Ni}from"@solana/spl-token";var Oi=class extends qe{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var B;let{programId:t,owner:n=((B=this.scope.owner)==null?void 0:B.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 Rt(new j(o.address).toBuffer()).gt(new Rt(new j(i.address).toBuffer()))?[i,o,new O(1).div(a)]:[o,i,a],P=pe.priceToSqrtPriceX64(g,y.decimals,b.decimals),w=[],T=[];y.programId===Qn.toBase58()&&T.push(Pa(t,new j(y.address)).publicKey),b.programId===Qn.toBase58()&&T.push(Pa(t,new j(b.address)).publicKey),(await this.scope.connection.getMultipleAccountsInfo(T)).forEach((x,S)=>{x&&w.push(T[S])});let k=await Se.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:b,ammConfigId:r.id,initialPriceX64:P,forerunCreate:!l&&u,extendMintAccount:w});return f.addInstruction(k),f.addCustomComputeBudget(c),f.addTipInstruction(d),f.versionBuild({txVersion:m,extInfo:{address:q(V({},k.address),{observationId:k.address.observationId.toBase58(),exBitmapAccount:k.address.exBitmapAccount.toBase58(),programId:t.toString(),id:k.address.poolId.toString(),mintA:y,mintB:b,openTime:"0",vault:{A:k.address.mintAVault.toString(),B:k.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:V({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:k.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},qc),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 P=this.createTxBuilder(g),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===$.toString(),k=n.useSOLBalance&&e.mintB.address===$.toString(),[B,x]=r==="MintA"?[a,c]:[c,a],{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:l,checkCreateATAOwner:m});S&&(w=S),P.addInstruction(I||{});let{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||x.isZero()?{payer:this.scope.ownerPubKey,amount:x}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});C&&(T=C),P.addInstruction(N||{}),(!w||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:w==null?void 0:w.toBase58(),ownerTokenAccountB:T==null?void 0:T.toBase58()});let L=t||await this.getClmmPoolKeys(e.id),v=await Se.openPositionFromBaseInstructions({poolInfo:e,poolKeys:L,ownerInfo:q(V({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T}),tickLower:o,tickUpper:i,base:r,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return P.addInstruction(v),P.addCustomComputeBudget(f),P.addTipInstruction(y),P.versionBuild({txVersion:b,extInfo:V({},v.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 P=this.createTxBuilder(g),w=null,T=null,h=n.useSOLBalance&&e.mintA.address===$.toBase58(),k=n.useSOLBalance&&e.mintB.address===$.toBase58(),{account:B,instructionParams:x}=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});B&&(w=B),P.addInstruction(x||{});let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});S&&(T=S),P.addInstruction(I||{}),(w===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),N=await Se.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:T},tickLower:r,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:y,nft2022:b});return P.addInstruction(N),P.addCustomComputeBudget(p),P.addTipInstruction(f),P.versionBuild({txVersion:d,extInfo:{address:N.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,P=c.useSOLBalance&&t.mintA.address===$.toString(),w=c.useSOLBalance&&t.mintB.address===$.toString(),{account:T,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new j(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:P||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!P,associatedOnly:P?!1:u,checkCreateATAOwner:l});T&&(b=T),y.addInstruction(h||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:u,checkCreateATAOwner:l});k&&(g=k),y.addInstruction(B||{}),!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=n!=null?n:await this.getClmmPoolKeys(t.id),S=Se.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:x,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(Qn)});return y.addInstruction(S),y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;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===$.toString(),P=a.useSOLBalance&&t.mintB.address===$.toString(),{account:w,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});w&&(y=w),f.addInstruction(T||{});let{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new j(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o==="MintA"?r:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?r:i}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});h&&(b=h),f.addInstruction(k||{}),!y&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),x=Se.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:b},base:o,baseAmount:i,otherAmountMax:r,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(Qn)});return f.addInstruction(x),f.addCustomComputeBudget(l),f.addTipInstruction(m),f.versionBuild({txVersion:d,extInfo:{address:x.address}})}async decreaseLiquidity(e){var L;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===$.toString(),g=i.useSOLBalance&&t.mintB.address===$.toString(),P,w,{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});P=T,h&&y.addInstruction(h);let{account:k,instructionParams:B}=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});w=k,B&&y.addInstruction(B);let x=[];for(let v of t.rewardDefaultInfos){let R=i.useSOLBalance&&v.mint.address===$.toString(),M;if(v.mint.address===t.mintA.address)M=P;else if(v.mint.address===t.mintB.address)M=w;else{let{account:G,instructionParams:Y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(v.mint.programId),mint:new j(v.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});M=G,Y&&y.addInstruction(Y)}x.push(M)}!P&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),I=(L=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:L.owner.equals(Qn),C=await Se.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:P,tokenAccountB:w,rewardAccounts:x},liquidity:c,amountMinA:r,amountMinB:a,nft2022:I});y.addInstruction({instructions:C.instructions,instructionTypes:[z.ClmmDecreasePosition]});let N=V({},C.address);if(i.closePosition){let v=await Se.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o,nft2022:I});y.addInstruction({endInstructions:v.instructions,endInstructionTypes:v.instructionTypes}),N=V(V({},N),v.address)}return y.addCustomComputeBudget(m),y.addTipInstruction(d),y.versionBuild({txVersion:p,extInfo:{address:N}})}async lockPosition(e){var f;let{programId:t=oi,authProgramId:n=br,poolProgramId:o=no,ownerPosition:i,payer:r,computeBudgetConfig:a,txTipConfig:c,txVersion:u,getEphemeralSigners:l,feePayer:m}=e,d=this.createTxBuilder(m),p=await Se.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(Qn)});return d.addInstruction(p),d.addCustomComputeBudget(a),d.addTipInstruction(c),d.versionBuild({txVersion:u,extInfo:p.address})}async harvestLockPosition(e){let{programId:t=oi,authProgramId:n=br,clmmProgram:o=no,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=_o.decode(b.data),P=a.useSOLBalance&&f.mintA.address===$.toString(),w=a.useSOLBalance&&f.mintB.address===$.toString(),T,h,{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintA.programId,mint:new j(f.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:P?!1:c,checkCreateATAOwner:u});T=k,B&&y.addInstruction(B);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.mintB.programId,mint:new j(f.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:w?!1:c,checkCreateATAOwner:u});h=x,S&&y.addInstruction(S);let I={},C=[];for(let ie of f.rewardInfos){let de=a.useSOLBalance&&ie.mint.address===$.toString(),ne=I[ie.mint.address];if(!ne){let{account:Z,instructionParams:te}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(ie.mint.programId),mint:new j(ie.mint.address),notUseTokenAccount:de,owner:this.scope.ownerPubKey,skipCloseAccount:!de,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:de?!1:c});ne=Z,te&&y.addInstruction(te)}I[ie.mint.address]=ne,C.push(ne)}let N=Vo(t,r.lockNftMint).publicKey,L=re(this.scope.ownerPubKey,r.lockNftMint,Ni).publicKey,v=oe.getTickArrayStartIndexByTick(g.tickLower,f.config.tickSpacing),R=oe.getTickArrayStartIndexByTick(g.tickUpper,f.config.tickSpacing),{publicKey:M}=Ie(new j(f.programId),r.poolId,v),{publicKey:G}=Ie(new j(f.programId),r.poolId,R),{publicKey:Y}=ln(new j(f.programId),r.poolId,g.tickLower,g.tickUpper),J=[];for(let ie=0;ie<f.rewardInfos.length;ie++)J.push({poolRewardVault:new j(f.rewardInfos[ie].vault),ownerRewardVault:C[ie],rewardMint:new j(f.rewardInfos[ie].mint.address)});let ee=await Se.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:N,clmmProgram:o,lockOwner:this.scope.ownerPubKey,lockNftMint:r.lockNftMint,lockNftAccount:L,positionNftAccount:r.nftAccount,positionId:r.positionId,poolId:r.poolId,protocolPosition:Y,vaultA:new j(f.vault.A),vaultB:new j(f.vault.B),tickArrayLower:M,tickArrayUpper:G,userVaultA:T,userVaultB:h,mintA:new j(f.mintA.address),mintB:new j(f.mintB.address),rewardAccounts:J,exTickArrayBitmap:et(o,r.poolId).publicKey});return y.addInstruction({instructions:[ee],instructionTypes:[z.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=Se.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(Qn)});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()===$.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 Rt(new O(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=Se.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:ge.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===$.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 Rt(new O(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 P=t!=null?t:await this.getClmmPoolKeys(e.id),w=Se.initRewardInstructions({poolInfo:e,poolKeys:P,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:ge.decimalToX64(p.perSecond)}});d=V(V({},d),w.address),m.addInstruction(w)}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($),{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 Rt(new O(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=Se.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ge.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===$.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 Rt(new O(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),P=Se.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:ge.decimalToX64(p.perSecond)}});m.addInstruction(P),d=V(V({},d),P.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($),{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=Se.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(P=>P.mint.address===m.toString());if(!d){this.logAndCreateError("reward mint error","not found reward mint",m);continue}let p=t.useSOLBalance&&m.equals($),{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=Se.collectRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardMint:m});u.addInstruction(g),l=V(V({},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,P=c.useSOLBalance&&e.mintA.address===$.toBase58(),w=c.useSOLBalance&&e.mintB.address===$.toBase58(),T;!r||r.equals(new O(0))?T=g?St.add(new Rt(1)):Kt.sub(new Rt(1)):T=pe.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?o:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=x,S&&b.addInstruction(S)}let k;if(!k){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:o}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=x,S&&b.addInstruction(S)}(!h||!k)&&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:k,mintAUseSOLBalance:P,mintBUseSOLBalance:w,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:k},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,P=c.useSOLBalance&&e.mintA.address===$.toBase58(),w=c.useSOLBalance&&e.mintB.address===$.toBase58(),T;!r||r.equals(new O(0))?T=n.toString()===e.mintB.address?St.add(new Rt(1)):Kt.sub(new Rt(1)):T=pe.priceToSqrtPriceX64(r,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new j(e.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:P||!g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?i:0}:void 0,associatedOnly:P?!1:l,checkCreateATAOwner:m});h=x,S&&b.addInstruction(S)}let k;if(!k){let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new j(e.mintB.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,skipCloseAccount:!w,createInfo:w||g?{payer:c.feePayer||this.scope.ownerPubKey,amount:g?0:i}:void 0,associatedOnly:w?!1:l,checkCreateATAOwner:m});k=x,S&&b.addInstruction(S)}(!h||!k)&&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:k,mintAUseSOLBalance:P,mintBUseSOLBalance:w,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return b.addInstruction(Se.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:k},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=oi,lockAuth:d=br,clmmProgram:p=no}){var w,T;let f={};for(let h of this.scope.account.tokenAccountRawInfos)i?re(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 k,B;g[h.pubkey.toBase58()]=(B=(k=h==null?void 0:h.accountInfo)==null?void 0:k.owner)!=null?B:null});let P=this.createTxBuilder(l);for(let h of Object.values(e)){if(t[h.id]===void 0||!t[h.id].find(v=>!v.liquidity.isZero()||v.rewardInfos.find(R=>!R.rewardAmountOwed.isZero())))continue;let k=h,B=o.useSOLBalance&&k.mintA.address===$.toString(),x=o.useSOLBalance&&k.mintB.address===$.toString(),S=f[k.mintA.address];if(!S)if(B){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintA.programId,mint:new j(k.mintA.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,skipCloseAccount:!B,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:B?!1:i,checkCreateATAOwner:r});S=v,R&&P.addInstruction(R)}else{let v=new j(k.mintA.address);S=this.scope.account.getAssociatedTokenAccount(v,new j(k.mintA.programId)),P.addInstruction({instructions:[wl(this.scope.ownerPubKey,S,this.scope.ownerPubKey,v,new j(k.mintA.programId))]})}let I=f[k.mintB.address];if(!I)if(x){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:k.mintB.programId,mint:new j(k.mintB.address),notUseTokenAccount:x,owner:this.scope.ownerPubKey,skipCloseAccount:!x,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:x?!1:i,checkCreateATAOwner:r});I=v,R&&P.addInstruction(R)}else{let v=new j(k.mintB.address);I=this.scope.account.getAssociatedTokenAccount(v,new j(k.mintB.programId)),P.addInstruction({instructions:[wl(this.scope.ownerPubKey,I,this.scope.ownerPubKey,v,new j(k.mintB.programId))]})}f[k.mintA.address]=S,f[k.mintB.address]=I;let C=[];for(let v of k.rewardDefaultInfos){let R=o.useSOLBalance&&v.mint.address===$.toString(),M=f[v.mint.address];if(!M){let{account:G,instructionParams:Y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new j(v.mint.programId),mint:new j(v.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,skipCloseAccount:!R,createInfo:{payer:o.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:R?!1:i});M=G,Y&&P.addInstruction(Y)}f[v.mint.address]=M,C.push(M)}let N=await this.getClmmPoolKeys(k.id),L=[];for(let v=0;v<N.rewardInfos.length;v++)L.push({poolRewardVault:new j(N.rewardInfos[v].vault),ownerRewardVault:C[v],rewardMint:new j(N.rewardInfos[v].mint.address)});for(let v of t[h.id]){let R=(w=n==null?void 0:n[h.id])==null?void 0:w[v.nftMint.toBase58()];if(R){let M=re(this.scope.ownerPubKey,R.lockNftMint,Ni).publicKey,G=oe.getTickArrayStartIndexByTick(v.tickLower,N.config.tickSpacing),Y=oe.getTickArrayStartIndexByTick(v.tickUpper,N.config.tickSpacing),{publicKey:J}=Ie(new j(N.programId),R.poolId,G),{publicKey:ee}=Ie(new j(N.programId),R.poolId,Y),{publicKey:ie}=ln(new j(N.programId),R.poolId,v.tickLower,v.tickUpper),de=Vo(m,R.lockNftMint).publicKey,ne=Se.harvestLockPositionInstructionV2({programId:m,auth:d,lockPositionId:de,clmmProgram:p,lockOwner:this.scope.ownerPubKey,lockNftMint:R.lockNftMint,lockNftAccount:M,positionNftAccount:R.nftAccount,positionId:R.positionId,poolId:R.poolId,protocolPosition:ie,vaultA:new j(N.vault.A),vaultB:new j(N.vault.B),tickArrayLower:J,tickArrayUpper:ee,userVaultA:S,userVaultB:I,mintA:new j(N.mintA.address),mintB:new j(N.mintB.address),rewardAccounts:L,exTickArrayBitmap:et(p,R.poolId).publicKey});P.addInstruction({instructions:[ne],instructionTypes:[z.ClmmHarvestLockPosition],lookupTableAddress:N.lookupTableAccount?[N.lookupTableAccount]:[]})}else{let M=Se.decreaseLiquidityInstructions({poolInfo:k,poolKeys:N,ownerPosition:v,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:S,tokenAccountB:I,rewardAccounts:C},liquidity:new Rt(0),amountMinA:new Rt(0),amountMinB:new Rt(0),nft2022:(T=g[v.nftMint.toBase58()])==null?void 0:T.equals(Qn)});P.addInstruction(M)}}}return c===0?P.sizeCheckBuildV0({computeBudgetConfig:u}):P.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ki(e).publicKey);return t?tl.decode(t.data).whitelistMints.filter(o=>!o.equals(j.default)):[]}async getOwnerPositionInfo({programId:e=no}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(r=>r.accountInfo.amount.eq(new Rt(1))).map(r=>Ct(new j(e),r.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(r=>{if(!r)return;let a=_o.decode(r.data);i.push(a)}),i}async getOwnerLockedPositionInfo({programId:e=oi}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(c=>c.accountInfo.amount.eq(new Rt(1))).map(c=>Vo(new j(e),c.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];o.forEach(c=>{if(!c)return;let u=nl.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=_o.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=po.decode(r.accountInfo.data),c=pe.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=q(V({},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()]=Jc.decode(c.accountInfo.data))});let r=await ve.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:Tt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||Ni.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?zn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:Tt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||Ni.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(V({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await ve.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 xo({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=$c(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Al.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Al.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=q(V({},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:Tt({address:m.tokenMint.toBase58(),programId:Ni.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 Mf,NATIVE_MINT as Do,TOKEN_PROGRAM_ID as Lt,createAssociatedTokenAccountIdempotentInstruction as $r}from"@solana/spl-token";import kl from"bn.js";import Hr from"bn.js";function Ma(s,e){if(e.isZero())throw Error("divisor is zero");return s.mod(e)}function hf(s,e){if(e.isZero())throw Error("rhs is zero");let t=s.div(e);return Ma(s,e).gt(vi)&&(t=t.add(new Hr(1))),[t,e]}var vi=new Hr(0),Mi=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]=hf(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 Ma(e.mul(n),t).gt(vi)&&r.gt(vi)&&(r=r.add(new Hr(1))),Ma(e.mul(o),t).gt(vi)&&a.gt(vi)&&(a=a.add(new Hr(1))),{tokenAmount0:r,tokenAmount1:a};throw Error("roundDirection value error")}};import Tf from"bn.js";var Et=class{static tradingFee(e,t){return Jo(e,t,Vt)}static protocolFee(e,t){return dr(e,t,Vt)}static fundFee(e,t){return dr(e,t,Vt)}static creatorFee(e,t){return Jo(e,t,Vt)}static splitCreatorFee(e,t,n){return dr(e,n,t.add(n))}static calculatePreFeeAmount(e,t){if(t.isZero())return e;let n=e.mul(Vt),o=Vt.sub(t);return n.add(o).sub(new Tf(1)).div(o)}};var Fi=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 kl(0),l=Et.tradingFee(e,o),m;c?(u=Et.creatorFee(e,i),m=e.sub(l).sub(u)):m=e.sub(l);let d=Et.protocolFee(l,r),p=Et.protocolFee(l,a),f=Mi.swapBaseInputWithoutFees(m,t,n),y;return c?y=f:(u=Et.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 kl(0),m;if(c)m=e;else{let b=Et.calculatePreFeeAmount(e,i);l=b.sub(e),m=b}let d=Mi.swapBaseOutputWithoutFees(m,t,n),p;if(c){let b=Et.calculatePreFeeAmount(d,o.add(i)),g=b.sub(d);l=Et.splitCreatorFee(g,o,i),u=g.sub(l),p=b}else{let b=Et.calculatePreFeeAmount(d,o);u=b.sub(d),p=b}let f=Et.protocolFee(u,r),y=Et.fundFee(u,a);return{newInputVaultAmount:t.add(d),newOutputVaultAmount:n.sub(m),inputAmount:p,outputAmount:e,tradeFee:u,protocolFee:f,fundFee:y,creatorFee:l}}};import je from"bn.js";import{PublicKey as _i,TransactionInstruction as Rn,Keypair as Nf,SystemProgram as _a}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Qr,TOKEN_2022_PROGRAM_ID as Ea,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";var If=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),kS=Buffer.from("amm_config","utf8"),Bf=Buffer.from("pool","utf8"),xf=Buffer.from("pool_lp_mint","utf8"),Sf=Buffer.from("pool_vault","utf8"),Kf=Buffer.from("observation","utf8"),Cf=Buffer.from("permission","utf8");function wo(s){return be([If],s)}function Fa(s,e,t,n){return be([Bf,e.toBuffer(),t.toBuffer(),n.toBuffer()],s)}function Rf(s,e){return be([xf,e.toBuffer()],s)}function hl(s,e,t){return be([Sf,e.toBuffer(),t.toBuffer()],s)}function ko(s,e){return be([Kf,e.toBuffer()],s)}function Va({poolId:s,programId:e,configId:t,mintA:n,mintB:o}){let i=wo(e).publicKey,r=s||Fa(e,t,n,o).publicKey,a=Rf(e,r).publicKey,c=hl(e,r,n).publicKey,u=hl(e,r,o).publicKey,l=ko(e,r).publicKey;return{poolId:r,configId:t,authority:i,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var Lf=Buffer.from("locked_liquidity","utf8");function Vi(s,e){return be([Lf,e.toBuffer()],s)}function Tl(s,e){return be([Cf,e.toBuffer()],s)}var Of=he("Raydium_cpmm"),Ln={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 Il(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountMaxA"),A("amountMaxB"),A("openTime")]),h=Fa(s,t,i,r).publicKey,k=[{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:Cn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1},{pubkey:xs,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1}],B=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:P,openTime:w},B),new Rn({keys:k,programId:s,data:Buffer.from([...Ln.initialize,...B])})}function Bl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([A("lpAmount"),A("amountMaxA"),A("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:Cn,isSigner:!1,isWritable:!1},{pubkey:Ea,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 Of.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),y.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Rn({keys:b,programId:s,data:Buffer.from([...Ln.deposit,...g])})}function xl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([A("lpAmount"),A("amountMinA"),A("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:Cn,isSigner:!1,isWritable:!1},{pubkey:Ea,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:En,isSigner:!1,isWritable:!1}],g=Buffer.alloc(y.span);return y.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Rn({keys:b,programId:s,data:Buffer.from([...Ln.withdraw,...g])})}function Wo(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([A("amountIn"),A("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}],P=Buffer.alloc(b.span);return b.encode({amountIn:f,amounOutMin:y},P),new Rn({keys:g,programId:s,data:Buffer.from([...Ln.swapBaseInput,...P])})}function Sl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y){let b=_([A("amountInMax"),A("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}],P=Buffer.alloc(b.span);return b.encode({amountInMax:f,amountOut:y},P),new Rn({keys:g,programId:s,data:Buffer.from([...Ln.swapBaseOutput,...P])})}async function Kl(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=Nf.generate();r.push(g),u=g.publicKey}let{publicKey:l}=re(o,u,Cn),{publicKey:m}=xn(u),{publicKey:d}=Vi(s.lockProgram,u),{publicKey:p}=re(e.wallet,c,Cn),{publicKey:f}=re(s.lockAuthProgram,c,Cn),y=vf({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:[z.CpmmLockLp],lookupTableAddress:[]}}function vf({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:ft,isSigner:!1,isWritable:!1},{pubkey:_a.programId,isSigner:!1,isWritable:!1},{pubkey:Cn,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],P=_([A("lpAmount"),He("withMetadata")]),w=Buffer.alloc(P.span);P.encode({lpAmount:y,withMetadata:b},w);let T=Buffer.from([...Ln.lockCpLiquidity,...w]);return new Rn({keys:g,programId:s,data:T})}function Wa({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:io,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:Ju,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:Cn,isSigner:!1,isWritable:!1},{pubkey:Ea,isSigner:!1,isWritable:!1},{pubkey:En,isSigner:!1,isWritable:!1}],P=_([A("lpFeeAmount")]),w=Buffer.alloc(P.span);P.encode({lpFeeAmount:f},w);let T=Buffer.from([...Ln.collectCpFee,...w]);return new Rn({keys:g,programId:s,data:T})}function Da(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:Qr,isSigner:!1,isWritable:!1},{pubkey:_a.programId,isSigner:!1,isWritable:!1}];return new Rn({keys:p,programId:s,data:Ln.collectCreatorFee})}function Cl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h,k){let B=_([A("amountA"),A("amountB"),A("openTime"),E("feeOn")]),x=[{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:P,isSigner:!1,isWritable:!0},{pubkey:Cn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Qr,isSigner:!1,isWritable:!1},{pubkey:_a.programId,isSigner:!1,isWritable:!1}],S=Buffer.alloc(B.span);return B.encode({amountA:w,amountB:T,openTime:h,feeOn:k},S),new Rn({keys:x,programId:s,data:Buffer.from([...Ln.initializeWithPermission,...S])})}var Rl=_([Le(8),E("bump"),He("disableCreatePool"),Gt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),F("protocolOwner"),F("fundOwner"),A("creatorFeeRate"),Q(A(),15)]),jr=_([Le(8),F("configId"),F("poolCreator"),F("vaultA"),F("vaultB"),F("mintLp"),F("mintA"),F("mintB"),F("mintProgramA"),F("mintProgramB"),F("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),A("epoch"),E("feeOn"),He("enableCreatorFee"),Q(E(),6),A("creatorFeesMintA"),A("creatorFeesMintB"),Q(A(),28)]),vS=_([Le(8),F("configId"),Q(A(),30)]);var Ei=class extends qe{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=jr.decode(d.accountInfo.data);o[String(e[m])]=q(V({},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]]=Rl.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 je(Mf.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(V({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(f.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(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(V({},n),{[o]:q(V({},i),{id:new U(o),configInfo:i.configInfo,version:7,authority:wo(i.programId).publicKey,mintA:Tt({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:Tt({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 xo({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=Tt({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=Tt({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=Tt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Lt.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 O(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new O(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:wo(t.programId).publicKey.toBase58(),mintLp:r,config:a,observationId:ko(t.programId,new U(e)).publicKey.toBase58()},rpcData:t,computePoolInfo:q(V({},t),{id:new U(e),configInfo:t.configInfo,version:7,authority:wo(t.programId).publicKey,mintA:o,mintB:i})}}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=Xe(y,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer"]);var M,G,Y;let b=i.feePayer||((M=this.scope.owner)==null?void 0:M.publicKey),g=new je(new U(p.mintA.address).toBuffer()).lte(new je(new U(p.mintB.address).toBuffer())),[P,w]=g?[p.mintA,p.mintB]:[p.mintB,p.mintA],[T,h]=g?[p.mintAAmount,p.mintBAmount]:[p.mintBAmount,p.mintAAmount],k=i.useSOLBalance&&P.address===Do.toBase58(),B=i.useSOLBalance&&w.address===Do.toBase58(),[x,S]=[new U(P.address),new U(w.address)],I=this.createTxBuilder(d),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({mint:x,tokenProgram:P.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:b,amount:T}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:r,checkCreateATAOwner:a});I.addInstruction(N||{});let{account:L,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({mint:new U(w.address),tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:b,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});if(I.addInstruction(v||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let R=Va({poolId:e,programId:t,configId:new U(u.id),mintA:x,mintB:S});return I.addInstruction({instructions:[Il(t,this.scope.ownerPubKey,new U(u.id),R.authority,R.poolId,x,S,R.lpMint,C,L,re(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new U((G=P.programId)!=null?G:Lt),new U((Y=w.programId)!=null?Y:Lt),R.observationId,T,h,o)],instructionTypes:[z.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.addTipInstruction(m),I.versionBuild({txVersion:c,extInfo:{address:q(V({},R),{mintA:P,mintB:w,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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},l),b=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:g,inputAmountFee:P,anotherAmount:w}=a||this.computePairAmount({poolInfo:q(V({},t),{lpAmount:new O(b.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:b.baseReserve,quoteReserve:b.quoteReserve,slippage:new lt(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),T=w.amount,h=t.mintA.address===Do.toString(),k=t.mintB.address===Do.toString(),B=this.createTxBuilder(d),[x,S]=[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});B.addInstruction(C||{});let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?T:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?T:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:y});B.addInstruction(L||{}),!I&&!N&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",p.tokenAccounts);let v=await p.getCreatedTokenAccount({mint:new U(t.lpMint.address)}),J=await p.handleTokenAccount({side:"out",amount:0,mint:new U(t.lpMint.address),tokenAccount:v,bypassAssociatedCheck:f,checkCreateATAOwner:y}),{tokenAccount:R}=J,M=Xe(J,["tokenAccount"]);B.addInstruction(M);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),Y=new lt(new je(1)).sub(r);return B.addInstruction({instructions:[Bl(new U(t.programId),this.scope.ownerPubKey,new U(G.authority),new U(t.id),R,I,N,new U(G.vault.A),new U(G.vault.B),x,S,new U(t.lpMint.address),a?a==null?void 0:a.liquidity:Y.mul(g).quotient,i?P.amount:T,i?T:P.amount)],instructionTypes:[z.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.addTipInstruction(u),B.versionBuild({txVersion:m,lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:void 0})}async withdrawLiquidity(e){var M,G;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 lt(new je(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]=[Fe(p,t.mintA.extensions.feeConfig,y,!1),Fe(f,t.mintB.extensions.feeConfig,y,!1)],{account:P}=this.scope,w=this.createTxBuilder(u),[T,h]=[new U(t.mintA.address),new U(t.mintB.address)],k=T.equals($),B=h.equals($),x,S,{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new U(t.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(k&&l),associatedOnly:!k,checkCreateATAOwner:!1});x=I,C&&w.addInstruction(C);let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new U(t.mintB.address),notUseTokenAccount:B,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!(B&&l),associatedOnly:!B,checkCreateATAOwner:!1});S=N,L&&w.addInstruction(L),(!x||!S)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",P.tokenAccounts);let v=await P.getCreatedTokenAccount({mint:new U(t.lpMint.address)});v||this.logAndCreateError("cannot found lp token account","tokenAccounts",P.tokenAccounts);let R=n!=null?n:await this.getCpmmPoolKeys(t.id);return w.addInstruction({instructions:[xl(new U(t.programId),this.scope.ownerPubKey,new U(R.authority),new U(t.id),v,x,S,new U(R.vault.A),new U(R.vault.B),T,h,new U(t.lpMint.address),o,p.sub((M=b.fee)!=null?M:new je(0)),f.sub((G=g.fee)!=null?G:new je(0)))],instructionTypes:[z.CpmmWithdrawLiquidity],lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:[]}),w.addCustomComputeBudget(r),w.addTipInstruction(a),w.versionBuild({txVersion:c,lookupTableAddress:R.lookupTableAccount?[R.lookupTableAccount]:void 0})}async swap(e){var C,N,L,v,R,M;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}=V({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),g=this.createTxBuilder(p),[P,w]=[new U(t.mintA.address),new U(t.mintB.address)];i?a.inputAmount=a.inputAmount.mul(new je((1+c)*1e4)).div(new je(1e4)):a.outputAmount=a.outputAmount.mul(new je((1-c)*1e4)).div(new je(1e4));let T=t.mintA.address===$.toBase58(),h=t.mintB.address===$.toBase58(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:P,tokenProgram:new U((C=t.mintA.programId)!=null?C:Lt),owner:this.scope.ownerPubKey,createInfo:T||!o?{payer:p||this.scope.ownerPubKey,amount:o?a.inputAmount:0}:void 0,notUseTokenAccount:T,skipCloseAccount:!T,associatedOnly:T?!1:b,checkCreateATAOwner:y});B&&g.addInstruction(B);let{account:x,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:w,tokenProgram:new U((N=t.mintB.programId)!=null?N:Lt),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:p||this.scope.ownerPubKey,amount:o?0:a.inputAmount}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:b,checkCreateATAOwner:y});S&&g.addInstruction(S),(!k||!x)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:x,mintAUseSOLBalance:T,mintBUseSOLBalance:h,associatedOnly:b});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return g.addInstruction({instructions:[i?Sl(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:x,o?x:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((R=t[o?"mintA":"mintB"].programId)!=null?R:Lt),new U((M=t[o?"mintB":"mintA"].programId)!=null?M:Lt),o?P:w,o?w:P,ko(new U(t.programId),new U(t.id)).publicKey,a.inputAmount,a.outputAmount):Wo(new U(t.programId),this.scope.ownerPubKey,new U(I.authority),new U(I.config.id),new U(t.id),o?k:x,o?x:k,new U(I.vault[o?"A":"B"]),new U(I.vault[o?"B":"A"]),new U((L=t[o?"mintA":"mintB"].programId)!=null?L:Lt),new U((v=t[o?"mintB":"mintA"].programId)!=null?v:Lt),o?P:w,o?w:P,ko(new U(t.programId),new U(t.id)).publicKey,r,a.outputAmount)],instructionTypes:[i?z.CpmmSwapBaseOut:z.ClmmSwapBaseIn]}),g.addCustomComputeBudget(l),g.addTipInstruction(m),g.versionBuild({txVersion:d,lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:void 0})}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 Kl({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:gr,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,lookupTableAddress:l.lookupTableAccount?[l.lookupTableAccount]:void 0})}async harvestLockLp(e){var N;let{poolInfo:t,lpFeeAmount:n,nftMint:o,programId:i=gr,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($),g=y.equals($),P,w,{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});P=T,h&&p.addInstruction(h);let{account:k,instructionParams:B}=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});w=k,B&&p.addInstruction(B),(!P||!w)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:P,tokenAccountB:w});let x=(N=e.poolKeys)!=null?N:await this.getCpmmPoolKeys(t.id),{publicKey:S}=re(d,o,Lt),{publicKey:I}=Vi(i,o),{publicKey:C}=re(r,new U(t.lpMint.address),Lt);return p.addInstruction({instructions:[Wa({programId:i,nftOwner:this.scope.ownerPubKey,auth:r,nftMint:o,nftAccount:S,lockPda:I,poolId:new U(t.id),mintLp:new U(x.mintLp.address),userVaultA:P,userVaultB:w,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.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:[z.CpmmCollectLockFee]}),p.addCustomComputeBudget(c),p.addTipInstruction(u),p.versionBuild({txVersion:l,lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:void 0})}async harvestMultiLockLp(e){var p;let{lockInfo:t,programId:n=gr,authProgram:o=Pr,cpmmProgram:i,computeBudgetConfig:r,txVersion:a,closeWsol:c=!0}=e,u=e.feePayer||this.scope.ownerPubKey,l=this.createTxBuilder(u),m={},d=[];for(let f of t){let{poolInfo:y,lpFeeAmount:b,nftMint:g}=f;if(b.isZero())continue;let[P,w]=[new U(y.mintA.address),new U(y.mintB.address)],T=P.equals($),h=w.equals($),k=m[y.mintA.address],B=m[y.mintB.address];if(!k)if(T){let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new U(y.mintA.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});k=N,L&&l.addInstruction(L),m[y.mintA.address]=N}else{let N=new U(y.mintA.address);k=this.scope.account.getAssociatedTokenAccount(N,new U(y.mintA.programId)),l.addInstruction({instructions:[$r(this.scope.ownerPubKey,k,this.scope.ownerPubKey,N,new U(y.mintA.programId))]}),m[y.mintA.address]=k}if(!B)if(h){let{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new U(y.mintB.address),notUseTokenAccount:!0,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!c,associatedOnly:!1,checkCreateATAOwner:!1});B=N,L&&l.addInstruction(L),m[y.mintB.address]=N}else{let N=new U(y.mintB.address);B=this.scope.account.getAssociatedTokenAccount(N,new U(y.mintB.programId)),l.addInstruction({instructions:[$r(this.scope.ownerPubKey,B,this.scope.ownerPubKey,N,new U(y.mintB.programId))]}),m[y.mintB.address]=B}(!k||!B)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:k,tokenAccountB:B});let x=(p=f.poolKeys)!=null?p:await this.getCpmmPoolKeys(y.id);x.lookupTableAccount&&d.push(x.lookupTableAccount);let{publicKey:S}=re(u,g,Lt),{publicKey:I}=Vi(n,g),{publicKey:C}=re(o,new U(y.lpMint.address),Lt);l.addInstruction({instructions:[Wa({programId:n,nftOwner:this.scope.ownerPubKey,auth:o,nftMint:g,nftAccount:S,lockPda:I,poolId:new U(y.id),mintLp:new U(x.mintLp.address),userVaultA:k,userVaultB:B,poolVaultA:new U(x.vault.A),poolVaultB:new U(x.vault.B),mintA:P,mintB:w,lockLpVault:C,lpFeeAmount:b,cpmmProgram:i==null?void 0:i.programId,cpmmAuthProgram:i==null?void 0:i.authProgram})],instructionTypes:[z.CpmmCollectLockFee]})}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:r,lookupTableAddress:d}):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=Xe(b,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig","txTipConfig","feePayer","feeOn"]);var G,Y,J;console.log("***this method only available for wallet with permissions***");let g=i.feePayer||((G=this.scope.owner)==null?void 0:G.publicKey),P=new je(new U(f.mintA.address).toBuffer()).lte(new je(new U(f.mintB.address).toBuffer())),[w,T]=P?[f.mintA,f.mintB]:[f.mintB,f.mintA],[h,k]=P?[f.mintAAmount,f.mintBAmount]:[f.mintBAmount,f.mintAAmount],B=i.useSOLBalance&&w.address===Do.toBase58(),x=i.useSOLBalance&&T.address===Do.toBase58(),[S,I]=[new U(w.address),new U(T.address)],C=this.createTxBuilder(d),{account:N,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({mint:S,tokenProgram:w.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:g,amount:h}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:r,checkCreateATAOwner:a});C.addInstruction(L||{});let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:new U(T.address),tokenProgram:T.programId,owner:this.scope.ownerPubKey,createInfo:x?{payer:g,amount:k}:void 0,notUseTokenAccount:x,skipCloseAccount:!x,associatedOnly:x?!1:r,checkCreateATAOwner:a});if(C.addInstruction(R||{}),N===void 0||v===void 0)throw Error("you don't has some token account");let M=Va({poolId:e,programId:t,configId:new U(u.id),mintA:S,mintB:I});return C.addInstruction({instructions:[Cl(t,this.scope.ownerPubKey,this.scope.ownerPubKey,new U(u.id),M.authority,M.poolId,S,I,M.lpMint,N,v,re(this.scope.ownerPubKey,M.lpMint).publicKey,M.vaultA,M.vaultB,n,new U((Y=w.programId)!=null?Y:Lt),new U((J=T.programId)!=null?J:Lt),M.observationId,Tl(t,this.scope.ownerPubKey).publicKey,h,k,o,p)],instructionTypes:[z.CpmmCreatePool]}),C.addCustomComputeBudget(l),C.addTipInstruction(m),C.versionBuild({txVersion:c,extInfo:{address:q(V({},M),{mintA:w,mintB:T,programId:t,poolFeeAccount:n,feeConfig:u})}})}async collectCreatorFees({poolInfo:e,poolKeys:t,programId:n=io,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:[$r(this.scope.ownerPubKey,y,this.scope.ownerPubKey,m,new U(e.mintA.programId)),$r(this.scope.ownerPubKey,b,this.scope.ownerPubKey,d,new U(e.mintB.programId))]}),u.addInstruction({instructions:[Da(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,poolKeyList:t,programId:n=io,txVersion:o,computeBudgetConfig:i,feePayer:r}){let a=r||this.scope.ownerPubKey,c=this.createTxBuilder(a),u={},l=t!=null?t:[];if(!l.length){let d=e.map(b=>b.id),p=95,f=[];for(let b=0;b<d.length;b+=p)f.push(d.slice(b,b+p));l=(await Promise.all(f.map(b=>this.scope.api.fetchPoolKeysById({idList:b})))).flat()}let m=l.reduce((d,p)=>q(V({},d),{[p.id]:p}),{});for(let d of e){let p=m[d.id]||await this.getCpmmPoolKeys(d.id),[f,y,b,g]=[new U(d.mintA.address),new U(d.mintB.address),new U(d.mintA.programId),new U(d.mintB.programId)],P=u[d.mintA.address]||this.scope.account.getAssociatedTokenAccount(f,b),w=u[d.mintB.address]||this.scope.account.getAssociatedTokenAccount(y,g);u[d.mintA.address]=P,u[d.mintB.address]=w,c.addInstruction({instructions:[Da(n,this.scope.ownerPubKey,new U(p.authority),new U(p.id),new U(p.config.id),new U(p.vault.A),new U(p.vault.B),f,y,P,w,b,g)],instructionTypes:[]})}return o===0?c.sizeCheckBuildV0({computeBudgetConfig:i,lookupTableAddress:l.map(d=>d.lookupTableAccount).filter(Boolean),insCountLimit:6}):c.sizeCheckBuild({computeBudgetConfig:i})}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?Fi.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):Fi.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 O(c.outputAmount.toString()).div(c.inputAmount.toString()),l=c.outputAmount.mul(new je((1-o)*1e4)).div(new je(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),swapResult:c}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:r,baseIn:a}){var T,h,k,B,x,S,I,C,N;let c=1-Number(i.toSignificant())/100,u=new je(new O(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=Fe(u,e[a?"mintA":"mintB"].extensions.feeConfig,r,!1),m=u.sub((T=l.fee)!=null?T:new je(0)),d=new je(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(h=l.fee)==null?void 0:h.toString())!=null?k: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:Ft,fee:void 0,expirationTime:void 0};if(!m.isZero()){let L=Ff(f,t,n,d);this.logDebug("lpAmountData:",{amountA:L.amountA.toString(),amountB:L.amountB.toString()}),y=Fe(L[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,r,!0)}let b=new lt(new je(1)).add(i),g=new lt(new je(1)).sub(i),P=Fe(b.mul(y.amount.sub((B=y.fee)!=null?B:new je(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0),w=Fe(g.mul(y.amount.sub((x=y.fee)!=null?x:new je(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,r,!0);return this.logDebug("anotherAmount:",y.amount.toString(),"anotherAmountFee:",(I=(S=y.fee)==null?void 0:S.toString())!=null?I:0,"maxAnotherAmount:",P.amount.toString(),"maxAnotherAmountFee:",(N=(C=P.fee)==null?void 0:C.toString())!=null?N:0),{inputAmountFee:l,anotherAmount:y,maxAnotherAmount:P,minAnotherAmount:w,liquidity:f}}};function Ff(s,e,t,n){let o=s.mul(e).div(n);!o.isZero()&&!s.mul(e).mod(n).isZero()&&(o=o.add(new je(1)));let i=s.mul(t).div(n);return!i.isZero()&&!s.mul(t).mod(n).isZero()&&(i=i.add(new je(1))),{amountA:o,amountB:i}}import{PublicKey as me,SystemProgram as Yl}from"@solana/web3.js";import{createTransferInstruction as Hl,TOKEN_PROGRAM_ID as Ke,TOKEN_2022_PROGRAM_ID as eo,createAssociatedTokenAccountIdempotentInstruction as Xo,createSyncNativeInstruction as Ql,createTransferCheckedInstruction as ty}from"@solana/spl-token";import Ce from"bn.js";var Ll={[Ns.toBase58()]:3},Nl={3:Ns};var qa=_([Le(5),Le(8),F("ownAddress"),A("vaultSignerNonce"),F("baseMint"),F("quoteMint"),F("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),F("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),F("requestQueue"),F("eventQueue"),F("bids"),F("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),Le(7)]),Ol={3:qa};import{PublicKey as vl}from"@solana/web3.js";var Zr=he("Serum"),Jr=class{static getProgramId(e){let t=Nl[e];return t||Zr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Ll[t];return n||Zr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Ol[e];return t||Zr.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=vl.createProgramAddressSync(r,e)}catch(r){if(r instanceof TypeError)throw r;o++;continue}return{publicKey:i,nonce:o}}return Zr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:vl.default,nonce:o}}};import{PublicKey as ye,SystemProgram as Vf,TransactionInstruction as _f}from"@solana/web3.js";import jn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ef,TOKEN_2022_PROGRAM_ID as Wf,TOKEN_PROGRAM_ID as Df}from"@solana/spl-token";function qf(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){var k;let y=[],b=[K({pubkey:Df,isWritable:!1}),K({pubkey:Wf,isWritable:!1}),K({pubkey:Ef,isWritable:!1}),K({pubkey:Vf.programId,isWritable:!1}),K({pubkey:e,isSigner:!0})];b.push(K({pubkey:t})),b.push(K({pubkey:o}));let g=[c,u],P=[l,m],w=[i,r,a];for(let B=0;B<g.length;B++){let x=g[B],S=w[B]===x.mintA.address;if(b.push(K({pubkey:new ye(x.programId),isWritable:!1})),B===g.length-1?b.push(K({pubkey:o})):b.push(K({pubkey:n})),b.push(K({pubkey:new ye(w[B])})),b.push(K({pubkey:new ye(w[B+1])})),x.version===6){let I=P[B];b.push(K({pubkey:new ye(I.config.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(S?I.vault.A:I.vault.B)})),b.push(K({pubkey:new ye(S?I.vault.B:I.vault.A)})),b.push(K({pubkey:new ye(x.observationId)})),b.push(K({pubkey:En})),b.push(K({pubkey:et(new ye(x.programId),new ye(x.id)).publicKey})),y.push(Uf(x.sqrtPriceX64.toString(),S));for(let C of(k=f[B])!=null?k:[])b.push(K({pubkey:new ye(C)}))}else if(x.version===5){let I=P[B];b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.authority),isWritable:!1})),b.push(K({pubkey:new ye(I.marketProgramId)})),b.push(K({pubkey:new ye(I.marketAuthority)})),b.push(K({pubkey:$u,isWritable:!1})),b.push(K({pubkey:new ye(I.openOrders)})),b.push(K({pubkey:new ye(I.vault.A)})),b.push(K({pubkey:new ye(I.vault.B)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.marketId)})),b.push(K({pubkey:new ye(I.marketBids)})),b.push(K({pubkey:new ye(I.marketAsks)})),b.push(K({pubkey:new ye(I.marketEventQueue)})),b.push(K({pubkey:new ye(I.marketBaseVault)})),b.push(K({pubkey:new ye(I.marketQuoteVault)}))}else if(x.version===4){let I=P[B],C=x.status!==1;b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(I.authority),isWritable:!1})),b.push(K({pubkey:new ye(C?I.id:I.marketProgramId)})),b.push(K({pubkey:new ye(C?I.id:I.marketAuthority)})),b.push(K({pubkey:new ye(C?I.id:I.openOrders)})),b.push(K({pubkey:new ye(I.vault.A)})),b.push(K({pubkey:new ye(I.vault.B)})),b.push(K({pubkey:new ye(C?I.id:I.marketId)})),b.push(K({pubkey:new ye(C?I.id:I.marketBids)})),b.push(K({pubkey:new ye(C?I.id:I.marketAsks)})),b.push(K({pubkey:new ye(C?I.id:I.marketEventQueue)})),b.push(K({pubkey:new ye(C?I.id:I.marketBaseVault)})),b.push(K({pubkey:new ye(C?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=P[B];b.push(K({pubkey:new ye(I.authority)})),b.push(K({pubkey:new ye(I.config.id)})),b.push(K({pubkey:new ye(I.id)})),b.push(K({pubkey:new ye(S?I.vault.A:I.vault.B)})),b.push(K({pubkey:new ye(S?I.vault.B:I.vault.A)})),b.push(K({pubkey:new ye(x.observationId)}))}else throw Error("pool type error")}let T=_([E("insId"),A("amountIn"),A("amountOut"),Q(le(),y.length,"clmmPriceLimit")]),h=Buffer.alloc(T.span);return T.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:y},h),new _f({keys:b,programId:s,data:h})}function Uf(s,e){if(s)if(e){let t=new jn(s).div(new jn(25));return t.gt(Or)?t:Or}else{let t=new jn(s).mul(new jn(25));return t.lt(vr)?t:vr}else return e?Or:vr}function Ml({routeProgram:s,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,r,a,c,u,l,m,d;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let p=n.poolKey[0],f=yt(p),y=t.equals(f.mintA.address)?St.add(zt):Kt.sub(zt);return Se.makeSwapBaseInInstructions({poolInfo:p,poolKeys:p,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:f.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:f.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 jn(0)),sqrtPriceLimitX64:y,remainingAccounts:(r=n.remainingAccounts[0])!=null?r:[]})}else if(n.poolInfo[0].version===7){let p=n.poolInfo[0],f=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Wo(p.programId,e.wallet,p.authority,p.configId,p.id,e.sourceToken,e.destinationToken,f?p.vaultA:p.vaultB,f?p.vaultB:p.vaultA,f?p.mintProgramA:p.mintProgramB,f?p.mintProgramB:p.mintProgramA,new ye(p[f?"mintA":"mintB"].address),new ye(p[f?"mintB":"mintA"].address),p.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[f?z.CpmmSwapBaseIn:z.CpmmSwapBaseOut],address:{}}}else{let p=n.poolKey[0];return{signers:[],instructions:[n.poolInfo[0].pooltype.includes("StablePool")?Ur({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new jn(0)),fixedSide:"in"}):qr({poolKeys:p,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new jn(0)),fixedSide:"in"})],lookupTableAddress:p.lookupTableAccount?[p.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?z.AmmV5SwapBaseIn:z.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let p=n.poolInfo[0],f=n.poolInfo[1],y=n.poolKey[0],b=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[qf(s,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),p,f,y,b,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((d=(m=n.minAmountOut.fee)==null?void 0:m.raw)!=null?d:new jn(0)),n.remainingAccounts)],instructionTypes:[z.RouteSwap],lookupTableAddress:[y.lookupTableAccount,b.lookupTableAccount].filter(g=>g!==void 0),address:{}}}else throw Error("route type error")}import{ASSOCIATED_TOKEN_PROGRAM_ID as es,TOKEN_2022_PROGRAM_ID as Zf,TOKEN_PROGRAM_ID as Ya}from"@solana/spl-token";import{SystemProgram as Qt,TransactionInstruction as Wt}from"@solana/web3.js";import Go from"bn.js";var $n=_([A(),A("epoch"),E("curveType"),Gt("index"),A("migrateFee"),A("tradeFeeRate"),A("maxShareFeeRate"),A("minSupplyA"),A("maxLockRate"),A("minSellRateA"),A("minMigrateRateA"),A("minFundRaisingB"),F("mintB"),F("protocolFeeOwner"),F("migrateFeeOwner"),F("migrateToAmmWallet"),F("migrateToCpmmWallet"),Q(A(),16)]),Gf=_([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),A("startTime"),A("totalAllocatedShare")]),mn=_([A(),A("epoch"),E("bump"),E("status"),E("mintDecimalsA"),E("mintDecimalsB"),E("migrateType"),A("supply"),A("totalSellA"),A("virtualA"),A("virtualB"),A("realA"),A("realB"),A("totalFundRaisingB"),A("protocolFee"),A("platformFee"),A("migrateFee"),Gf.replicate("vestingSchedule"),F("configId"),F("platformId"),F("mintA"),F("mintB"),F("vaultA"),F("vaultB"),F("creator"),E("mintProgramFlag"),E("cpmmCreatorFeeOn"),A("platformVestingShare"),Q(E(),54)]),cC=_([A(),A("epoch"),F("poolId"),F("beneficiary"),A("claimedAmount"),A("tokenShareAmount"),Q(A(),8)]),Fl=_([E("migrateType"),E("migrateCpmmFeeOn"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod")]),Xf=_([A("epoch"),E("index"),F("configId"),Fl.replicate("bondingCurveParam"),Q(A(),50)]),dn=_([A(),A("epoch"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),Q(E(),64,"name"),Q(E(),256,"web"),Q(E(),256,"img"),F("cpConfigId"),A("creatorFeeRate"),F("transferFeeExtensionAuth"),F("platformVestingWallet"),A("platformVestingScale"),F("platformCpCreator"),Q(E(),108),gc(Xf,"platformCurve")]);var zf=Buffer.from("vault_auth_seed","utf8"),fC=Buffer.from("global_config","utf8"),Yf=Buffer.from("pool_vesting","utf8"),Hf=Buffer.from("platform_config","utf8"),Qf=Buffer.from("platform_fee_vault_auth_seed","utf8"),jf=Buffer.from("creator_fee_vault_auth_seed","utf8"),$f=Buffer.from("platform_global_access","utf8");function Nt(s){return be([zf],s)}function qo(s,e,t){return be([fa,e.toBuffer(),t.toBuffer()],s)}function Ua(s,e,t){return be([ya,e.toBuffer(),t.toBuffer()],s)}function ho(s){return be([Buffer.from("__event_authority","utf8")],s)}function Ga(s,e){return be([Hf,e.toBuffer()],s)}function Uo(s,e,t){return be([Yf,e.toBuffer(),t.toBuffer()],s)}function pn(s,e,t){return be([e.toBuffer(),t.toBuffer()],s)}function Xa(s){return be([Qf],s)}function fn(s,e,t){return be([e.toBuffer(),t.toBuffer()],s)}function za(s){return be([jf],s)}function Vl(s,e,t){return be([$f,e.toBuffer(),t.toBuffer()],s)}var Dt={initialize:Buffer.from([175,175,109,31,13,152,155,237]),initializeV2:Buffer.from([67,153,175,39,218,16,38,32]),buyExactIn:Buffer.from([250,234,13,123,213,156,19,236]),buyExactOut:Buffer.from([24,211,116,40,105,3,153,56]),sellExactIn:Buffer.from([149,39,222,155,211,124,152,26]),sellExactOut:Buffer.from([95,200,71,34,8,9,11,166]),createVestingAccount:Buffer.from([129,178,2,13,217,172,230,218]),claimVestedToken:Buffer.from([49,33,104,30,189,157,79,35]),createPlatformConfig:Buffer.from([176,90,196,175,253,113,220,20]),claimPlatformFee:Buffer.from([156,39,208,135,76,237,61,72]),updatePlaformConfig:Buffer.from([195,60,76,129,146,45,67,143]),initializeWithToken2022:Buffer.from([37,190,126,222,44,154,171,17]),claimPlatformFeeFromVault:Buffer.from([117,241,198,168,248,218,80,29]),claimCreatorFee:Buffer.from([26,97,138,203,132,171,141,252]),updatePlatformCurveParam:Buffer.from([138,144,138,250,220,128,4,57]),removePlatformCurveParam:Buffer.from([27,30,62,169,93,224,24,145]),createPlatformVestingAccount:Buffer.from([146,71,173,69,98,19,15,106])};function _l(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h){let k=_([E("decimals"),_t("name"),_t("symbol"),_t("uri")]),B=_([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),E("cpmmCreatorFeeOn")]),x=_([E("index"),A("supply"),A("totalFundRaisingB"),E("migrateType")]),S=_([E("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),E("migrateType")]),I=[{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:Ya,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:ft,isSigner:!1,isWritable:!1},{pubkey:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+Buffer.from(y,"utf-8").length+4*3+1),N=Buffer.alloc(B.span),L=Buffer.alloc(b.type==="ConstantCurve"?S.span:x.span);return k.encode({decimals:d,name:p,symbol:f,uri:y},C),b.type==="ConstantCurve"?S.encode(q(V({index:0},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="FixedCurve"?x.encode(q(V({index:1},b),{migrateType:b.migrateType==="amm"?0:1}),L):b.type==="LinearCurve"&&x.encode(q(V({index:2},b),{migrateType:b.migrateType==="amm"?0:1}),L),B.encode({totalLockedAmount:g,cliffPeriod:P,unlockPeriod:w,cpmmCreatorFeeOn:T},N),new Wt({keys:I,programId:s,data:Buffer.from([...Dt.initializeV2,...C,...L,...N])})}function El(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w,T,h){let k=_([E("decimals"),_t("name"),_t("symbol"),_t("uri")]),B=_([A("totalLockedAmount"),A("cliffPeriod"),A("unlockPeriod"),E("cpmmCreatorFeeOn"),E("transferFeeExtensionParamsOption"),_([Gt("transferFeeBasePoints"),A("maxinumFee")]).replicate("transferFeeExtensionParams")]),x=_([E("index"),A("supply"),A("totalFundRaisingB"),E("migrateType")]),S=_([E("index"),A("supply"),A("totalSellA"),A("totalFundRaisingB"),E("migrateType")]),I=[{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:Zf,isSigner:!1,isWritable:!1},{pubkey:Ya,isSigner:!1,isWritable:!1},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];h&&I.push({pubkey:h,isSigner:!1,isWritable:!1});let C=Buffer.alloc(Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+Buffer.from(f,"utf-8").length+4*3+1),N=Buffer.alloc(B.span),L=Buffer.alloc(y.type==="ConstantCurve"?S.span:x.span);return k.encode({decimals:m,name:d,symbol:p,uri:f},C),y.type==="ConstantCurve"?S.encode(q(V({index:0},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="FixedCurve"?x.encode(q(V({index:1},y),{migrateType:y.migrateType==="amm"?0:1}),L):y.type==="LinearCurve"&&x.encode(q(V({index:2},y),{migrateType:y.migrateType==="amm"?0:1}),L),B.encode({totalLockedAmount:b,cliffPeriod:g,unlockPeriod:P,cpmmCreatorFeeOn:w,transferFeeExtensionParamsOption:T?1:0,transferFeeExtensionParams:T!=null?T:{transferFeeBasePoints:0,maxinumFee:new Go(0)}},N),new Wt({keys:I,programId:s,data:Buffer.from([...Dt.initializeWithToken2022,...C,...L,...N])})}function Wi(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountB"),A("minAmountA"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,minAmountA:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.buyExactIn,...k])})}function Wl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountA"),A("maxAmountB"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,maxAmountB:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.buyExactOut,...k])})}function ts(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountA"),A("minAmountB"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountA:b,minAmountB:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.sellExactIn,...k])})}function Dl(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f,y,b,g,P,w){let T=_([A("amountB"),A("maxAmountA"),A("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:ho(s).publicKey,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1}];w&&h.push({pubkey:w,isSigner:!1,isWritable:!0}),h.push({pubkey:Qt.programId,isSigner:!1,isWritable:!1}),h.push({pubkey:f,isSigner:!1,isWritable:!0}),h.push({pubkey:y,isSigner:!1,isWritable:!0});let k=Buffer.alloc(T.span);return T.encode({amountB:b,maxAmountA:g,shareFeeRate:P!=null?P:new Go(0)},k),new Wt({keys:h,programId:s,data:Buffer.from([...Dt.sellExactOut,...k])})}function Ha(s,e,t,n,o,i,r,a,c){let u=_([]),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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:es,isSigner:!1,isWritable:!1}],m=Buffer.alloc(u.span);return u.encode({},m),new Wt({keys:l,programId:s,data:Buffer.from([...Dt.claimVestedToken,...m])})}function Qa(s,e,t,n,o,i){let r=_([A("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:Qt.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(r.span);return r.encode({shareAmount:i},c),new Wt({keys:a,programId:s,data:Buffer.from([...Dt.createVestingAccount,...c])})}function ja(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:Qt.programId,isSigner:!1,isWritable:!0},{pubkey:es,isSigner:!1,isWritable:!0}];return new Wt({keys:u,programId:s,data:Dt.claimPlatformFee})}function ql(s,e,t,n,o,i,r,a,c,u,l,m,d,p,f){let y=_([A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),_t("name"),_t("web"),_t("img"),A("creatorFeeRate"),A("platformVestingScale")]),b=[{pubkey:e,isSigner:!0,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1}],g=Buffer.alloc(8*6+Buffer.from(m,"utf-8").length+Buffer.from(d,"utf-8").length+Buffer.from(p,"utf-8").length+4*3);return y.encode({platformScale:c.platformScale,creatorScale:c.creatorScale,burnScale:c.burnScale,feeRate:u,name:m,web:d,img:p,creatorFeeRate:l,platformVestingScale:f},g),new Wt({keys:b,programId:s,data:Buffer.from([...Dt.createPlatformConfig,...g])})}function Ul(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("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:0,value:n.value},i)}else if(n.type==="updateLockNftWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:1,value:n.value},i)}else if(n.type==="migrateCpLockNftScale"){let r=_([E("index"),A("platformScale"),A("creatorScale"),A("burnScale")]);i=Buffer.alloc(r.span),r.encode(V({index:2},n.value),i)}else if(n.type==="updateFeeRate"){let r=_([E("index"),A("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("index"),_t("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("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("index"),F("platformClaimFeeWallet"),F("platformLockNftWallet"),A("platformScale"),A("creatorScale"),A("burnScale"),A("feeRate"),_t("name"),_t("web"),_t("img"),F("transferFeeExtensionAuth"),A("creatorFeeRate"),A("platformVestingScale"),F("platformVestingWallet")]);i=Buffer.alloc(1+32+32+32+8*5+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,platformVestingWallet:n.value.platformVestingWallet,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,platformVestingScale:n.value.platformVestingScale},i)}else if(n.type==="updateVestingWallet"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:9,value:n.value},i)}else if(n.type==="updatePlatformVestingScale"){let r=_([E("index"),A("value")]);i=Buffer.alloc(r.span),r.encode({index:10,value:n.value},i)}else if(n.type==="updatePlatformCpCreator"){let r=_([E("index"),F("value")]);i=Buffer.alloc(r.span),r.encode({index:11,value:n.value},i)}else throw Error("updateInfo params type error");return new Wt({keys:o,programId:s,data:Buffer.from([...Dt.updatePlaformConfig,...i])})}function $a(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:es,isSigner:!1,isWritable:!1}];return new Wt({keys:c,programId:s,data:Dt.claimPlatformFeeFromVault})}function Za(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:Qt.programId,isSigner:!1,isWritable:!1},{pubkey:es,isSigner:!1,isWritable:!1}];return new Wt({keys:a,programId:s,data:Dt.claimCreatorFee})}var BC=new Go("18446744073709551615");function Gl(s,e,t,n,o,i){let r=[{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:i,isSigner:!1,isWritable:!0},{pubkey:Qt.programId,isSigner:!1,isWritable:!1}];return new Wt({keys:r,programId:s,data:Dt.createPlatformVestingAccount})}import ns from"bn.js";var Zn=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 os=class extends Zn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new O(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 ns(0)))throw Error("supplyMinusSellLocked <= 0");let a=t.sub(i);if(a.lte(new ns(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 ns(0))||m.lt(new ns(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 ro(o,i)}};import tn from"bn.js";import is from"bn.js";var rs=class extends Zn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualB.toString()).div(e.virtualA.toString()).mul(10**(t-n))}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new O(t.toString()).div(e.toString()).mul(10**(n-o))}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(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 O(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 O(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 is(0)))throw Error("invalid input 1");let a=new is(2).mul(t).sub(i),u=t.mul(r).div(a);if(u.lt(new is(0))||t.lt(new is(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 ro(o,n)}};import qt from"bn.js";import Xl from"bn.js";var Di=class{static _multipler(e){return new O(10).pow(e)}static getPrice({priceX64:e,decimalA:t,decimalB:n}){return new O(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 Xl(o.mul(this._Q64).toFixed(0))}};Di._Q64=new O(new Xl(1).shln(64).toString());var ss=class extends Zn{static getPoolInitPriceByPool({poolInfo:e,decimalA:t,decimalB:n}){return new O(0)}static getPoolInitPriceByInit({a:e,b:t,decimalA:n,decimalB:o}){return new O(0)}static getPoolPrice({poolInfo:e,decimalA:t,decimalB:n}){return new O(e.virtualA.mul(e.realA).toString()).div(Di._Q64).mul(10**(t-n))}static getPoolEndPrice({supply:e,totalSell:t,totalLockedAmount:n,totalFundRaising:o,migrateFee:i,decimalA:r,decimalB:a}){return new O(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 O(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 qt(0)))throw Error("supplyMinusLocked need gt 0");let a=t.mul(new qt(3)).sub(i),u=t.mul(new qt(2)).mul(r).div(a),l=u.mul(u),m=t.mul(new qt(2)).mul(at).div(l);if(!m.gt(new qt(0)))throw Error("a need gt 0");if(!Pi.gt(m))throw Error("a need lt u64 max");if(m.lt(new qt(0))||u.lt(new qt(0)))throw Error("invalid input 0");return{a:m,b:new qt(0),c:u}}static buyExactIn({poolInfo:e,amount:t}){let n=e.realB.add(t),o=new qt(2).mul(n).mul(at).div(e.virtualA);return new qt(new O(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 ro(e.virtualA.mul(o),new qt(2).mul(at)).sub(e.realB)}static sellExactIn({poolInfo:e,amount:t}){let n=e.realA.sub(t),o=n.mul(n),i=ro(e.virtualA.mul(o),new qt(2).mul(at));return e.realB.sub(i)}static sellExactOut({poolInfo:e,amount:t}){let n=e.realB.sub(t),o=new qt(2).mul(n).mul(at).div(e.virtualA),i=new qt(new O(o.toString()).sqrt().toFixed(0));return e.realA.sub(i)}};var gt=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(V({},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,P=f,w=f;for(let T=1;T<t;T++){let h=T!==t-1?p:o.sub(w),k=this.buyExactIn({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:w,totalFundRaisingB:o,totalSellA:i},amountB:h,protocolFeeRate:f,platformFeeRate:f,curveType:e,shareFeeRate:f,creatorFeeRate:f,transferFeeConfigA:void 0,slot:0});P=P.add(k.amountA.amount),w=w.add(k.amountB);let B=this.getPrice({poolInfo:{virtualA:b,virtualB:g,realA:P,realB:w},decimalA:c,decimalB:u,curveType:e});y.push({price:B,totalSellSupply:new O(P.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(Vt).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(Vt);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(Vt);if(l.lt(m))throw Error("migrate lt min migrate amoount");let d=e.sub(n).sub(o),p=new tn(new O(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,P;if(f.gt(y)){b=y;let T=p.buyExactOut({poolInfo:e,amount:b});g=this.calculatePreFee({postFeeAmount:T,feeRate:l}),P=g.sub(T)}else b=f,g=t,P=m;let w=this.splitFee({totalFee:P,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:Os(b,c,u),amountB:g,splitFee:w}}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=vs(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),P=this.splitFee({totalFee:g,protocolFeeRate:n,platformFeeRate:o,shareFeeRate:r,creatorFeeRate:a});return{amountA:m,amountB:b,splitFee:P}}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=Os(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=gt.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:vs(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,Vt)}static calculatePreFee({postFeeAmount:e,feeRate:t}){if(t.isZero())return e;let n=e.mul(Vt),o=Vt.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 os;case 1:return rs;case 2:return ss}throw Error("find curve error")}};import{NATIVE_MINT as Nn,TOKEN_2022_PROGRAM_ID as To,TOKEN_PROGRAM_ID as We,createAssociatedTokenAccountIdempotentInstruction as Ut,createSyncNativeInstruction as Jf,getTransferFeeConfig as as,unpackMint as us}from"@solana/spl-token";import ue from"bn.js";import{PublicKey as zl,SystemProgram as ey}from"@solana/web3.js";var cs={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 zl("4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4"),vestingSchedule:{totalLockedAmount:new ue(0),cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)}},Jn=new ue(1e4);var qi=class extends qe{constructor(e){super(e)}async createLaunchpad(N){var L=N,{programId:e=st,authProgramId:t,platformId:n=cs.platformId,mintA:o,decimals:i=6,mintBDecimals:r=9,name:a,symbol:c,uri:u,migrateType:l,configId:m,configInfo:d,txVersion:p,computeBudgetConfig:f,txTipConfig:y,feePayer:b,buyAmount:g,minMintAAmount:P,slippage:w,associatedOnly:T=!0,checkCreateATAOwner:h=!1,extraSigners:k,token2022:B,transferFeeExtensionParams:x,creatorFeeOn:S=0,platformConfigAccess:I}=L,C=Xe(L,["programId","authProgramId","platformId","mintA","decimals","mintBDecimals","name","symbol","uri","migrateType","configId","configInfo","txVersion","computeBudgetConfig","txTipConfig","feePayer","buyAmount","minMintAAmount","slippage","associatedOnly","checkCreateATAOwner","extraSigners","token2022","transferFeeExtensionParams","creatorFeeOn","platformConfigAccess"]);var ou,iu,ru,su,au,uu,cu,lu,mu,du,pu;let v=this.createTxBuilder(b);t=t!=null?t:Nt(e).publicKey,B=!!x,B&&(l="cpmm");let R=d;if(!R&&m){let wn=await this.scope.connection.getAccountInfo(m);wn&&(R=$n.decode(wn.data))}R||this.logAndCreateError("config not found");let M=R.mintB,G=R.curveType,{publicKey:Y}=qo(e,o,M),{publicKey:J}=Ua(e,Y,o),{publicKey:ee}=Ua(e,Y,M),{publicKey:ie}=xn(o);this.logDebug(`create token: ${o.toBase58()}, mintB: ${M.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 ne=(await this.scope.api.fetchLaunchConfigs()).find(wn=>wn.key.pubKey===m.toBase58()),Z=(ou=C==null?void 0:C.supply)!=null?ou:new ue(ne.defaultParams.supplyInit),te=(iu=C==null?void 0:C.totalSellA)!=null?iu:new ue(ne.defaultParams.totalSellA),ke=(ru=C==null?void 0:C.totalFundRaisingB)!=null?ru:new ue(ne.defaultParams.totalFundRaisingB),Re=(su=C==null?void 0:C.totalLockedAmount)!=null?su:new ue(0),Te=await this.scope.connection.getAccountInfo(n);Te||this.logAndCreateError("platform id not found:",n.toString());let ot=dn.decode(Te.data),Ot=ot.platformVestingScale,it=ot.feeRate,Hi=gt.getCurve(R.curveType).getInitParam({supply:Z,totalFundRaising:ke,totalSell:te,totalLockedAmount:Re,migrateFee:R.migrateFee}),Io;try{Io=await this.scope.token.getTokenInfo(M)}catch{this.logDebug("can not get mintB info from getTokenInfo")}let jt={epoch:new ue(896),bump:254,status:0,mintDecimalsA:i,mintDecimalsB:(au=Io==null?void 0:Io.decimals)!=null?au:r,supply:Z,totalSellA:te,mintA:new zl(o),mintB:M,virtualA:Hi.a,virtualB:Hi.b,realA:cs.realA,realB:cs.realB,migrateFee:R.migrateFee,migrateType:l==="amm"?0:1,protocolFee:cs.protocolFee,platformFee:it,platformId:n,configId:m,vaultA:J,vaultB:ee,creator:this.scope.ownerPubKey,totalFundRaisingB:ke,vestingSchedule:{totalLockedAmount:Re,cliffPeriod:new ue(0),unlockPeriod:new ue(0),startTime:new ue(0),totalAllocatedShare:new ue(0)},mintProgramFlag:B?1:0,cpmmCreatorFeeOn:S,platformVestingShare:Ot!=null?Ot:new ue(0)},Qi=gt.getCurve(R.curveType),{c:ji}=Qi.getInitParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalLockedAmount:Re,totalSell:R.curveType===0?jt.totalSellA:new ue(0),migrateFee:R.migrateFee});try{gt.checkParam({supply:jt.supply,totalFundRaising:jt.totalFundRaisingB,totalSell:ji,totalLockedAmount:Re,decimals:jt.mintDecimalsA,config:R,migrateType:l}),this.logDebug("check init params success")}catch(wn){this.logAndCreateError(`check create mint params failed, ${wn.message}`)}v.addInstruction({instructions:[B?El(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Y,o,M,J,ee,i,a,c,u||"https://",{type:G===0?"ConstantCurve":G===1?"FixedCurve":G===2?"LinearCurve":"ConstantCurve",totalSellA:te,migrateType:l,supply:Z,totalFundRaisingB:ke},Re,(uu=C==null?void 0:C.cliffPeriod)!=null?uu:new ue(0),(cu=C==null?void 0:C.unlockPeriod)!=null?cu:new ue(0),S,x):_l(e,b!=null?b:this.scope.ownerPubKey,this.scope.ownerPubKey,m,n,t,Y,o,M,J,ee,ie,i,a,c,u||"https://",{type:G===0?"ConstantCurve":G===1?"FixedCurve":G===2?"LinearCurve":"ConstantCurve",totalSellA:te,migrateType:l,supply:Z,totalFundRaisingB:ke},Re,(lu=C==null?void 0:C.cliffPeriod)!=null?lu:new ue(0),(mu=C==null?void 0:C.unlockPeriod)!=null?mu:new ue(0),S,I?Vl(e,n,m).publicKey:void 0)]});let Bo=B?await this.scope.connection.getEpochInfo():void 0,Bt=x?{epoch:BigInt((Bo==null?void 0:Bo.epoch)||0),maximumFee:BigInt((du=x==null?void 0:x.maxinumFee.toString())!=null?du:0),transferFeeBasisPoints:(pu=x==null?void 0:x.transferFeeBasePoints)!=null?pu:0}:void 0,Yo={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)}},ds;if(k!=null&&k.length&&v.addInstruction({signers:k}),!C.createOnly){let{builder:wn,extInfo:em}=await this.buyToken({programId:e,authProgramId:t,mintAProgram:B?To:void 0,mintA:o,mintB:M,poolInfo:jt,buyAmount:g,minMintAAmount:P,shareFeeRate:C.shareFeeRate,shareFeeReceiver:C.shareFeeReceiver,configInfo:R,platformFeeRate:it,slippage:w,associatedOnly:T,checkCreateATAOwner:h,skipCheckMintA:!Bt,transferFeeConfigA:Bt?{transferFeeConfigAuthority:t,withdrawWithheldAuthority:t,withheldAmount:BigInt(0),olderTransferFee:Bt,newerTransferFee:Bt}:void 0,fromCreate:!0});v.addInstruction(V({},wn.AllTxData)),Yo=V({},em),ds=(this.scope.cluster==="devnet"||p===1)&&C.shareFeeReceiver?[wn.allInstructions[0]]:void 0}return v.addTipInstruction(y),p===0?v.sizeCheckBuildV0({computeBudgetConfig:f,swapInfo:Yo,splitIns:ds,address:q(V({},jt),{poolId:Y})}):v.sizeCheckBuild({computeBudgetConfig:f,swapInfo:Yo,splitIns:ds,address:q(V({},jt),{poolId:Y})})}async buyToken({programId:e=st,authProgramId:t,mintA:n,mintAProgram:o=We,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:P=!0,checkCreateATAOwner:w=!1,fromCreate:T=!1,transferFeeConfigA:h,skipCheckMintA:k=!1}){var te,ke,Re;p.lte(new ue(0))&&this.logAndCreateError("buy amount should gt 0:",p.toString());let B=this.createTxBuilder(d),{publicKey:x}=qo(e,n,i);t=t!=null?t:Nt(e).publicKey;let S=h;if(!k)if(S)o=To;else{let Te=await this.scope.connection.getAccountInfo(n);if(Te&&Te.owner.equals(To)){o=Te.owner;let ot=us(n,Te,o);S=as(ot)||void 0}}let I=this.scope.account.getAssociatedTokenAccount(n,o),C=i.equals(Nn),N=T&&C,L=N?this.scope.account.getAssociatedTokenAccount(i,We):null,v=C;if(B.addInstruction({instructions:[Ut(this.scope.ownerPubKey,I,this.scope.ownerPubKey,n,o),...N?[Ut(this.scope.ownerPubKey,L,this.scope.ownerPubKey,i,We),ey.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L,lamports:BigInt(p.toString())}),Jf(L)]:[]]}),!N){let{account:Te,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:v?{payer:this.scope.ownerPubKey,amount:p}:void 0,skipCloseAccount:!v,notUseTokenAccount:v,associatedOnly:v?!1:P,checkCreateATAOwner:w});Te&&(L=Te),B.addInstruction(ot||{})}L||this.logAndCreateError(`cannot found mintB(${i.toBase58()}) buy token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let Te=await this.scope.connection.getAccountInfo(x,{commitment:"processed"});Te||this.logAndCreateError("cannot found pool:",x.toBase58()),R=mn.decode(Te.data)}let M=a,G=await Ee(this.scope.connection,[M?void 0:R.configId,R.platformId].filter(Boolean).map(Te=>({pubkey:Te})));if(!M){let Te=G.find(ot=>ot.pubkey.equals(R.configId));(!Te||!Te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),M=$n.decode(Te.accountInfo.data)}let Y=G.find(Te=>Te.pubkey.equals(R.platformId));(!Y||!Y.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let J=dn.decode(Y.accountInfo.data);c=c||J.feeRate;let ee=gt.buyExactIn({poolInfo:R,amountB:p,protocolFeeRate:M.tradeFeeRate,platformFeeRate:c,curveType:M.curveType,shareFeeRate:b,creatorFeeRate:J.creatorFeeRate,transferFeeConfigA:S,slot:await this.scope.connection.getSlot()}),ie=new O(ee.amountA.amount.toString()).sub((ke=(te=ee.amountA.fee)==null?void 0:te.toString())!=null?ke:0),de=y?new O(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new O(1),ne=f!=null?f:y?new ue(ie.mul(de).toFixed(0)):ee.amountA.amount.sub((Re=ee.amountA.fee)!=null?Re:new ue(0));ee.amountB.lt(p)&&console.log(`maximum ${n.toBase58()} amount can buy is ${ee.amountA.toString()}, input ${i.toBase58()} amount: ${ee.amountB.toString()}`);let Z=g?re(g,i,We).publicKey:void 0;return Z&&B.addInstruction({instructions:[Ut(this.scope.ownerPubKey,Z,g,i)]}),B.addInstruction({instructions:[Wi(e,this.scope.ownerPubKey,t,R.configId,R.platformId,x,I,L,R.vaultA,R.vaultB,n,i,o,We,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,ee.amountB.lt(p)?ee.amountB:p,ne,b,Z)]}),B.addCustomComputeBudget(l),B.addTipInstruction(m),B.versionBuild({txVersion:u,extInfo:q(V({},ee),{decimalOutAmount:ie,minDecimalOutAmount:new O(ne.toString())})})}async buyTokenExactOut({programId:e=st,authProgramId:t,mintA:n,mintAProgram:o=We,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:P,associatedOnly:w=!0,checkCreateATAOwner:T=!1,skipCheckMintA:h=!1}){y.lte(new ue(0))&&this.logAndCreateError("out amount should gt 0:",y.toString());let k=this.createTxBuilder(p),{publicKey:B}=qo(e,n,i);t=t!=null?t:Nt(e).publicKey;let x=r;if(!x){let Z=await this.scope.connection.getAccountInfo(B,{commitment:"processed"});Z||this.logAndCreateError("cannot found pool:",B.toBase58()),x=mn.decode(Z.data)}let S=a,I=await Ee(this.scope.connection,[S?void 0:x.configId,x.platformId].filter(Boolean).map(Z=>({pubkey:Z})));if(!S){let Z=I.find(te=>te.pubkey.equals(x.configId));(!Z||!Z.accountInfo)&&this.logAndCreateError("config not found: ",x.configId.toBase58()),S=$n.decode(Z.accountInfo.data)}let C=I.find(Z=>Z.pubkey.equals(x.platformId));(!C||!C.accountInfo)&&this.logAndCreateError("platform info not found: ",x.configId.toBase58());let N=dn.decode(C.accountInfo.data);u=u||N.feeRate;let L=c;if(!h)if(L)o=To;else{let Z=await this.scope.connection.getAccountInfo(n);if(Z&&Z.owner.equals(To)){o=Z.owner;let te=us(n,Z,o);L=as(te)||void 0}}let v=gt.buyExactOut({poolInfo:x,amountA:y,protocolFeeRate:S.tradeFeeRate,platformFeeRate:u,curveType:S.curveType,shareFeeRate:g,creatorFeeRate:N.creatorFeeRate,transferFeeConfigA:L,slot:await this.scope.connection.getSlot()}),R=new O(v.amountB.toString()),M=b?new O(Jn.add(b).toNumber()/Jn.toNumber()).clampedTo(0,Number.MIN_SAFE_INTEGER):new O(1),G=(f!=null?f:b)?new ue(R.mul(M).toFixed(0)):v.amountB,Y=this.scope.account.getAssociatedTokenAccount(n,o),J=null,ee=i.equals(Nn);k.addInstruction({instructions:[Ut(this.scope.ownerPubKey,Y,this.scope.ownerPubKey,n,o)]});let{account:ie,instructionParams:de}=await this.scope.account.getOrCreateTokenAccount({mint:i,owner:this.scope.ownerPubKey,createInfo:ee?{payer:this.scope.ownerPubKey,amount:v.amountB}:void 0,skipCloseAccount:!ee,notUseTokenAccount:ee,associatedOnly:ee?!1:w,checkCreateATAOwner:T});ie&&(J=ie),k.addInstruction(de||{}),J===void 0&&this.logAndCreateError(`cannot found mintB(${i.toBase58()}) token accounts`,"tokenAccounts",this.scope.account.tokenAccounts);let ne=P?re(P,i,We).publicKey:void 0;return ne&&k.addInstruction({instructions:[Ut(this.scope.ownerPubKey,ne,P,i)]}),k.addInstruction({instructions:[Wl(e,this.scope.ownerPubKey,t,x.configId,x.platformId,B,Y,J,x.vaultA,x.vaultB,n,i,o,We,pn(e,x.platformId,i).publicKey,fn(e,x.creator,i).publicKey,y,G,g,ne)]}),k.addCustomComputeBudget(m),k.addTipInstruction(d),k.versionBuild({txVersion:l,extInfo:{maxSpentAmount:G,outAmount:y}})}async sellToken({programId:e=st,authProgramId:t,mintAProgram:n=We,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:P=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Nt(e).publicKey;let h=this.createTxBuilder(d);p.lte(new ue(0))&&this.logAndCreateError("sell amount should be gt 0");let{publicKey:k}=qo(e,o,i),B;if(!T){let te=await this.scope.connection.getAccountInfo(o);if(te&&te.owner.equals(To)){n=te.owner;let ke=us(o,te,n);B=as(ke)||void 0}}let x=null,S=null,I=i.equals(Nn),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:w});C&&(x=C),h.addInstruction(N||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:v}=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:P,checkCreateATAOwner:w});L&&(S=L),h.addInstruction(v||{}),S===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let te=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(te.data)}let M=a,G=await Ee(this.scope.connection,[M?void 0:R.configId,R.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!M){let te=G.find(ke=>ke.pubkey.equals(R.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),M=$n.decode(te.accountInfo.data)}let Y=G.find(te=>te.pubkey.equals(R.platformId));(!Y||!Y.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let J=dn.decode(Y.accountInfo.data);c=c||J.feeRate;let ee=gt.sellExactIn({poolInfo:R,amountA:p,protocolFeeRate:M.tradeFeeRate,platformFeeRate:c,curveType:M.curveType,shareFeeRate:b,creatorFeeRate:J.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),ie=new O(ee.amountB.toString()),de=y?new O(Jn.sub(y).toNumber()/Jn.toNumber()).clampedTo(0,1):new O(1),ne=f!=null?f:y?new ue(ie.mul(de).toFixed(0)):ee.amountB;ne.lte(new ue(0))&&this.logAndCreateError(`out ${i.toBase58()} amount should be gt 0`);let Z=g?re(g,i,We).publicKey:void 0;return Z&&h.addInstruction({instructions:[Ut(this.scope.ownerPubKey,Z,g,i)]}),h.addInstruction({instructions:[ts(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,S,R.vaultA,R.vaultB,o,i,n,We,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,ee.amountA.amount.lt(p)?ee.amountA.amount:p,ne,b,Z)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{outAmount:ne}})}async sellTokenExactOut({programId:e=st,authProgramId:t,mintAProgram:n=We,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:P=!0,checkCreateATAOwner:w=!1,skipCheckMintA:T=!1}){t=t!=null?t:Nt(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:k}=qo(e,o,i),B;if(!T){let te=await this.scope.connection.getAccountInfo(o);if(te&&te.owner.equals(To)){n=te.owner;let ke=us(o,te,n);B=as(ke)||void 0}}let x=null,S=null,I=i.equals(Nn),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n,mint:o,owner:this.scope.ownerPubKey,createInfo:void 0,skipCloseAccount:!0,notUseTokenAccount:!1,associatedOnly:P,checkCreateATAOwner:w});C&&(x=C),h.addInstruction(N||{}),x===void 0&&this.logAndCreateError("cannot found mintA token accounts","tokenAccounts",this.scope.account.tokenAccounts);let{account:L,instructionParams:v}=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:P,checkCreateATAOwner:w});L&&(S=L),h.addInstruction(v||{}),S===void 0&&this.logAndCreateError("cannot found mintB token accounts","tokenAccounts",this.scope.account.tokenAccounts);let R=r;if(!R){let te=await this.scope.connection.getAccountInfo(k,{commitment:"processed"});te||this.logAndCreateError("cannot found pool",k.toBase58()),R=mn.decode(te.data)}let M=a,G=await Ee(this.scope.connection,[M?void 0:R.configId,R.platformId].filter(Boolean).map(te=>({pubkey:te})));if(!M){let te=G.find(ke=>ke.pubkey.equals(R.configId));(!te||!te.accountInfo)&&this.logAndCreateError("config not found: ",R.configId.toBase58()),M=$n.decode(te.accountInfo.data)}let Y=G.find(te=>te.pubkey.equals(R.platformId));(!Y||!Y.accountInfo)&&this.logAndCreateError("platform info not found: ",R.configId.toBase58());let J=dn.decode(Y.accountInfo.data);c=c||J.feeRate;let ee=gt.sellExactOut({poolInfo:R,amountB:p,protocolFeeRate:M.tradeFeeRate,platformFeeRate:c,curveType:M.curveType,shareFeeRate:b,creatorFeeRate:J.creatorFeeRate,transferFeeConfigA:B,slot:await this.scope.connection.getSlot()}),ie=new O(ee.amountA.amount.toString()),de=y?new O(Jn.add(y).toNumber()/Jn.toNumber()).clampedTo(0,Number.MAX_SAFE_INTEGER):new O(1),ne=(f!=null?f:y)?new ue(ie.mul(de).toFixed(0)):ee.amountA.amount,Z=g?re(g,i,We).publicKey:void 0;return Z&&h.addInstruction({instructions:[Ut(this.scope.ownerPubKey,Z,g,i)]}),h.addInstruction({instructions:[Dl(e,this.scope.ownerPubKey,t,R.configId,R.platformId,k,x,S,R.vaultA,R.vaultB,o,i,n,We,pn(e,R.platformId,i).publicKey,fn(e,R.creator,i).publicKey,p,ne,b,Z)]}),h.addCustomComputeBudget(l),h.addTipInstruction(m),h.versionBuild({txVersion:u,extInfo:{maxSellAmount:ne}})}async createPlatformConfig({programId:e=st,platformAdmin:t,platformClaimFeeWallet:n,platformLockNftWallet:o,platformVestingWallet:i,cpConfigId:r,migrateCpLockNftScale:a,transferFeeExtensionAuth:c,creatorFeeRate:u,feeRate:l,name:m,web:d,img:p,platformVestingScale:f=new ue(0),txVersion:y,computeBudgetConfig:b,txTipConfig:g,feePayer:P}){let w=this.createTxBuilder(P),{publicKey:T}=Ga(e,t);return w.addInstruction({instructions:[ql(e,t,n,o,i,T,r,c,a,l,u,m,d,p,f)]}),w.addCustomComputeBudget(b),w.addTipInstruction(g),w.versionBuild({txVersion:y,extInfo:{platformId:T}})}async updatePlatformConfig({programId:e=st,platformAdmin:t,platformId:n,updateInfo:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=n!=null?n:Ga(e,t).publicKey;return u.addInstruction({instructions:[Ul(e,t,l,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createPlatformVestingAccount({programId:e=st,platformVestingWallet:t,beneficiary:n,platformId:o,poolId:i,vestingRecord:r,txVersion:a,computeBudgetConfig:c,txTipConfig:u,feePayer:l}){let m=this.createTxBuilder(l),d=r!=null?r:Uo(e,i,n).publicKey;return m.addInstruction({instructions:[Gl(e,t,n,o,i,d)]}),m.addCustomComputeBudget(c),m.addTipInstruction(u),m.versionBuild({txVersion:a})}async claimPlatformFee({programId:e=st,authProgramId:t,platformId:n,poolId:o,platformClaimFeeWallet:i,mintB:r,vaultB:a,mintBProgram:c=We,txVersion:u,computeBudgetConfig:l,txTipConfig:m,feePayer:d}){var g;let p=this.createTxBuilder(d);t=t!=null?t:Nt(e).publicKey;let f=r,y=a;if(!f){let P=await this.scope.connection.getAccountInfo(o,{commitment:"processed"});P||this.logAndCreateError("cannot found pool:",o.toBase58());let w=mn.decode(P.data),T=await this.scope.connection.getAccountInfo(w.configId,{commitment:"processed"});T||this.logAndCreateError("cannot found config:",w.configId.toBase58()),f=$n.decode(T.data).mintB,y=y!=null?y:w.vaultB}(!f||!y)&&this.logAndCreateError("cannot found mint info, mintB: ",f.toBase58(),", vaultB: ",(g=y==null?void 0:y.toBase58())!=null?g:"");let b=re(this.scope.ownerPubKey,f,We).publicKey;return p.addInstruction({instructions:[Ut(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f)]}),p.addInstruction({instructions:[ja(e,i,t,o,n,y,b,f,c)]}),p.addCustomComputeBudget(l),p.addTipInstruction(m),p.versionBuild({txVersion:u})}async claimAllPlatformFee({programId:e=st,authProgramId:t,platformId:n,platformClaimFeeWallet:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c);return t=t!=null?t:Nt(e).publicKey,(await this.scope.connection.getProgramAccounts(e,{filters:[{dataSize:mn.span},{memcmp:{offset:mn.offsetOf("platformId"),bytes:n.toString()}}]})).forEach(m=>{let d=mn.decode(m.account.data);if(d.platformFee.lte(new ue(0)))return;let p=re(this.scope.ownerPubKey,d.mintB,We).publicKey;u.addInstruction({instructions:[Ut(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintB)]}),u.addInstruction({instructions:[ja(e,o,t,m.pubkey,n,d.vaultB,p,d.mintB,We)]})}),u.addTipInstruction(a),i===0?u.sizeCheckBuildV0({computeBudgetConfig:r}):u.sizeCheckBuild({computeBudgetConfig:r})}async createVesting({programId:e=st,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=Uo(e,t,n).publicKey;return u.addInstruction({instructions:[Qa(e,this.scope.ownerPubKey,n,t,m,o)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async createMultipleVesting({programId:e=st,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=Uo(e,t,l.wallet).publicKey;a.addInstruction({instructions:[Qa(e,this.scope.ownerPubKey,l.wallet,t,m,l.shareAmount)]})}),o===0?a.sizeCheckBuildV0({computeBudgetConfig:i}):a.sizeCheckBuild({computeBudgetConfig:i})}async claimVesting({programId:e=st,poolId:t,poolInfo:n,vestingRecord:o,txVersion:i,computeBudgetConfig:r,txTipConfig:a,feePayer:c}){let u=this.createTxBuilder(c),l=Nt(e).publicKey,m=o||Uo(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=mn.decode(f.data)}let p=re(this.scope.ownerPubKey,d.mintA,We).publicKey;return u.addInstruction({instructions:[Ut(this.scope.ownerPubKey,p,this.scope.ownerPubKey,d.mintA)]}),u.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,l,t,m,p,d.vaultA,d.mintA,We)]}),u.addCustomComputeBudget(r),u.addTipInstruction(a),u.versionBuild({txVersion:i})}async claimMultiVesting({programId:e=st,poolIdList:t,poolsInfo:n={},vestingRecords:o={},txVersion:i,computeBudgetConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=V({},n),l=Nt(e).publicKey,m=t.filter(d=>!u[d.toBase58()]);if(m.length){let d=await this.getRpcPoolsInfo({poolIdList:m});u=V(V({},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]||Uo(e,d,this.scope.ownerPubKey).publicKey,b=re(this.scope.ownerPubKey,f.mintA,We).publicKey;c.addInstruction({instructions:[Ut(this.scope.ownerPubKey,b,this.scope.ownerPubKey,f.mintA)]}),c.addInstruction({instructions:[Ha(e,this.scope.ownerPubKey,l,d,y,b,f.vaultA,f.mintA,We)]})}),i===0?c.sizeCheckBuildV0({computeBudgetConfig:r}):c.sizeCheckBuild({computeBudgetConfig:r})}async claimVaultPlatformFee({programId:e=st,platformId:t,mintB:n,mintBProgram:o=We,claimFeeWallet:i,txVersion:r,computeBudgetConfig:a,txTipConfig:c,feePayer:u}){let l=this.createTxBuilder(u),m=pn(e,t,n).publicKey,d=Xa(e).publicKey,p=this.scope.account.getAssociatedTokenAccount(n,o);return l.addInstruction({instructions:[Ut(this.scope.ownerPubKey,p,this.scope.ownerPubKey,n,o),$a(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=st,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=Xa(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:P,instructionParams:w}=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});P&&(y=P),u.addInstruction(w||{}),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:[$a(e,m.id,(b=m.claimFeeWallet)!=null?b:this.scope.ownerPubKey,p,d,y,m.mintB,(g=m.mintBProgram)!=null?g:We)]})}),o===0?u.sizeCheckBuildV0({computeBudgetConfig:i}):u.sizeCheckBuild({computeBudgetConfig:i})}async claimCreatorFee({programId:e=st,mintB:t,mintBProgram:n=We,txVersion:o,computeBudgetConfig:i,txTipConfig:r,feePayer:a}){let c=this.createTxBuilder(a),u=fn(e,this.scope.ownerPubKey,t).publicKey,l=za(e).publicKey,m=this.scope.account.getAssociatedTokenAccount(t,n);return c.addInstruction({instructions:[Ut(this.scope.ownerPubKey,m,this.scope.ownerPubKey,t,n),Za(e,this.scope.ownerPubKey,l,u,m,t,n)]}),c.addCustomComputeBudget(i),c.addTipInstruction(r),c.versionBuild({txVersion:o})}async claimMultipleCreatorFee({programId:e=st,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:We,l=fn(e,this.scope.ownerPubKey,c).publicKey,m=za(e).publicKey,d=this.scope.account.getAssociatedTokenAccount(c,u);r.addInstruction({instructions:[Ut(this.scope.ownerPubKey,d,this.scope.ownerPubKey,c,u),Za(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=mn.decode(u.accountInfo.data);o[e[c].toBase58()]=q(V({},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=$n.decode(u.accountInfo.data);a[i[c].toBase58()]=q(V({},l),{configId:u.accountInfo.owner})}return{poolInfoMap:Object.keys(o).reduce((c,u)=>q(V({},c),{[u]:q(V({},o[u]),{configInfo:a[o[u].configId.toBase58()]})}),{})}}};var On=new Ce(0),Ui=class extends qe{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($));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=se(t);for(let u=0;u<r.length;u++)c.gte(r[u].amount)?(a.addInstruction({instructions:[Tn({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(r[u].amount)):a.addInstruction({instructions:[Tn({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($),d=l.amount.token.mint.equals($),p=u.amount.token.mint,f=l.amount.token.mint,{account:y,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?eo:Ke,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?eo:Ke);else{let{account:h,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:l.amount.token.isToken2022?eo:Ke,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,k&&c.addInstruction(k)}d&&c.addInstruction({endInstructions:[Tn({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:g,programId:Ke})],endInstructionTypes:[z.CloseAccount]});let P;if(e.routeType==="route"){let h=e.middleToken;P=this.scope.account.getAssociatedTokenAccount(h.mint,h.isToken2022?eo:Ke)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),T=Ml({routeProgram:i,inputMint:p,swapInfo:q(V({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:f}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:P,destinationToken:g}});if(e.feeConfig!==void 0){let h=this.createTxBuilder(),k=u.amount.token.isToken2022?ty(y,u.amount.token.mint,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber(),u.amount.token.decimals,[],eo):Hl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber());h.addInstruction({instructions:[k],instructionTypes:[z.TransferAmount]}),h.addInstruction(T);let{transactions:B}=r===0?await h.sizeCheckBuildV0():await h.sizeCheckBuild();B.length<2&&c.addInstruction({instructions:[Hl(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[z.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 Ce(0),shareFeeReceiver:u,launchPlatformInfo:l,slot:m,mintInfo:d,epochInfo:p,ownerInfo:f={useSOLBalance:!0},checkCreateATAOwner:y=!1,computeBudgetConfig:b,txVersion:g}){let P=(f==null?void 0:f.feePayer)||this.scope.ownerPubKey,w=p!=null?p:await this.scope.fetchEpochInfo(),{clmmPoolData:T,clmmComputeAmount:{maxClmmAmountIn:h,clmmAmountOut:k,remainingAccounts:B},launchPoolInfo:x,launchAuthProgramId:S,launchSwapInfo:I,outAmount:C,minOutAmount:N}=await this.computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n,clmmPoolId:o,launchPoolId:i,slippage:a,epochInfo:w,shareFeeRate:c,launchPlatformInfo:l,slot:m,mintInfo:d}),L=e.toString()===T.poolInfo.mintA.address,v=f.useSOLBalance&&T.poolInfo.mintA.address===$.toBase58(),R=f.useSOLBalance&&T.poolInfo.mintB.address===$.toBase58(),M={},G;!r||r.equals(new O(0))?G=L?St.add(new Ce(1)):Kt.sub(new Ce(1)):G=pe.priceToSqrtPriceX64(r,T.poolInfo.mintA.decimals,T.poolInfo.mintB.decimals);let Y=this.createTxBuilder(P),[J,ee]=[new me(T.poolInfo.mintA.address),new me(T.poolInfo.mintB.address)],[ie,de]=[new me(T.poolInfo.mintA.programId),new me(T.poolInfo.mintB.programId)],ne=this.scope.account.getAssociatedTokenAccount(J,ie),Z=this.scope.account.getAssociatedTokenAccount(ee,de);Y.addInstruction({instructions:[Xo(this.scope.ownerPubKey,ne,this.scope.ownerPubKey,J,ie),Xo(this.scope.ownerPubKey,Z,this.scope.ownerPubKey,ee,de)]}),(L&&v||!L&&R)&&Y.addInstruction({instructions:[Yl.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:L?ne:Z,lamports:BigInt(h.toString())}),Ql(L?ne:Z)]}),M[T.poolInfo.mintA.address]=ne,M[T.poolInfo.mintB.address]=Z,(!ne||!Z)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ne,ownerTokenAccountB:Z}),Y.addInstruction(n?Se.makeSwapBaseOutInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ne,tokenAccountB:Z},outputMint:L?ee:J,amountOut:k,amountInMax:h,sqrtPriceLimitX64:G,remainingAccounts:B}):Se.makeSwapBaseInInstructions({poolInfo:T.poolInfo,poolKeys:T.poolKeys,observationId:T.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ne,tokenAccountB:Z},inputMint:new me(e),amountIn:t,amountOutMin:k,sqrtPriceLimitX64:G,remainingAccounts:B}));let te=x.mintProgramFlag===0?Ke:eo,ke=this.scope.account.getAssociatedTokenAccount(x.mintA,te),Re=M[x.mintB.toBase58()];if(Y.addInstruction({instructions:[Xo(this.scope.ownerPubKey,ke,this.scope.ownerPubKey,x.mintA,te)]}),!Re){let Te=x.mintB.equals($),{account:ot,instructionParams:Ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ke,mint:x.mintB,notUseTokenAccount:Te,owner:this.scope.ownerPubKey,skipCloseAccount:!Te,createInfo:Te?{payer:this.scope.ownerPubKey,amount:k}:void 0,associatedOnly:!1,checkCreateATAOwner:y});Re=ot,Ot&&Y.addInstruction(Ot)}return Y.addInstruction({instructions:[Wi(x.programId,this.scope.ownerPubKey,S,x.configId,x.platformId,new me(i),ke,Re,x.vaultA,x.vaultB,x.mintA,x.mintB,te,Ke,pn(x.programId,x.platformId,x.mintB).publicKey,fn(x.programId,x.creator,x.mintB).publicKey,I.amountB.lt(k)?I.amountB:k,N,c,u)]}),Y.addCustomComputeBudget(b),Y.versionBuild({txVersion:g,extInfo:{routes:[{mint:new me(e),amount:n?h:t,decimal:T.poolInfo[L?"mintA":"mintB"].decimals},{mint:L?ee:J,amount:k,decimal:T.poolInfo[L?"mintB":"mintA"].decimals},{mint:x.mintA,amount:C,decimal:x.mintDecimalsA}],outAmount:C,minOutAmount:N}})}async computeClmmToLaunchAmount({inputMint:e,inputAmount:t,fixClmmOut:n=!1,clmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new Ce(0),clmmPoolData:u,launchPoolInfo:l,launchPlatformInfo:m,slot:d,mintInfo:p}){var v,R,M,G,Y,J;let f=r>0?new O(r).div(2).toDecimalPlaces(4,O.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"],P=n?await ve.computeAmountIn({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountOut:t,baseMint:new me(y.poolInfo[b?"mintB":"mintA"].address),slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}):await ve.computeAmountOutFormat({poolInfo:y.computePoolInfo,tickArrayCache:y.tickData[o.toString()],amountIn:t,tokenOut:g,slippage:f,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),w=l;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(i)})),g.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${g.address}) != launch pool mintB(${w.mintB.toBase58()})`);let T=m;if(!T){let ee=await this.scope.connection.getAccountInfo(w.platformId);T=dn.decode(ee.data)}let h=p!=null?p:await this.scope.token.getTokenInfo(w.mintA),k=Nt(w.programId).publicKey,B=h.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((R=(v=h.extensions.feeConfig.olderTransferFee.epoch)!=null?v: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((G=(M=h.extensions.feeConfig.newerTransferFee.epoch)!=null?M:a==null?void 0:a.epoch)!=null?G:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,x=n?t:P.minAmountOut.amount.raw,S=gt.buyExactIn({poolInfo:w,amountB:x,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:w.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:B,slot:d!=null?d:await this.scope.connection.getSlot()}),I=S.amountA.amount.sub((Y=S.amountA.fee)!=null?Y:new Ce(0)),C=new O(I.toString()),N=new Ce(1e4),L=f?new O(N.sub(new Ce(f*1e4)).toNumber()/N.toNumber()).clampedTo(0,1):new O(1);return{clmmPoolData:y,clmmComputeAmount:{maxClmmAmountIn:n?P.maxAmountIn.amount:t,clmmAmountOut:x,remainingAccounts:P.remainingAccounts},clmmComputeInfo:P,launchPoolInfo:w,launchAuthProgramId:k,launchMintTransferFeeConfig:B,launchSwapInfo:S,outAmount:S.amountA.amount.sub((J=S.amountA.fee)!=null?J:new Ce(0)),minOutAmount:new Ce(C.mul(L).toFixed(0))}}async swapLaunchMintToClmm({inputAmount:e,clmmPoolId:t,launchPoolId:n,priceLimit:o,slippage:i=.01,shareFeeRate:r=new Ce(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:P,minLaunchOutAmount:w,outAmount:T,minOutAmount:h}=await this.computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:i,epochInfo:p,shareFeeRate:r}),k=this.createTxBuilder(d),B={},x=b.mintProgramFlag===0?Ke:eo,{account:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:x,mint:b.mintA,notUseTokenAccount:!1,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:void 0,associatedOnly:!0,checkCreateATAOwner:u});if(!S)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);let I=b.mintB.equals($),{account:C,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ke,mint:b.mintB,notUseTokenAccount:I,owner:this.scope.ownerPubKey,skipCloseAccount:!I,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1,checkCreateATAOwner:u});if(N&&k.addInstruction(N),!C)throw new Error(`do not have launch mint(${b.mintA.toString()}) token account`);B[b.mintB.toBase58()]=C,k.addInstruction({instructions:[ts(b.programId,this.scope.ownerPubKey,g,b.configId,b.platformId,new me(n),S,C,b.vaultA,b.vaultB,b.mintA,b.mintB,x,Ke,pn(b.programId,b.platformId,b.mintB).publicKey,fn(b.programId,b.creator,b.mintB).publicKey,P.amountA.amount.lt(e)?P.amountA.amount:e,w,r,a)]});let L=b.mintB.toString()===f.poolInfo.mintA.address,v=c.useSOLBalance&&f.poolInfo.mintA.address===$.toBase58(),R=c.useSOLBalance&&f.poolInfo.mintB.address===$.toBase58(),M;!o||o.equals(new O(0))?M=L?St.add(new Ce(1)):Kt.sub(new Ce(1)):M=pe.priceToSqrtPriceX64(o,f.poolInfo.mintA.decimals,f.poolInfo.mintB.decimals);let[G,Y]=[new me(f.poolInfo.mintA.address),new me(f.poolInfo.mintB.address)],[J,ee]=[new me(f.poolInfo.mintA.programId),new me(f.poolInfo.mintB.programId)],ie=v?void 0:this.scope.account.getAssociatedTokenAccount(G,J),de=R?void 0:this.scope.account.getAssociatedTokenAccount(Y,ee);if(!ie){let{account:ne,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:J,mint:G,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:L?e:0},associatedOnly:!1,checkCreateATAOwner:u});ie=ne,Z&&k.addInstruction(Z)}if(!de){let{account:ne,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:ee,mint:Y,notUseTokenAccount:!0,owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:c.feePayer||this.scope.ownerPubKey,amount:L?0:e},associatedOnly:!1,checkCreateATAOwner:u});de=ne,Z&&k.addInstruction(Z)}return B[f.poolInfo.mintA.address]=ie,B[f.poolInfo.mintB.address]=de,(!ie||!de)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ie,ownerTokenAccountB:de}),k.addInstruction(Se.makeSwapBaseInInstructions({poolInfo:f.poolInfo,poolKeys:f.poolKeys,observationId:f.computePoolInfo.observationId,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:ie,tokenAccountB:de},inputMint:new me(f.poolKeys[L?"mintA":"mintB"].address),amountIn:w,amountOutMin:h,sqrtPriceLimitX64:M,remainingAccounts:y})),k.addCustomComputeBudget(l),k.versionBuild({txVersion:m,extInfo:{routes:[{mint:b.mintA,amount:e,decimal:b.mintDecimalsA},{mint:b.mintB,amount:w,decimal:b.mintDecimalsB},{mint:new me(f.poolKeys[L?"mintB":"mintA"].address),amount:T,decimal:f.poolKeys[L?"mintB":"mintA"].decimals}],outAmount:T,minOutAmount:h}})}async computeLaunchToClmmAmount({inputAmount:e,clmmPoolId:t,launchPoolId:n,slippage:o,epochInfo:i,shareFeeRate:r=new Ce(0),clmmPoolData:a,launchPoolInfo:c,launchPlatformInfo:u}){var C,N,L,v;let l=o>0?new O(o).div(2).toDecimalPlaces(4,O.ROUND_DOWN).toNumber():o,m=c;m||(m=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(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=dn.decode(R.data)}let g=await this.scope.token.getTokenInfo(m.mintA),P=Nt(m.programId).publicKey,w=g.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((N=(C=g.extensions.feeConfig.olderTransferFee.epoch)!=null?C:i==null?void 0:i.epoch)!=null?N:0),maximumFee:BigInt(g.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((v=(L=g.extensions.feeConfig.newerTransferFee.epoch)!=null?L:i==null?void 0:i.epoch)!=null?v:0),maximumFee:BigInt(g.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:g.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,T=gt.sellExactIn({poolInfo:m,amountA:e,protocolFeeRate:m.configInfo.tradeFeeRate,platformFeeRate:b.feeRate,curveType:m.configInfo.curveType,shareFeeRate:r,creatorFeeRate:b.creatorFeeRate,transferFeeConfigA:w,slot:await this.scope.connection.getSlot()}),h=T.amountB,k=new O(h.toString()),B=new Ce(1e4),x=l?new O(B.sub(new Ce(l*1e4)).toNumber()/B.toNumber()).clampedTo(0,1):new O(1),S=new Ce(k.mul(x).toFixed(0)),I=await ve.computeAmountOutFormat({poolInfo:p.computePoolInfo,tickArrayCache:p.tickData[t.toString()],amountIn:S,tokenOut:y,slippage:l,epochInfo:i!=null?i:await this.scope.fetchEpochInfo()});return{clmmPoolData:p,clmmComputeAmount:I,launchPoolInfo:m,launchAuthProgramId:P,launchMintTransferFeeConfig:w,launchSwapInfo:T,minLaunchOutAmount:S,outAmount:I.amountOut.amount.raw,minOutAmount:I.minAmountOut.amount.raw}}async swapCpmmToLaunchMint({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,poolKeys:i,slippage:r=.01,shareFeeRate:a=new Ce(0),shareFeeReceiver:c,launchPlatformInfo:u,slot:l,mintInfo:m,epochInfo:d,ownerInfo:p={useSOLBalance:!0},checkCreateATAOwner:f=!1,computeBudgetConfig:y,txVersion:b}){let g=(p==null?void 0:p.feePayer)||this.scope.ownerPubKey,P=d!=null?d:await this.scope.fetchEpochInfo(),{computePoolInfo:w,poolKeys:T}=await this.scope.cpmm.getPoolInfoFromRpc(n.toString()),{cpmmComputInfo:h,cpmmPoolData:k,launchPoolInfo:B,launchAuthProgramId:x,launchSwapInfo:S,outAmount:I,minOutAmount:C}=await this.computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,cpmmPoolData:w,launchPoolId:o,slippage:r,epochInfo:P,shareFeeRate:a,launchPlatformInfo:u,slot:l,mintInfo:m}),N=e.toString()===k.mintA.address,L=p.useSOLBalance&&k.mintA.address===$.toBase58(),v=p.useSOLBalance&&k.mintB.address===$.toBase58(),R={},M=this.createTxBuilder(g),[G,Y]=[new me(k.mintA.address),new me(k.mintB.address)],[J,ee]=[new me(k.mintA.programId),new me(k.mintB.programId)],ie=this.scope.account.getAssociatedTokenAccount(G,J),de=this.scope.account.getAssociatedTokenAccount(Y,ee);M.addInstruction({instructions:[Xo(this.scope.ownerPubKey,ie,this.scope.ownerPubKey,G,J),Xo(this.scope.ownerPubKey,de,this.scope.ownerPubKey,Y,ee)]}),(N&&L||!N&&v)&&M.addInstruction({instructions:[Yl.transfer({fromPubkey:this.scope.ownerPubKey,toPubkey:N?ie:de,lamports:BigInt(h.amountIn.toString())}),Ql(N?ie:de)]}),R[k.mintA.address]=ie,R[k.mintB.address]=de,(!ie||!de)&&this.logAndCreateError("user do not have token account",{ownerTokenAccountA:ie,ownerTokenAccountB:de});let ne=i!=null?i:T;M.addInstruction({instructions:[Wo(k.programId,this.scope.ownerPubKey,new me(ne.authority),new me(ne.config.id),k.id,N?ie:de,N?de:ie,new me(ne.vault[N?"A":"B"]),new me(ne.vault[N?"B":"A"]),new me(N?J:ee!=null?ee:Ke),new me(N?ee:J!=null?J:Ke),N?G:Y,N?Y:G,ko(k.programId,k.id).publicKey,t,h.swapResult.outputAmount)]});let Z=B.mintProgramFlag===0?Ke:eo,te=this.scope.account.getAssociatedTokenAccount(B.mintA,Z),ke=R[B.mintB.toBase58()];if(M.addInstruction({instructions:[Xo(this.scope.ownerPubKey,te,this.scope.ownerPubKey,B.mintA,Z)]}),!ke){let Re=B.mintB.equals($),{account:Te,instructionParams:ot}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Ke,mint:B.mintB,notUseTokenAccount:Re,owner:this.scope.ownerPubKey,skipCloseAccount:!Re,createInfo:Re?{payer:this.scope.ownerPubKey,amount:h.minAmountOut}:void 0,associatedOnly:!1,checkCreateATAOwner:f});ke=Te,ot&&M.addInstruction(ot)}return M.addInstruction({instructions:[Wi(B.programId,this.scope.ownerPubKey,x,B.configId,B.platformId,new me(o),te,ke,B.vaultA,B.vaultB,B.mintA,B.mintB,Z,Ke,pn(B.programId,B.platformId,B.mintB).publicKey,fn(B.programId,B.creator,B.mintB).publicKey,S.amountB.lt(h.minAmountOut)?S.amountB:h.minAmountOut,C,a,c)]}),M.addCustomComputeBudget(y),M.versionBuild({txVersion:b,extInfo:{routes:[{mint:new me(e),amount:t,decimal:k[N?"mintDecimalA":"mintDecimalB"]},{mint:N?Y:G,amount:h.minAmountOut,decimal:k[N?"mintB":"mintA"].decimals},{mint:B.mintA,amount:I,decimal:B.mintDecimalsA}],outAmount:I,minOutAmount:C}})}async computeCpmmToLaunchAmount({inputMint:e,inputAmount:t,cpmmPoolId:n,launchPoolId:o,slippage:i,epochInfo:r,shareFeeRate:a=new Ce(0),cpmmPoolData:c,launchPoolInfo:u,launchPlatformInfo:l,slot:m,mintInfo:d}){var L,v,R,M,G,Y;let p=i>0?new O(i).div(2).toDecimalPlaces(4,O.ROUND_DOWN).toNumber():i,f=c!=null?c:(await this.scope.cpmm.getPoolInfoFromRpc(n.toString())).computePoolInfo;if(e.toString()!==f.mintA.address&&e.toString()!==f.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let y=e.toString()===f.mintA.address,b=f[y?"mintB":"mintA"],g=u;if(g||(g=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(o)})),b.address!==g.mintB.toBase58())throw new Error(`clmm swap mint(${b.address}) != launch pool mintB(${g.mintB.toBase58()})`);let P=l;if(!P){let J=await this.scope.connection.getAccountInfo(g.platformId);P=dn.decode(J.data)}let w=d!=null?d:await this.scope.token.getTokenInfo(g.mintA),T=Nt(g.programId).publicKey,h=w.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((v=(L=w.extensions.feeConfig.olderTransferFee.epoch)!=null?L:r==null?void 0:r.epoch)!=null?v:0),maximumFee:BigInt(w.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:w.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((M=(R=w.extensions.feeConfig.newerTransferFee.epoch)!=null?R:r==null?void 0:r.epoch)!=null?M:0),maximumFee:BigInt(w.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:w.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,k=await this.scope.cpmm.computeSwapAmount({pool:f,amountIn:t,outputMint:new me(b.address),slippage:p}),B=k.minAmountOut,x=gt.buyExactIn({poolInfo:g,amountB:B,protocolFeeRate:g.configInfo.tradeFeeRate,platformFeeRate:P.feeRate,curveType:g.configInfo.curveType,shareFeeRate:a,creatorFeeRate:P.creatorFeeRate,transferFeeConfigA:h,slot:m!=null?m:await this.scope.connection.getSlot()}),S=x.amountA.amount.sub((G=x.amountA.fee)!=null?G:new Ce(0)),I=new O(S.toString()),C=new Ce(1e4),N=p?new O(C.sub(new Ce(p*1e4)).toNumber()/C.toNumber()).clampedTo(0,1):new O(1);return{cpmmPoolData:f,cpmmComputInfo:k,launchPoolInfo:g,launchAuthProgramId:T,launchMintTransferFeeConfig:h,launchSwapInfo:x,outAmount:x.amountA.amount.sub((Y=x.amountA.fee)!=null?Y:new Ce(0)),minOutAmount:new Ce(I.mul(N).toFixed(0))}}async computeCpClToLaunchAmount({inputMint:e,inputAmount:t,clmmPoolId:n,cpmmPoolId:o,launchPoolId:i,slippage:r,epochInfo:a,shareFeeRate:c=new Ce(0),cpmmPoolData:u,clmmPoolData:l,launchPoolInfo:m,launchPlatformInfo:d,slot:p,mintInfo:f}){var ee,ie,de,ne,Z,te;let y=r>0?new O(r).div(2).toDecimalPlaces(4,O.ROUND_DOWN).toNumber():r,b=l!=null?l:await this.scope.clmm.getPoolInfoFromRpc(n.toString());if(e.toString()!==b.poolInfo.mintA.address&&e.toString()!==b.poolInfo.mintB.address)throw new Error("input mint does not match clmm pool mints, please check");let g=e.toString()===b.poolInfo.mintA.address,P=b.poolInfo[g?"mintB":"mintA"],w=m;if(w||(w=await this.scope.launchpad.getRpcPoolInfo({poolId:new me(i)})),P.address!==w.mintB.toBase58())throw new Error(`clmm swap mint(${P.address}) != launch pool mintB(${w.mintB.toBase58()})`);let T=d;if(!T){let ke=await this.scope.connection.getAccountInfo(w.platformId);T=dn.decode(ke.data)}let h=f!=null?f:await this.scope.token.getTokenInfo(w.mintA),k=Nt(w.programId).publicKey,B=h.extensions.feeConfig?{transferFeeConfigAuthority:me.default,withdrawWithheldAuthority:me.default,withheldAmount:BigInt(0),olderTransferFee:{epoch:BigInt((ie=(ee=h.extensions.feeConfig.olderTransferFee.epoch)!=null?ee:a==null?void 0:a.epoch)!=null?ie:0),maximumFee:BigInt(h.extensions.feeConfig.olderTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt((ne=(de=h.extensions.feeConfig.newerTransferFee.epoch)!=null?de:a==null?void 0:a.epoch)!=null?ne:0),maximumFee:BigInt(h.extensions.feeConfig.newerTransferFee.maximumFee),transferFeeBasisPoints:h.extensions.feeConfig.newerTransferFee.transferFeeBasisPoints}}:void 0,x=await ve.computeAmountOutFormat({poolInfo:b.computePoolInfo,tickArrayCache:b.tickData[n.toString()],amountIn:t,tokenOut:P,slippage:y,epochInfo:a!=null?a:await this.scope.fetchEpochInfo()}),S=u!=null?u:(await this.scope.cpmm.getPoolInfoFromRpc(o.toString())).computePoolInfo,I=await this.scope.cpmm.computeSwapAmount({pool:S,amountIn:t,outputMint:new me(P.address),slippage:y}),[C,N]=[x.minAmountOut.amount.raw,I.minAmountOut],L=C.gte(N)?"clmm":"cpmm",v=C.gte(N)?C:N,R=gt.buyExactIn({poolInfo:w,amountB:v,protocolFeeRate:w.configInfo.tradeFeeRate,platformFeeRate:T.feeRate,curveType:w.configInfo.curveType,shareFeeRate:c,creatorFeeRate:T.creatorFeeRate,transferFeeConfigA:B,slot:p!=null?p:await this.scope.connection.getSlot()}),M=R.amountA.amount.sub((Z=R.amountA.fee)!=null?Z:new Ce(0)),G=new O(M.toString()),Y=new Ce(1e4),J=y?new O(Y.sub(new Ce(y*1e4)).toNumber()/Y.toNumber()).clampedTo(0,1):new O(1);return{clmmPoolData:b,clmmComputeAmount:{maxClmmAmountIn:t,clmmAmountOut:v,remainingAccounts:x.remainingAccounts},clmmComputeInfo:x,cpmmComputInfo:I,swapPoolType:L,launchPoolInfo:w,launchAuthProgramId:k,launchMintTransferFeeConfig:B,launchSwapInfo:R,outAmount:R.amountA.amount.sub((te=R.amountA.fee)!=null?te:new Ce(0)),minOutAmount:new Ce(G.mul(J).toFixed(0))}}async fetchRoutePoolBasicInfo(e){let{amm:t=yr,clmm:n=no,cpmm:o=io}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Si.offsetOf("baseMint"),length:64}}),r=_([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=_([F("mintA"),F("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:po.span}],dataSlice:{offset:po.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:jr.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()===me.default.toString()?$:e,t=t.toString()===me.default.toString()?$: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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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:Ke,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=Xr(i),a={};Object.values(r).forEach(y=>{o.delete(y.mintA.address),a[y.mintA.address]={address:new me(y.mintA.address),programId:Ke,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 me(y.mintB.address),programId:Ke,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(Ke)?(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(Ke)?(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 xo({connection:this.scope.connection,mints:Array.from(o).map(y=>new me(y))});a=V(V({},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(V({},y),{[b]:q(V({},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,P,w,T,h,k,B,x,S;let m=l===void 0?new Ce(0):e.raw.mul(new Ce(l.feeBps.toNumber())).div(new Ce(1e4)),d=e.raw.sub(m),p=new Me(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},y=q(V({},t),{address:Pt(t.address).toString()}),b=[];for(let I of n)try{b.push(q(V({},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 N={chainId:101,address:I,programId:C.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:C.mDecimals,tags:[],extensions:{}},L=C.in.map(R=>{try{return{pool:R,data:this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:N,amountIn:p})}}catch(M){this.logDebug("route in error",R.version,R.id.toString(),M.message);return}}).sort((R,M)=>{var J,ee,ie,de;let G=R===void 0?On:R.data.amountOut.amount.raw.sub((ee=(J=R.data.amountOut.fee)==null?void 0:J.raw)!=null?ee:On),Y=M===void 0?On:M.data.amountOut.amount.raw.sub((de=(ie=M.data.amountOut.fee)==null?void 0:ie.raw)!=null?de:On);return G.lt(Y)?1:-1})[0];if(L===void 0)continue;let v=new Me(_r(N),L.data.amountOut.amount.raw.sub((P=(g=L.data.amountOut.fee)==null?void 0:g.raw)!=null?P:On));for(let R of C.out)try{let M=this.computeAmountOut({itemPool:R,tickCache:r,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:y,amountIn:v});b.push(q(V({},M),{allTrade:!!(L.data.allTrade&&M.allTrade),amountIn:L.data.amountIn,amountOut:M.amountOut,minAmountOut:M.minAmountOut,currentPrice:void 0,executionPrice:new O(new Mt({baseToken:L.data.amountIn.amount.token,denominator:L.data.amountIn.amount.raw,quoteToken:M.amountOut.amount.token,numerator:M.amountOut.amount.raw.sub((T=(w=M.amountOut.fee)==null?void 0:w.raw)!=null?T:On)}).toFixed()),priceImpact:new O(L.data.priceImpact.add(M.priceImpact).toFixed()),fee:[L.data.fee[0],M.fee[0]],routeType:"route",poolInfoList:[L.pool,R],remainingAccounts:[L.data.remainingAccounts[0],M.remainingAccounts[0]],minMiddleAmountFee:(h=M.amountOut.fee)!=null&&h.raw?new Me(L.data.amountOut.amount.token,((B=(k=L.data.amountOut.fee)==null?void 0:k.raw)!=null?B:On).add((S=(x=M.amountOut.fee)==null?void 0:x.raw)!=null?S:On)):void 0,middleToken:L.data.amountOut.amount.token,poolReady:L.data.poolReady&&M.poolReady,poolType:[L.data.poolType,M.poolType],feeConfig:f,expirationTime:un(L.data.expirationTime,M.expirationTime)}))}catch(M){this.logDebug("route out error",R.version,R.id.toString(),M.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:P,executionPriceX64:w}=ve.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 O(f.toFixed()),executionPrice:new O(y.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[P],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:r,clmmExPriceX64:[w],expirationTime:un(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:xi(q(V({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xi(q(V({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new Me(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:xi(q(V({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:xi(q(V({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new Me(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 me(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=qa.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Jr.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(V({},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=V({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:Na({programId:new me(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]||{marketProgramId:l.marketProgramId.toBase58(),marketId:l.marketId.toBase58(),marketAuthority:me.default.toBase58(),marketBaseVault:me.default.toBase58(),marketQuoteVault:me.default.toBase58(),marketBids:me.default.toBase58(),marketAsks:me.default.toBase58(),marketEventQueue:me.default.toBase58()});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:wo(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:Tt({address:u.mintLp.toBase58(),programId:Ke.toBase58(),decimals:u.lpDecimals}),config:q(V({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 ny,Transaction as Ja,TransactionInstruction as oy}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as iy}from"@solana/spl-token";import jl from"bn.js";var It=class extends qe{static getPdaPoolId(e,t){return be([It.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return be([It.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new jl(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=>It.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<It.VERSION_PROJECT.length;l++)a.push(...r.map(m=>It.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!==It.POOL_LAYOUT.span||b.data.length!==It.OWNER_LAYOUT.span)continue;let g=It.POOL_LAYOUT.decode(y.data),P=It.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),T=g.endTime.toNumber(),h=P.tokenInfo.map(x=>x.debtAmount.gt(new jl(0))).filter(x=>!x).length!==3,k=i>w&&i<T&&g.status===1,B=h&&k;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:P.lpAmount,project:It.VERSION_PROJECT[m],openTime:w,endTime:T,canClaim:B,canClaimErrorType:h?k?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,S)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:P.tokenInfo[S].debtAmount.add(P.tokenInfo[S].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t,feePayer:n}){t.wallet||this.scope.checkOwner();let o=this.createTxBuilder(n),i=t.wallet||this.scope.ownerPubKey,r=[];for(let u of e.tokenInfo){let{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Ye.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(Ye.WSOL.mint),associatedOnly:u.mintAddress.equals(Ye.WSOL.mint)?!1:t.associatedOnly});m&&o.addInstruction(m),r.push(l)}o.addInstruction({instructions:[It.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(Ye.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!d.mintAddress.equals(Ye.WSOL.mint),associatedOnly:d.mintAddress.equals(Ye.WSOL.mint)?!1:t.associatedOnly});f&&o.addInstruction(f),p&&(r[d.mintAddress.toString()]=p,m.push(p))}o.addInstruction({instructions:[It.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 Ls(u,[i,...c.map(l=>l.publicKey)])?[{transaction:a,signer:c}]:[{transaction:new Ja().add(...u.slice(0,o.AllTxData.instructions.length-1)),signer:c},{transaction:new Ja().add(...u.slice(o.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ja().add(...o.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:iy,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 oy({keys:i,programId:e,data:a})}},nn=It;nn.CLAIMED_NUM=3,nn.POOL_LAYOUT=_([Le(8),E("bump"),E("status"),A("openTime"),A("endTime"),F("ammId"),Q(_([E("mintDecimals"),F("mintAddress"),F("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),It.CLAIMED_NUM,"tokenInfo"),Q(A(),10,"padding")]),nn.OWNER_LAYOUT=_([Le(8),E("bump"),E("version"),F("poolId"),F("owner"),A("lpAmount"),Q(_([F("mintAddress"),A("debtAmount"),A("claimedAmount")]),It.CLAIMED_NUM,"tokenInfo"),Q(A(),4,"padding")]),nn.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ny(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 Xi}from"@solana/web3.js";import Jl from"bn.js";import{SYSVAR_CLOCK_PUBKEY as sy,TransactionInstruction as $l}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zl}from"@solana/spl-token";var ry=_([E("instruction"),mc("amount")]),Gi=_([E("instruction")]);function ls({programId:s},e){let t=[{pubkey:Zl,isSigner:!1,isWritable:!1},{pubkey:_u,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Gi.span);return Gi.encode({instruction:2},n),new $l({keys:t,programId:s,data:n})}function eu(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(Gi.span);Gi.encode({instruction:2},r);let a=[{pubkey:Zl,isWritable:!1,isSigner:!1},{pubkey:sy,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 $l({programId:e.programId,keys:a,data:r})}var ay={[ii.IDO_PROGRAM_ID_V1.toString()]:1,[ii.IDO_PROGRAM_ID_V2.toString()]:2,[ii.IDO_PROGRAM_ID_V3.toString()]:3,[ii.IDO_PROGRAM_ID_V4.toString()]:4},zo=class extends qe{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i,feePayer:r}){let a=this.createTxBuilder(r),c=ay[t.programId];c||this.logAndCreateError("invalid version",c);let u=yt(t),[l,m]=[!new Jl(e.coin).isZero(),!new Jl(e.pc).isZero()],d=u.projectInfo.mint.address.equals($),{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($),{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?[ls({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:p,userIdoInfo:new Xi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...m?[ls({programId:new Xi(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Xi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(c<3)return!l&&!m&&this.logAndCreateError("no claimable rewards"),a.addInstruction({instructions:[ls({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:p,userIdoInfo:new Xi(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let P={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 Xi(e.userIdoInfo),owner:this.scope.ownerPubKey}};return a.addInstruction({instructions:[...l?[eu(q(V({},P),{side:"base"}))]:[],...m?[eu(q(V({},P),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as uy}from"@solana/web3.js";import{MintLayout as cy,TOKEN_2022_PROGRAM_ID as tu,TOKEN_PROGRAM_ID as nu}from"@solana/spl-token";var zi=class extends qe{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(_n.address,_n),this._mintGroup.official.add(_n.address),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,q(V({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?tu.toBase58():nu.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(V({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?tu.toBase58():nu.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 _n;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,q(V({},i),{priority:2})),i;let r=await this.scope.connection.getAccountInfo(new uy(n));if(!r)throw new Error(`mint address not found: ${n}`);let a=cy.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 ms=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 an(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.loopMultiTxStatus=l,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=he("Raydium"),this.farm=new gi({scope:this,moduleName:"Raydium_Farm"}),this.account=new ci({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Li({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new zi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ui({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Oi({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 Eo({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new zo({scope:this,moduleName:"Raydium_ido"}),this.launchpad=new qi({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=ly({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:r,urlConfigs:a}=t,c=new Tr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:r}),u=new ms(q(V({},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(Ir);return this._owner.publicKey}setOwner(e){return this._owner=e?new an(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(oc);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(Ir),new Error(Ir)}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(V({},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{ms as Raydium};
2
2
  /*!
3
3
  * decimal.js v10.6.0
4
4
  * An arbitrary-precision Decimal type for JavaScript.